From a6a689b235357bc5b2ef6154bde456d6271a7d41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Tue, 3 Oct 2017 20:48:45 -0700 Subject: [PATCH] Fixed row/column matrix issue. --- examples/36-sky/fs_sky.sc | 14 +++--- examples/36-sky/vs_sky.sc | 56 ++++++++++------------ examples/runtime/shaders/dx11/vs_sky.bin | Bin 3063 -> 3063 bytes examples/runtime/shaders/dx9/vs_sky.bin | Bin 2110 -> 2110 bytes examples/runtime/shaders/essl/vs_sky.bin | Bin 3243 -> 3404 bytes examples/runtime/shaders/glsl/vs_sky.bin | Bin 3081 -> 3230 bytes examples/runtime/shaders/metal/vs_sky.bin | Bin 3672 -> 3811 bytes 7 files changed, 33 insertions(+), 37 deletions(-) diff --git a/examples/36-sky/fs_sky.sc b/examples/36-sky/fs_sky.sc index 0abe4bafc..7c53d5018 100644 --- a/examples/36-sky/fs_sky.sc +++ b/examples/36-sky/fs_sky.sc @@ -5,22 +5,22 @@ $input v_skyColor, v_screenPos, v_viewDir * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ -uniform vec4 u_parameters; // x - sun size, y - sun bloom, z - exposition, w - time -uniform vec4 u_sunDirection; -uniform vec4 u_sunLuminance; +uniform vec4 u_parameters; // x - sun size, y - sun bloom, z - exposition, w - time +uniform vec4 u_sunDirection; +uniform vec4 u_sunLuminance; #include "../common/common.sh" void main() { float size2 = u_parameters.x * u_parameters.x; - + vec3 lightDir = normalize(u_sunDirection.xyz); - float distance = 2.0 * (1.0 - dot(normalize(v_viewDir), lightDir)); - float sun = exp(-distance/ u_parameters.y / size2) + step(distance, size2); + float dist = 2.0 * (1.0 - dot(normalize(v_viewDir), lightDir)); + float sun = exp(-dist/ u_parameters.y / size2) + step(dist, size2); float sun2 = min(sun * sun, 1.0); vec3 color = v_skyColor + sun2; color = toGamma(color); - + gl_FragColor = vec4(color, 1.0); } diff --git a/examples/36-sky/vs_sky.sc b/examples/36-sky/vs_sky.sc index 5c8c4599f..10751bd1f 100644 --- a/examples/36-sky/vs_sky.sc +++ b/examples/36-sky/vs_sky.sc @@ -7,10 +7,10 @@ $output v_skyColor, v_screenPos, v_viewDir */ -uniform vec4 u_sunDirection; -uniform vec4 u_skyLuminanceXYZ; -uniform vec4 u_parameters; // x - sun size, y - sun bloom, z - exposition -uniform vec4 u_perezCoeff[5]; +uniform vec4 u_sunDirection; +uniform vec4 u_skyLuminanceXYZ; +uniform vec4 u_parameters; // x - sun size, y - sun bloom, z - exposition +uniform vec4 u_perezCoeff[5]; #include "../common/common.sh" @@ -19,56 +19,52 @@ vec3 Perez(vec3 A,vec3 B,vec3 C,vec3 D, vec3 E,float costeta, float cosgamma) float _1_costeta = 1.0 / costeta; float cos2gamma = cosgamma * cosgamma; float gamma = acos(cosgamma); - vec3 f = (vec3(1.0, 1.0, 1.0) + A * exp(B * _1_costeta)) * (vec3(1.0, 1.0, 1.0) + C *exp(D * gamma) + E * cos2gamma); + vec3 f = (vec3_splat(1.0) + A * exp(B * _1_costeta)) + * (vec3_splat(1.0) + C * exp(D * gamma) + E * cos2gamma); return f; } void main() { v_screenPos = a_position.xy; - + vec4 rayStart = mul(u_invViewProj, vec4(vec3(a_position.xy, -1.0), 1.0)); vec4 rayEnd = mul(u_invViewProj, vec4(vec3(a_position.xy, 1.0), 1.0)); - + rayStart = rayStart / rayStart.w; rayEnd = rayEnd / rayEnd.w; - + v_viewDir = normalize(rayEnd.xyz - rayStart.xyz); v_viewDir.y = abs(v_viewDir.y); - + gl_Position = vec4(a_position.xy, 1.0, 1.0); vec3 lightDir = normalize(u_sunDirection.xyz); vec3 skyDir = vec3(0.0, 1.0, 0.0); - // Perez coefficients. + // Perez coefficients. vec3 A = u_perezCoeff[0].xyz; vec3 B = u_perezCoeff[1].xyz; vec3 C = u_perezCoeff[2].xyz; vec3 D = u_perezCoeff[3].xyz; vec3 E = u_perezCoeff[4].xyz; - + float costeta = max(dot(v_viewDir, skyDir), 0.001); float cosgamma = clamp(dot(v_viewDir, lightDir), -0.9999, 0.9999); float cosgammas = dot(skyDir, lightDir); - - vec3 P = Perez(A,B,C,D,E, costeta, cosgamma); - vec3 P0 = Perez(A,B,C,D,E, 1.0, cosgammas); - - vec3 skyColorxyY = vec3(u_skyLuminanceXYZ.x / (u_skyLuminanceXYZ.x+u_skyLuminanceXYZ.y + u_skyLuminanceXYZ.z), - u_skyLuminanceXYZ.y / (u_skyLuminanceXYZ.x+u_skyLuminanceXYZ.y + u_skyLuminanceXYZ.z), - u_skyLuminanceXYZ.y); - - vec3 Yp = skyColorxyY * P / P0; - - vec3 skyColorXYZ = vec3(Yp.x * Yp.z / Yp.y,Yp.z, (1.0 - Yp.x- Yp.y)*Yp.z/Yp.y); - - // HDTV rec. 709 matrix - mat3 m = mat3( - 3.240479, -0.969256, 0.055648, - -1.53715, 1.875991, -0.204043, - -0.49853, 0.041556, 1.057311 - ); - v_skyColor = mul((skyColorXYZ * u_parameters.z), m); + vec3 P = Perez(A,B,C,D,E, costeta, cosgamma); + vec3 P0 = Perez(A,B,C,D,E, 1.0, cosgammas); + + vec3 skyColorxyY = vec3( + u_skyLuminanceXYZ.x / (u_skyLuminanceXYZ.x+u_skyLuminanceXYZ.y + u_skyLuminanceXYZ.z) + , u_skyLuminanceXYZ.y / (u_skyLuminanceXYZ.x+u_skyLuminanceXYZ.y + u_skyLuminanceXYZ.z) + , u_skyLuminanceXYZ.y + ); + + vec3 Yp = skyColorxyY * P / P0; + + vec3 skyColorXYZ = vec3(Yp.x * Yp.z / Yp.y,Yp.z, (1.0 - Yp.x- Yp.y)*Yp.z/Yp.y); + + v_skyColor = convertXYZ2RGB(skyColorXYZ * u_parameters.z); } diff --git a/examples/runtime/shaders/dx11/vs_sky.bin b/examples/runtime/shaders/dx11/vs_sky.bin index 34523302e1e7a25430e9aff686d29250dc47f1ac..b51c22b85dd718f60c657d18b02d2d2bbcdbab83 100644 GIT binary patch delta 146 zcmew^{#|@RrGRLEfm%}G+{LBWbGq{67Qfio`Gc#B$$^1kR=+mr85kKE4ln=!tH~m> delta 146 zcmew^{#|@RrND;=`zJCNwWfWvOkb~a=*fbOojLJuCrKEujo{7JOxsvB_!*uoU|@LCz`?-4%*4R-Kmdi$@<0&EpDf9t3IKQzBE0|r delta 116 zcmdlduuotEBa;s%0D?dU237$E{so$f75gg{KG-iX)3Sw$3j)P8 z-Y45G`w+12N9bm2rfsYm3=B^i_!*uo;9y{2W@2D^0OAY4`7B_*Ado*@t`^H0+Hx+z9lG8LyiZ^#;Q`WSTepRGWMK*~t}cAB zEt}Hsc|VECi+R6za)M&>r{ae&|6DbYMn08XC{$W8m=V`9BbhTe&X6mcYe{OthP7w- z*XXW{khaDOV;B(6GlN77kfS24&Hq4u1%zx!DjBapE-+Ilw2d0-ObGqQXx)C@Jyx5_ M2W9y0HA!y10md#@!Twm_QLzU@VbYyWci;7U z^*qn%6JCqQ*bK+(p*wW}_8>&`{pdo23>&yKy$jB_u?>T~<;i##wa~IO%2+O7t0Y%k xQdNMGil{Pmk|;@AqykXZmY8u0OO+-)q2ZbmrN!VfUH?*%)rfh%%kEh=`vCygC?x;@ diff --git a/examples/runtime/shaders/glsl/vs_sky.bin b/examples/runtime/shaders/glsl/vs_sky.bin index bcbc1dda17694e30a9f9e4ee907dde991def49b8..2f4fd1a8bfbaea58501d7edb6d88315faf4f2683 100644 GIT binary patch delta 312 zcmZwCO>V+45C!0h?m`a$yIBU5S~LDjEYwvGVg-m;&?u=BA`%I)?ye``4!vRRHd#=0 z_bk8pJpNeRmY?sl`01;8oL`Hb0DJBS%W)II6yXKpwye9{Su(JOldW@?mqlB+h7GIG z?82lwY%Qm7{7vlaC-+qgak!2J;}WHk2|N>1A|;Xeh)kMH36iS>uH)N3OQym3EJqvSFOG`trLL&p9CSx$u#L~hP c$O39HF$8J?DKs!OH#RiX)U@WR<>F!h09hp-ga7~l diff --git a/examples/runtime/shaders/metal/vs_sky.bin b/examples/runtime/shaders/metal/vs_sky.bin index f0b21f2b35ac0de2e30fb683182e98d26f4a042d..bec2f65e0d2ae06d123f31e2295952d8bb4a5a15 100644 GIT binary patch delta 313 zcmZvWJqp4=5QQP7prtkn12z%XW%f5mpCqKFno7Bxs>;}ryZ@8E6hy@b?$dzo4Hjkz!v4zG6QqKSqFaNPyS3%ma8;s(&l{IR zTtTs*T%uHxz?4xX5++iAB9$gpg2@SK3MRo^OUjnS^F|x4HMs$!X`+!a0!UFZrSyNt vwdL@%XQc>BkaCpBl_6e-D&btUB=(SJ*3pYS@5`mj+{xR*xQOFp(HndL%n4G& delta 176 zcmaDXdqZYIA=4w?jm2WTlQ;2+FltO*$*Wwiprw$Olb={(Tw$yMVQ3iZ8JQTEm|N;7 z=o;u*npql|n&~JQ=oy%rnweN=>Oj?N=o;#o8k-xM>L?iMS(uwzS{i~i7#RRH8zU(* z&@-{LFf|4nVPXh01f;>h)ZEz6P*YPv)0#^`p(wSav?xy@KDQ(%KHr+FmWzu408>0H A3jhEB