From c62ab1ec8471883bac536bde1f8a61d759408b5b Mon Sep 17 00:00:00 2001 From: Peter Li Date: Sun, 11 May 2025 22:16:50 -0700 Subject: [PATCH] SSAO updated and certifiably working --- engine/rend/shaders/lit_mesh.frag.hlsl | 5 +- engine/rend/shaders/lit_mesh.frag.json | 17 +- engine/rend/shaders/meshes.vert.hlsl | 6 + engine/rend/shaders/meshes.vert.json | 30 +++- engine/rend/shaders/postProc.frag.hlsl | 7 +- engine/rend/shaders/ssao.frag.hlsl | 34 +++- engine/rend/src/sgpu/renderer.zig | 1 + .../content/_shaders/dxil/lit_mesh.frag.dxil | Bin 8136 -> 8336 bytes .../content/_shaders/dxil/meshes.vert.dxil | Bin 6904 -> 7596 bytes projects/content/_shaders/dxil/ssao.frag.dxil | Bin 8364 -> 8260 bytes .../content/_shaders/msl/lit_mesh.frag.msl | 161 +++++++++--------- projects/content/_shaders/msl/meshes.vert.msl | 17 +- projects/content/_shaders/msl/ssao.frag.msl | 73 ++++---- .../content/_shaders/spv/lit_mesh.frag.spv | Bin 7980 -> 8060 bytes projects/content/_shaders/spv/meshes.vert.spv | Bin 3232 -> 3520 bytes projects/content/_shaders/spv/ssao.frag.spv | Bin 9064 -> 9356 bytes 16 files changed, 208 insertions(+), 143 deletions(-) diff --git a/engine/rend/shaders/lit_mesh.frag.hlsl b/engine/rend/shaders/lit_mesh.frag.hlsl index 2a6f215..941b278 100644 --- a/engine/rend/shaders/lit_mesh.frag.hlsl +++ b/engine/rend/shaders/lit_mesh.frag.hlsl @@ -188,7 +188,8 @@ PixelOutput main( float3 WorldPos: TEXCOORD1, float3 Normal: TEXCOORD2, float4 DirectionalShadowFragPos: TEXCOORD3, - uint Instance: TEXCOORD4 + uint Instance: TEXCOORD4, + float3 ScreenNormal: TEXCOORD5 ) { float4 s; @@ -254,7 +255,7 @@ PixelOutput main( PixelOutput o; o.Position = float4(WorldPos, 1.0); - o.Normal = float4(Normal, 1.0); + o.Normal = float4(ScreenNormal, 1.0); o.Color = float4(c2, alpha); o.Emissive = float4(0.0, 0.0, 0.0, 1.0); diff --git a/engine/rend/shaders/lit_mesh.frag.json b/engine/rend/shaders/lit_mesh.frag.json index a619351..c88358d 100644 --- a/engine/rend/shaders/lit_mesh.frag.json +++ b/engine/rend/shaders/lit_mesh.frag.json @@ -6,7 +6,7 @@ } ], "types" : { - "_22" : { + "_23" : { "name" : "type.Uniforms", "members" : [ { @@ -46,7 +46,7 @@ } ] }, - "_25" : { + "_26" : { "name" : "Scene", "members" : [ { @@ -78,12 +78,12 @@ } ] }, - "_24" : { + "_25" : { "name" : "type.StructuredBuffer.Scene", "members" : [ { "name" : "_m0", - "type" : "_25", + "type" : "_26", "array" : [ 0 ], @@ -121,6 +121,11 @@ "type" : "uint", "name" : "in.var.TEXCOORD4", "location" : 4 + }, + { + "type" : "vec3", + "name" : "in.var.TEXCOORD5", + "location" : 5 } ], "outputs" : [ @@ -199,7 +204,7 @@ ], "ssbos" : [ { - "type" : "_24", + "type" : "_25", "name" : "scene", "readonly" : true, "block_size" : 0, @@ -209,7 +214,7 @@ ], "ubos" : [ { - "type" : "_22", + "type" : "_23", "name" : "type.Uniforms", "block_size" : 80, "set" : 3, diff --git a/engine/rend/shaders/meshes.vert.hlsl b/engine/rend/shaders/meshes.vert.hlsl index 970779d..4dbf89d 100644 --- a/engine/rend/shaders/meshes.vert.hlsl +++ b/engine/rend/shaders/meshes.vert.hlsl @@ -19,6 +19,7 @@ struct Output float3 Normal: TEXCOORD2; float4 DirectionalShadowFragPos: TEXCOORD3; uint Instance: TEXCOORD4; + float3 ScreenNormal: TEXCOORD5; float4 Position : SV_Position; }; @@ -40,6 +41,7 @@ StructuredBuffer scene: register(t0, space0); cbuffer Uniforms : register(b0, space1) { float4x4 ViewProjection; + float4x4 NoTranslateView; float4x4 ShadowMapProjection; float time; }; @@ -82,6 +84,10 @@ Output main(Input input) float4x4 noTranslate = ExtractRotation(scene[input.Instance].Model); output.Normal = normalize(mul(noTranslate, float4(input.Normal, 1.0))).xyz; + + float4x4 noTranslateScreen = mul(NoTranslateView, noTranslate); + output.ScreenNormal = mul(noTranslateScreen, float4(input.Normal, 1.0)).xyz; + output.DirectionalShadowFragPos = mul(ShadowMapProjection, WorldPos); output.Instance = input.Instance; diff --git a/engine/rend/shaders/meshes.vert.json b/engine/rend/shaders/meshes.vert.json index ab8acfa..218501d 100644 --- a/engine/rend/shaders/meshes.vert.json +++ b/engine/rend/shaders/meshes.vert.json @@ -6,7 +6,7 @@ } ], "types" : { - "_14" : { + "_15" : { "name" : "Scene", "members" : [ { @@ -38,12 +38,12 @@ } ] }, - "_13" : { + "_14" : { "name" : "type.StructuredBuffer.Scene", "members" : [ { "name" : "_m0", - "type" : "_14", + "type" : "_15", "array" : [ 0 ], @@ -55,7 +55,7 @@ } ] }, - "_16" : { + "_17" : { "name" : "type.Uniforms", "members" : [ { @@ -66,16 +66,23 @@ "row_major" : true }, { - "name" : "ShadowMapProjection", + "name" : "NoTranslateView", "type" : "mat4", "offset" : 64, "matrix_stride" : 16, "row_major" : true }, + { + "name" : "ShadowMapProjection", + "type" : "mat4", + "offset" : 128, + "matrix_stride" : 16, + "row_major" : true + }, { "name" : "time", "type" : "float", - "offset" : 128 + "offset" : 192 } ] } @@ -122,11 +129,16 @@ "type" : "uint", "name" : "out.var.TEXCOORD4", "location" : 4 + }, + { + "type" : "vec3", + "name" : "out.var.TEXCOORD5", + "location" : 5 } ], "ssbos" : [ { - "type" : "_13", + "type" : "_14", "name" : "scene", "readonly" : true, "block_size" : 0, @@ -136,9 +148,9 @@ ], "ubos" : [ { - "type" : "_16", + "type" : "_17", "name" : "type.Uniforms", - "block_size" : 132, + "block_size" : 196, "set" : 1, "binding" : 0 } diff --git a/engine/rend/shaders/postProc.frag.hlsl b/engine/rend/shaders/postProc.frag.hlsl index 4344326..e8c0680 100644 --- a/engine/rend/shaders/postProc.frag.hlsl +++ b/engine/rend/shaders/postProc.frag.hlsl @@ -130,10 +130,15 @@ float4 main(float2 UV : TEXCOORD0) : SV_Target0 // c = float3(uv.x, uv.y, 0.0); // c = SsaoTexture.Sample(Sampler2, uv).x; - // float ssao = SsaoTexture.Sample(Sampler2, uv).x; + // float4 ssao = SsaoTexture.Sample(Sampler2, uv); float ssao = blurSSAO(uv); c = c * ssao; + + // float4 x = SsaoTexture.Sample(Sampler2, uv); + // c = x; + + // c = ssao.xyz; c.x *= 1.0 + 0.000001 * EmissiveTexture.Sample(Sampler1, uv).x; c.x *= 1.0 + 0.000001 * ColorTexture.Sample(Sampler0, uv).x; diff --git a/engine/rend/shaders/ssao.frag.hlsl b/engine/rend/shaders/ssao.frag.hlsl index adea668..8f5f099 100644 --- a/engine/rend/shaders/ssao.frag.hlsl +++ b/engine/rend/shaders/ssao.frag.hlsl @@ -34,46 +34,66 @@ float4 main(float2 UV: TEXCOORD0) : SV_Target0 { return 1.0; } - float3 normal = normalize(mul(View, NormalTexture.Sample(Sampler1, uv)).xyz); + + float3 normal = NormalTexture.Sample(Sampler1, uv).xyz; float3 randomVec = normalize(NoiseTexture.Sample(Sampler2, uv * scale).xyz); + // randomVec = normalize(float3(1.0, 1.0, 0.0) + randomVec * 0.00001); + + float3 x = normal; float3 tangent = normalize(randomVec - normal * dot(randomVec, normal)); float3 bitangent = cross(normal, tangent); - float3x3 TBN = float3x3(tangent, bitangent, normal); + float3x3 TBN = transpose(float3x3(tangent, bitangent, normal)); + + x = tangent; float occlusion = 0.0; + x = float3(0.0,0.0,0.0); for(int i = 0; i < numSamples; i += 1) { - float3 samplePos = mul(TBN, SamplingKernel[i]); // from tangent to view-space + float3 samplePos = mul(TBN, SamplingKernel[i] + float3(0.0, 0.0, 0.01)); //float3(0.0, 0.0, 1.0)); // from tangent to view-space samplePos = position + samplePos * radius; // project sample position (to sample texture) (to get position on screen/texture) float4 offset = float4(samplePos, 1.0); + // c = offset - float4(position, 1.0); + offset = mul(Projection, offset); // from view to clip-space offset.xyz /= offset.w; // perspective divide offset.xyz = offset.xyz * 0.5 + 0.5; // transform to range 0.0 - 1.0 offset.y *= -1; + offset.y += 1.0; + + // x += (float3(offset.xy - uv, 0.0) * 0.5 + 0.5) / numSamples; // get sample depth float sampleDepth = mul(View, PositionTexture.Sample(Sampler0, offset.xy)).z; // texture(gPosition, offset.xy).z; // get depth value of kernel sample + x += float3(sampleDepth, sampleDepth, sampleDepth) / numSamples; + x -= float3(samplePos.z, samplePos.z, samplePos.z) / numSamples; // c = float4(sampleDepth, sampleDepth, sampleDepth, 1.0) / 100; // c = float4(offset) * 2.0 - 0.6 ; // range check & accumulate float rangeCheck = smoothstep(0.0, 1.0, radius / abs(position.z - sampleDepth)); - occlusion += (sampleDepth >= samplePos.z + bias ? 1.0 : 0.0) * rangeCheck; + occlusion += (sampleDepth <= samplePos.z - bias ? 1.0 : 0.0) * rangeCheck; + + if (samplePos.z > 30) + { + occlusion *= max(0.0, 1.0 - ((samplePos.z - 30) / 300)); + } } + x.z = 0; occlusion = 1.0 - (occlusion / numSamples); - + // occlusion = 1.0 - occlusion; // c += PositionTexture.Sample(Sampler0, uv).x * 0.00001; // c += NormalTexture.Sample(Sampler1, uv).x * 0.00001; // c += NoiseTexture.Sample(Sampler2, uv).x * 0.00001; // float x = length(c); // c = float4(x, x, x, 1.0); - - c = occlusion; + //c = float4(x, 1.0); + return c + occlusion * 0.00001; } diff --git a/engine/rend/src/sgpu/renderer.zig b/engine/rend/src/sgpu/renderer.zig index c1f29c7..62d8fb2 100644 --- a/engine/rend/src/sgpu/renderer.zig +++ b/engine/rend/src/sgpu/renderer.zig @@ -585,6 +585,7 @@ pub const Renderer = struct { const ptr: *meshes_vert.Uniforms = @ptrCast(@alignCast(&data)); if (self.activeCamera) |camera| { ptr.ViewProjection = @bitCast(camera.final); + ptr.NoTranslateView = @bitCast(camera.noTranslate); } ptr.ShadowMapProjection = @bitCast(self.shadowMapProjection); // ptr.ViewProjection = @bitCast(self.shadowMapProjection); diff --git a/projects/content/_shaders/dxil/lit_mesh.frag.dxil b/projects/content/_shaders/dxil/lit_mesh.frag.dxil index ab723e73a0553ea8afc6ef3b584096ce37f6527b..9dced69271b20a47754e3f461d7a224ed0d91f94 100644 GIT binary patch delta 3281 zcma);dsq`!7Qp8blF17aKo|(ZkSK(Ydg0~~c4FH*mp2`UAqZ+AAczHeIgk}Vq`)`~WCH_& zvV9<^7)Va$QW68c*|s$2rT9_s!UQsFw;$Am!S;iC`q4!{tn_0{6iiRD1M#92&`=<> z&SD+>*D0?S1cDY(eXt*8fq8S73<&(5Z!&5O{tqmtZXog048jiGt|=^e9GMVM z$X&XEX4At)fnAkuxf#xbpi})R3=)A8`(I-wz;HNq&^M48V1=;#Io*>er=?R$ean(8 zoHRTd3xiy*{&Xi4b%p*k7OLBIW-s_@0gb^HWGDpUGCFltI0Pm3hhvLTtwB*KLdu=y zwxMW?D(1*g4DVyLcb|?cGOoARZ-n-iDOeFXYc{Rclx^Em;a8{PC&kpIT5PFyRSfUE zV%Qc}oXdP&SO2=XJ{PanG}do&n#sEm_wSwDKJq@|$Nki-861TJzR?HfX>Qj?2kgqA*X>gqCLA{V$awor z`-t-xBP%FD9yoYv@Z;3MzEgvd*5K9Rq4KWJYoobk<-2;gJxx57_FWmk8_a9Lg7ZkFowelTj{pflK5xVQ+B{1#T`d|S2Y<;BlNBTUj zkM+VN7#4y0hq!o<$r|F>A&<%2pWR0`CCVA3Qh~-(8~u{}^GPLfl8<%82gDa!8gw1R031Xe_lrxb zO>hcYtqdiUHBf(aP}mh^3$Cs{ByK1Czh!hek{H8`E@u*U__QYcs)GNGj(<&EfadY9 ztJBF90!|6#?;oeF@MGM%M&wqRHGT9Lm-jWb1uf#=R~xcH1#dHC*N7NJPIGdhg;nHW z?I9oN`9y4DlEzVVi^GDVEj4pmdGFHF1t(Jd5Nipe>CViwuYYpaAlD+!S;@tLC*=UZbb}>HHxek5NY0f>` z$vjrdDk5F_)68nKKG|z^me(JgWQ#2d@~e|!wS43XNAzZ*0$oF(YfZKbTmL$7D09t3 zrffcTvSn=0`PQW`j-DTUncWz%xia<*P4OFB%5sn%@1Q?@9vn)B-wntHkBSg8;JmrCw0~ zra62B7E{{;>FiCZVR1}hG4xJS-#^BKieSN|4g6t+pv{QG;FN&EzifR!xEgbW1s zU%>k9QQ@N|;lRX^dpB`q(U&P&%pI0+hqbxqJ!*n3gM$D`m~6fLUYaybrNF;m#ZI2XM4m6=KBaL6|{* zkb8pQd;oFsJb;E+lTCUC2{U>C_&GD@y(vzY!m}XVBob{#VvMRF0MOEeE8Gt{IeiMw z)>%T_8C#Scksg^Pd^*MHCAmj+9)enj#ta|}TUEiHB?!Iy2<~a!lN2;0+ifvUB(irF z@B_&mDCM58%mP}_h2uzUuS%r#5LSAh?&J=ZKFLBuiqjT*8;PFH0{&wu_nevg;cOPv zooMV75@%9{tj^)C(uY|ZVLDklWwH(la99ge&}x#CdR@?p;Fl8^Dl%`1-npx(lgho} zFX468WFs0{2Zm`OBQB?NFzUSOwhgOcg@9+O!t0gTEj9nH+HH_l6JB|OahLa$$6%_K)*J8% zh0ithVI5vldK2bt4Gv<8@%Tzez(Cny*-HLMXZLjr-vx&*vr@Z*1GVtnI{g79r$y=M z^>h!1BAZKDT?xA#V-1Qhi~6utY7n9*q$JHMLx9nvW^_MMGi^`QtXly*Nro~l(`cwM z5?&ASm7M9Ic#>W~^!#c)?pBx2uX(Hrfw^e@o>}w$`4(!Ph>#;2h)>ovpzKT@4`Nt5 zPp~Un_O3%V54#|ch@`e;R<>f_l{$r47dW1e#Mrla9PPQRRgIKR6eo-6bL_Pk6lp_3 zBpLg@0!^M#Wm^?PLN7V?F8c@K-8&6xL4!n4BlzSFvrJ$ZYqW&a?KnF|O^Cvr$U?J+iY`@rv}d?idKh^M~Mu$~dnT3_Q% znPsHuBP_;Dh0T>|A@0LALBMppGRBo}%e7p*D{lNM22RY5ZyT9TLFX_=V)9+i71zCL zwzAvxZ(7x-wssmygCdGz@ymuYEnfxIt|J4d`}F!|HW$!C!G)hN_<>wx?3`N4#UJ1~VFX@+jiS7*K}WO^=G$os^18sx0!Kx@B0G6y7&tiN z^jk)@`kn>At8Q~2I^_@Q!4l?)Y8|@fCVheB;sy00SEBnWH+)WGs%#Z_Zy~Omf`1xo?GKk#G+}*60zix`>K={sw7LMB?}GD zxqT%UpL3I|{MlX-KA!GR=oROU)Jux+Geu$^MG3m_RQlS&hlJ~Za-$6x$u-H zpOz$)1wZ9Y*_#I%3!lcfNtXCZjy@BhdFFXQG60B0PXR6f$SO82aNq6V0}V96{0!j$ LO<>Z0^+Ed|U7Ay4 delta 3107 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 T8(j!(k04aL5SZZKGkE?Fv~*F5 diff --git a/projects/content/_shaders/dxil/meshes.vert.dxil b/projects/content/_shaders/dxil/meshes.vert.dxil index 817386d8b35099b333045db26a4db5fbfcd02753..147b51a227f5228efe28bd6d4fabace1c5d4f75c 100644 GIT binary patch delta 4011 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 F{x6(QC(Qr= delta 3325 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 Texture0 [[texture(0)]], texture2d Texture1 [[texture(1)]], texture2d Texture2 [[texture(2)]], texture2d DirectionalShadowDepthMap [[texture(3)]], sampler Sampler0 [[sampler(0)]], sampler Sampler1 [[sampler(1)]], sampler Sampler2 [[sampler(2)]], sampler DirectionalShadowSampler [[sampler(3)]]) { main0_out out = {}; - int _101 = int(scene._m0[in.in_var_TEXCOORD4].textureMode); - int _102 = _101 & 240; - float4 _136; - if (_102 == 16) + int _103 = int(scene._m0[in.in_var_TEXCOORD4].textureMode); + int _104 = _103 & 240; + float4 _138; + if (_104 == 16) { - float3 _123 = float3(Texture0.sample(Sampler0, in.in_var_TEXCOORD0).x, Texture1.sample(Sampler1, in.in_var_TEXCOORD0).x, Texture2.sample(Sampler2, in.in_var_TEXCOORD0).x) + float3(-0.0625, -0.5, -0.5); - _136 = float4(dot(_123, float3(1.164000034332275390625, 0.0, 1.7929999828338623046875)), dot(_123, float3(1.164000034332275390625, -0.212999999523162841796875, -0.53299999237060546875)), dot(_123, float3(1.164000034332275390625, 2.111999988555908203125, 0.0)), 1.0); + float3 _125 = float3(Texture0.sample(Sampler0, in.in_var_TEXCOORD0).x, Texture1.sample(Sampler1, in.in_var_TEXCOORD0).x, Texture2.sample(Sampler2, in.in_var_TEXCOORD0).x) + float3(-0.0625, -0.5, -0.5); + _138 = float4(dot(_125, float3(1.164000034332275390625, 0.0, 1.7929999828338623046875)), dot(_125, float3(1.164000034332275390625, -0.212999999523162841796875, -0.53299999237060546875)), dot(_125, float3(1.164000034332275390625, 2.111999988555908203125, 0.0)), 1.0); } else { - float4 _135; - if (_102 == 0) + float4 _137; + if (_104 == 0) { - _135 = Texture0.sample(Sampler0, in.in_var_TEXCOORD0); + _137 = Texture0.sample(Sampler0, in.in_var_TEXCOORD0); } else { - _135 = _90; + _137 = _91; } - _136 = _135; + _138 = _137; } - float4 _142; - if ((_101 & 1) == 1) + float4 _144; + if ((_103 & 1) == 1) { - _142 = powr(_136, float4(2.2000000476837158203125)); + _144 = powr(_138, float4(2.2000000476837158203125)); } else { - _142 = _136; + _144 = _138; } - if (_142.w < 0.00999999977648258209228515625) + if (_144.w < 0.00999999977648258209228515625) { discard_fragment(); } - float3 _152 = float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * Uniforms.lightPower; - float3 _199; + float3 _154 = float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * Uniforms.lightPower; + float3 _201; do { - float3 _156 = Uniforms.lightPosition.xyz - in.in_var_TEXCOORD1; - float _157 = length(_156); - float _158 = _157 * _157; - float _164; - if (_157 > 2.0) + float3 _158 = Uniforms.lightPosition.xyz - in.in_var_TEXCOORD1; + float _159 = length(_158); + float _160 = _159 * _159; + float _166; + if (_159 > 2.0) { - _164 = 0.5 / _158; + _166 = 0.5 / _160; } else { - _164 = 1.0 / _158; + _166 = 1.0 / _160; } - float _169; - if (_157 > 4.0) + float _171; + if (_159 > 4.0) { - _169 = _164 * 0.5; + _171 = _166 * 0.5; } else { - _169 = _164; + _171 = _166; } - float _171 = (_157 > 15.0) ? 0.0 : _169; - float _173 = (_171 > 1.0) ? 1.0 : _171; + float _173 = (_159 > 15.0) ? 0.0 : _171; + float _175 = (_173 > 1.0) ? 1.0 : _173; if (length(in.in_var_TEXCOORD2) < 0.100000001490116119384765625) { - _199 = (in.in_var_TEXCOORD1 * _152) * _173; + _201 = (in.in_var_TEXCOORD1 * _154) * _175; break; } - float3 _180 = fast::normalize(_156); - _199 = ((_152 * precise::max(dot(_180, in.in_var_TEXCOORD2), 0.0)) * _173) + (((_152 * powr(precise::max(dot(in.in_var_TEXCOORD2, fast::normalize(_180 + fast::normalize(in.in_var_TEXCOORD1 - Uniforms.viewPos.xyz))), 0.0), 30.0)) * 2.0) * _173); + float3 _182 = fast::normalize(_158); + _201 = ((_154 * precise::max(dot(_182, in.in_var_TEXCOORD2), 0.0)) * _175) + (((_154 * powr(precise::max(dot(in.in_var_TEXCOORD2, fast::normalize(_182 + fast::normalize(in.in_var_TEXCOORD1 - Uniforms.viewPos.xyz))), 0.0), 30.0)) * 2.0) * _175); break; } while(false); - float3 _216 = ((in.in_var_TEXCOORD3.xyz / float3(in.in_var_TEXCOORD3.w)) * 0.5) + float3(0.5); - float3 _218; - _218.x = _216.x; - float2 _219 = _218.xy; - _219.y = -_216.y; - float _226; - int _229; + float3 _218 = ((in.in_var_TEXCOORD3.xyz / float3(in.in_var_TEXCOORD3.w)) * 0.5) + float3(0.5); + float3 _220; + _220.x = _218.x; + float2 _221 = _220.xy; + _221.y = -_218.y; + float _228; int _231; - _226 = 0.0; - _229 = 0; - _231 = -4; - float _227; - int _230; - for (; _231 <= 4; _226 = _227, _229 = _230, _231++) + int _233; + _228 = 0.0; + _231 = 0; + _233 = -4; + float _229; + int _232; + for (; _233 <= 4; _228 = _229, _231 = _232, _233++) { - _230 = _229; - _227 = _226; - for (int _240 = -4; _240 <= 4; ) + _232 = _231; + _229 = _228; + for (int _242 = -4; _242 <= 4; ) { - _230++; - _227 += float((in.in_var_TEXCOORD3.z - 0.004999999888241291046142578125) > DirectionalShadowDepthMap.sample(DirectionalShadowSampler, (_219 + float2(float(_240) * 0.000244140625, float(_231) * 0.000244140625))).x); - _240++; + _232++; + _229 += float((in.in_var_TEXCOORD3.z - 0.004999999888241291046142578125) > DirectionalShadowDepthMap.sample(DirectionalShadowSampler, (_221 + float2(float(_242) * 0.000244140625, float(_233) * 0.000244140625))).x); + _242++; continue; } } - float3 _269; - if ((_101 & 2) > 0) + float3 _271; + if ((_103 & 2) > 0) { - _269 = _142.xyz * 2.0; + _271 = _144.xyz * 2.0; } else { - _269 = _142.xyz * ((float3(0.100000001490116119384765625) + _199) + ((Uniforms.directionalLightColor.xyz * precise::max(dot(Uniforms.directionalLight.xyz, in.in_var_TEXCOORD2), 0.0)) * (1.0 - (_226 / float(_229))))); + _271 = _144.xyz * ((float3(0.100000001490116119384765625) + _201) + ((Uniforms.directionalLightColor.xyz * precise::max(dot(Uniforms.directionalLight.xyz, in.in_var_TEXCOORD2), 0.0)) * (1.0 - (_228 / float(_231))))); } - float4 _286; - if (_269.x > 1.0) + float4 _288; + if (_271.x > 1.0) { - float4 _285 = float4(0.0, 0.0, 0.0, 1.0); - _285.x = _269.x; - _286 = _285; + float4 _287 = float4(0.0, 0.0, 0.0, 1.0); + _287.x = _271.x; + _288 = _287; } else { - _286 = float4(0.0, 0.0, 0.0, 1.0); + _288 = float4(0.0, 0.0, 0.0, 1.0); } - float4 _291; - if (_269.y > 1.0) + float4 _293; + if (_271.y > 1.0) { - float4 _290 = _286; - _290.y = _269.y; - _291 = _290; + float4 _292 = _288; + _292.y = _271.y; + _293 = _292; } else { - _291 = _286; + _293 = _288; } - float4 _296; - if (_269.z > 1.0) + float4 _298; + if (_271.z > 1.0) { - float4 _295 = _291; - _295.z = _269.z; - _296 = _295; + float4 _297 = _293; + _297.z = _271.z; + _298 = _297; } else { - _296 = _291; + _298 = _293; } - out.out_var_SV_Target0 = float4(_269, _142.w); - out.out_var_SV_Target1 = _296; + out.out_var_SV_Target0 = float4(_271, _144.w); + out.out_var_SV_Target1 = _298; out.out_var_SV_Target2 = float4(in.in_var_TEXCOORD1, 1.0); - out.out_var_SV_Target3 = float4(in.in_var_TEXCOORD2, 1.0); + out.out_var_SV_Target3 = float4(in.in_var_TEXCOORD5, 1.0); return out; } diff --git a/projects/content/_shaders/msl/meshes.vert.msl b/projects/content/_shaders/msl/meshes.vert.msl index 4e8f7a3..0f92f0a 100644 --- a/projects/content/_shaders/msl/meshes.vert.msl +++ b/projects/content/_shaders/msl/meshes.vert.msl @@ -20,6 +20,7 @@ struct type_StructuredBuffer_Scene struct type_Uniforms { float4x4 ViewProjection; + float4x4 NoTranslateView; float4x4 ShadowMapProjection; float time; }; @@ -31,6 +32,7 @@ struct main0_out float3 out_var_TEXCOORD2 [[user(locn2)]]; float4 out_var_TEXCOORD3 [[user(locn3)]]; uint out_var_TEXCOORD4 [[user(locn4)]]; + float3 out_var_TEXCOORD5 [[user(locn5)]]; float4 gl_Position [[position]]; }; @@ -44,14 +46,17 @@ struct main0_in vertex main0_out main0(main0_in in [[stage_in]], constant type_Uniforms& Uniforms [[buffer(0)]], const device type_StructuredBuffer_Scene& scene [[buffer(1)]], uint gl_InstanceIndex [[instance_id]]) { main0_out out = {}; - float4 _51 = float4(in.in_var_TEXCOORD0, 1.0); - float4 _54 = scene._m0[gl_InstanceIndex].Model * _51; + float4 _53 = float4(in.in_var_TEXCOORD0, 1.0); + float4 _56 = scene._m0[gl_InstanceIndex].Model * _53; + float4x4 _91 = float4x4(float4(fast::normalize(float3(scene._m0[gl_InstanceIndex].Model[0][0], scene._m0[gl_InstanceIndex].Model[1][0], scene._m0[gl_InstanceIndex].Model[2][0])), 0.0), float4(fast::normalize(float3(scene._m0[gl_InstanceIndex].Model[0][1], scene._m0[gl_InstanceIndex].Model[1][1], scene._m0[gl_InstanceIndex].Model[2][1])), 0.0), float4(fast::normalize(float3(scene._m0[gl_InstanceIndex].Model[0][2], scene._m0[gl_InstanceIndex].Model[1][2], scene._m0[gl_InstanceIndex].Model[2][2])), 0.0), float4(0.0, 0.0, 0.0, 1.0)); + float4 _95 = float4(in.in_var_TEXCOORD1, 1.0); out.out_var_TEXCOORD0 = in.in_var_TEXCOORD3; - out.out_var_TEXCOORD1 = _54.xyz; - out.out_var_TEXCOORD2 = fast::normalize(float4(in.in_var_TEXCOORD1, 1.0) * float4x4(float4(fast::normalize(float3(scene._m0[gl_InstanceIndex].Model[0][0], scene._m0[gl_InstanceIndex].Model[1][0], scene._m0[gl_InstanceIndex].Model[2][0])), 0.0), float4(fast::normalize(float3(scene._m0[gl_InstanceIndex].Model[0][1], scene._m0[gl_InstanceIndex].Model[1][1], scene._m0[gl_InstanceIndex].Model[2][1])), 0.0), float4(fast::normalize(float3(scene._m0[gl_InstanceIndex].Model[0][2], scene._m0[gl_InstanceIndex].Model[1][2], scene._m0[gl_InstanceIndex].Model[2][2])), 0.0), float4(0.0, 0.0, 0.0, 1.0))).xyz; - out.out_var_TEXCOORD3 = Uniforms.ShadowMapProjection * _54; + out.out_var_TEXCOORD1 = _56.xyz; + out.out_var_TEXCOORD2 = fast::normalize(_95 * _91).xyz; + out.out_var_TEXCOORD3 = Uniforms.ShadowMapProjection * _56; out.out_var_TEXCOORD4 = gl_InstanceIndex; - out.gl_Position = Uniforms.ViewProjection * (scene._m0[gl_InstanceIndex].Model * _51); + out.out_var_TEXCOORD5 = (_95 * (_91 * transpose(Uniforms.NoTranslateView))).xyz; + out.gl_Position = Uniforms.ViewProjection * (scene._m0[gl_InstanceIndex].Model * _53); return out; } diff --git a/projects/content/_shaders/msl/ssao.frag.msl b/projects/content/_shaders/msl/ssao.frag.msl index 31f85f1..89e78b8 100644 --- a/projects/content/_shaders/msl/ssao.frag.msl +++ b/projects/content/_shaders/msl/ssao.frag.msl @@ -55,7 +55,7 @@ struct type_Uniforms int numSamples; }; -constant spvUnsafeArray _311 = spvUnsafeArray({ float3(0.0), float3(0.00039307403494603931903839111328125, 0.00020744701032526791095733642578125, 0.00023402007354889065027236938476562), float3(-0.001318361726589500904083251953125, -0.001457856036722660064697265625, 0.001546739018522202968597412109375), float3(0.0003496186691336333751678466796875, 8.4181214333511888980865478515625e-05, 5.8608897234080359339714050292969e-05), float3(-0.0005043491837568581104278564453125, -0.00383304059505462646484375, 0.002929248847067356109619140625), float3(-0.00241771643050014972686767578125, 0.0057135238312184810638427734375, 0.00173364556394517421722412109375), float3(-0.0007101023220457136631011962890625, 0.000413290224969387054443359375, 0.00037520084879361093044281005859375), float3(1.5587833331665024161338806152344e-05, -0.00011572847870411351323127746582031, 7.3567920480854809284210205078125e-05), float3(0.00334032182581722736358642578125, -0.0051653436385095119476318359375, 0.0050431825220584869384765625), float3(-0.0063966461457312107086181640625, 0.01290071941912174224853515625, 0.00147703452967107295989990234375), float3(0.007907788269221782684326171875, -0.0049759554676711559295654296875, 0.001991991885006427764892578125), float3(-0.0003332807100377976894378662109375, -0.00100087863393127918243408203125, 0.001031001214869320392608642578125), float3(0.00011193146201549097895622253417969, 0.00036116360570304095745086669921875, 0.0010905899107456207275390625), float3(-0.00385366589762270450592041015625, -0.004629385657608509063720703125, 0.00270807673223316669464111328125), float3(-0.0055218120105564594268798828125, 0.0163907893002033233642578125, 0.0033264369703829288482666015625), float3(-0.00297828204929828643798828125, -0.00340225151740014553070068359375, 0.0009606514940969645977020263671875), float3(0.0005643319454975426197052001953125, -0.00123721174895763397216796875, 0.001142332912422716617584228515625), float3(0.0042646829970180988311767578125, 0.001690786913968622684478759765625, 0.00338359293527901172637939453125), float3(0.028113491833209991455078125, -0.01881640218198299407958984375, 0.0140878893435001373291015625), float3(-0.03022454865276813507080078125, -0.000894616474397480487823486328125, 0.008499112911522388458251953125), float3(-0.01961914263665676116943359375, -0.0350324176251888275146484375, 0.014081305824220180511474609375), float3(0.015496986918151378631591796875, -0.010903127491474151611328125, 0.00180752319283783435821533203125), float3(0.0196535401046276092529296875, 0.01710924692451953887939453125, 0.0142847932875156402587890625), float3(-0.02892612479627132415771484375, 0.00322483875788748264312744140625, 0.06573773920536041259765625), float3(-0.0016983882524073123931884765625, 0.0004074592725373804569244384765625, 0.00372933782637119293212890625), float3(-0.0335367508232593536376953125, 0.0591063164174556732177734375, 0.001477129175327718257904052734375), float3(0.01729742996394634246826171875, 0.02095410041511058807373046875, 0.061427496373653411865234375), float3(-0.0362440533936023712158203125, -0.01097334362566471099853515625, 0.052580632269382476806640625), float3(-0.010873113758862018585205078125, 0.071666888892650604248046875, 0.07090236246585845947265625), float3(0.0404303781688213348388671875, -0.0758908092975616455078125, 0.066407024860382080078125), float3(0.006424785591661930084228515625, -0.00888848863542079925537109375, 0.00571323931217193603515625), float3(-0.0424978695809841156005859375, 0.122786454856395721435546875, 0.03013108484447002410888671875), float3(-0.012614764273166656494140625, -0.01173587143421173095703125, 0.0161450766026973724365234375), float3(0.02246730588376522064208984375, -0.023659668862819671630859375, 0.01735904999077320098876953125), float3(0.0280994363129138946533203125, -0.0286351330578327178955078125, 0.0076164784841239452362060546875), float3(0.0701790750026702880859375, -0.1532168686389923095703125, 0.0887149870395660400390625), float3(0.0073889424093067646026611328125, 0.152280390262603759765625, 0.00664083100855350494384765625), float3(0.07831905782222747802734375, -0.072104983031749725341796875, 0.094614334404468536376953125), float3(0.03289596736431121826171875, -0.0408993400633335113525390625, 0.040609411895275115966796875), float3(-0.141404449939727783203125, 0.17826557159423828125, 0.067046172916889190673828125), float3(0.108955644071102142333984375, 0.1114947497844696044921875, 0.21018303930759429931640625), float3(0.02759261615574359893798828125, 0.0139005817472934722900390625, 0.036677159368991851806640625), float3(0.05564410984516143798828125, -0.099730752408504486083984375, 0.113144241273403167724609375), float3(-0.0315654389560222625732421875, -0.22426509857177734375, 0.23739193379878997802734375), float3(-0.0474216155707836151123046875, 0.00566783733665943145751953125, 0.1736856400966644287109375), float3(0.088452465832233428955078125, 0.096331931650638580322265625, 0.083578832447528839111328125), float3(-0.0036428333260118961334228515625, 0.010955554433166980743408203125, 0.00330849713645875453948974609375), float3(-0.1911892592906951904296875, -0.18971312046051025390625, 0.1564487516880035400390625), float3(0.034361146390438079833984375, 0.0655452907085418701171875, 0.0308254323899745941162109375), float3(0.371889293193817138671875, 0.0229042805731296539306640625, 0.2982411682605743408203125), float3(-0.014679887332022190093994140625, 0.01349230110645294189453125, 0.00740495882928371429443359375), float3(-0.00653826631605625152587890625, -0.0058869807980954647064208984375, 0.005725885741412639617919921875), float3(-0.2333120405673980712890625, -0.35499393939971923828125, 0.03432808816432952880859375), float3(0.0411357469856739044189453125, -0.023320116102695465087890625, 0.01891444809734821319580078125), float3(-0.0945928990840911865234375, 0.02529100514948368072509765625, 0.092956520617008209228515625), float3(-0.0317381806671619415283203125, 0.226026356220245361328125, 0.2367977797985076904296875), float3(-0.3801217377185821533203125, 0.2481244504451751708984375, 0.47917068004608154296875), float3(0.13565014302730560302734375, 0.13791494071483612060546875, 0.4077457487583160400390625), float3(0.523879945278167724609375, -0.388758122920989990234375, 0.24387760460376739501953125), float3(-0.0520826168358325958251953125, -0.118409633636474609375, 0.095709107816219329833984375), float3(0.122609488666057586669921875, -0.4220634996891021728515625, 0.178109467029571533203125), float3(-0.2801954448223114013671875, -0.520291268825531005859375, 0.26809024810791015625), float3(-0.3271856009960174560546875, 0.23393590748310089111328125, 0.098123751580715179443359375), float3(0.3826406896114349365234375, 0.08367092907428741455078125, 0.257561206817626953125) }); +constant spvUnsafeArray _313 = spvUnsafeArray({ float3(0.0), float3(0.00039307403494603931903839111328125, 0.00020744701032526791095733642578125, 0.00023402007354889065027236938476562), float3(-0.001318361726589500904083251953125, -0.001457856036722660064697265625, 0.001546739018522202968597412109375), float3(0.0003496186691336333751678466796875, 8.4181214333511888980865478515625e-05, 5.8608897234080359339714050292969e-05), float3(-0.0005043491837568581104278564453125, -0.00383304059505462646484375, 0.002929248847067356109619140625), float3(-0.00241771643050014972686767578125, 0.0057135238312184810638427734375, 0.00173364556394517421722412109375), float3(-0.0007101023220457136631011962890625, 0.000413290224969387054443359375, 0.00037520084879361093044281005859375), float3(1.5587833331665024161338806152344e-05, -0.00011572847870411351323127746582031, 7.3567920480854809284210205078125e-05), float3(0.00334032182581722736358642578125, -0.0051653436385095119476318359375, 0.0050431825220584869384765625), float3(-0.0063966461457312107086181640625, 0.01290071941912174224853515625, 0.00147703452967107295989990234375), float3(0.007907788269221782684326171875, -0.0049759554676711559295654296875, 0.001991991885006427764892578125), float3(-0.0003332807100377976894378662109375, -0.00100087863393127918243408203125, 0.001031001214869320392608642578125), float3(0.00011193146201549097895622253417969, 0.00036116360570304095745086669921875, 0.0010905899107456207275390625), float3(-0.00385366589762270450592041015625, -0.004629385657608509063720703125, 0.00270807673223316669464111328125), float3(-0.0055218120105564594268798828125, 0.0163907893002033233642578125, 0.0033264369703829288482666015625), float3(-0.00297828204929828643798828125, -0.00340225151740014553070068359375, 0.0009606514940969645977020263671875), float3(0.0005643319454975426197052001953125, -0.00123721174895763397216796875, 0.001142332912422716617584228515625), float3(0.0042646829970180988311767578125, 0.001690786913968622684478759765625, 0.00338359293527901172637939453125), float3(0.028113491833209991455078125, -0.01881640218198299407958984375, 0.0140878893435001373291015625), float3(-0.03022454865276813507080078125, -0.000894616474397480487823486328125, 0.008499112911522388458251953125), float3(-0.01961914263665676116943359375, -0.0350324176251888275146484375, 0.014081305824220180511474609375), float3(0.015496986918151378631591796875, -0.010903127491474151611328125, 0.00180752319283783435821533203125), float3(0.0196535401046276092529296875, 0.01710924692451953887939453125, 0.0142847932875156402587890625), float3(-0.02892612479627132415771484375, 0.00322483875788748264312744140625, 0.06573773920536041259765625), float3(-0.0016983882524073123931884765625, 0.0004074592725373804569244384765625, 0.00372933782637119293212890625), float3(-0.0335367508232593536376953125, 0.0591063164174556732177734375, 0.001477129175327718257904052734375), float3(0.01729742996394634246826171875, 0.02095410041511058807373046875, 0.061427496373653411865234375), float3(-0.0362440533936023712158203125, -0.01097334362566471099853515625, 0.052580632269382476806640625), float3(-0.010873113758862018585205078125, 0.071666888892650604248046875, 0.07090236246585845947265625), float3(0.0404303781688213348388671875, -0.0758908092975616455078125, 0.066407024860382080078125), float3(0.006424785591661930084228515625, -0.00888848863542079925537109375, 0.00571323931217193603515625), float3(-0.0424978695809841156005859375, 0.122786454856395721435546875, 0.03013108484447002410888671875), float3(-0.012614764273166656494140625, -0.01173587143421173095703125, 0.0161450766026973724365234375), float3(0.02246730588376522064208984375, -0.023659668862819671630859375, 0.01735904999077320098876953125), float3(0.0280994363129138946533203125, -0.0286351330578327178955078125, 0.0076164784841239452362060546875), float3(0.0701790750026702880859375, -0.1532168686389923095703125, 0.0887149870395660400390625), float3(0.0073889424093067646026611328125, 0.152280390262603759765625, 0.00664083100855350494384765625), float3(0.07831905782222747802734375, -0.072104983031749725341796875, 0.094614334404468536376953125), float3(0.03289596736431121826171875, -0.0408993400633335113525390625, 0.040609411895275115966796875), float3(-0.141404449939727783203125, 0.17826557159423828125, 0.067046172916889190673828125), float3(0.108955644071102142333984375, 0.1114947497844696044921875, 0.21018303930759429931640625), float3(0.02759261615574359893798828125, 0.0139005817472934722900390625, 0.036677159368991851806640625), float3(0.05564410984516143798828125, -0.099730752408504486083984375, 0.113144241273403167724609375), float3(-0.0315654389560222625732421875, -0.22426509857177734375, 0.23739193379878997802734375), float3(-0.0474216155707836151123046875, 0.00566783733665943145751953125, 0.1736856400966644287109375), float3(0.088452465832233428955078125, 0.096331931650638580322265625, 0.083578832447528839111328125), float3(-0.0036428333260118961334228515625, 0.010955554433166980743408203125, 0.00330849713645875453948974609375), float3(-0.1911892592906951904296875, -0.18971312046051025390625, 0.1564487516880035400390625), float3(0.034361146390438079833984375, 0.0655452907085418701171875, 0.0308254323899745941162109375), float3(0.371889293193817138671875, 0.0229042805731296539306640625, 0.2982411682605743408203125), float3(-0.014679887332022190093994140625, 0.01349230110645294189453125, 0.00740495882928371429443359375), float3(-0.00653826631605625152587890625, -0.0058869807980954647064208984375, 0.005725885741412639617919921875), float3(-0.2333120405673980712890625, -0.35499393939971923828125, 0.03432808816432952880859375), float3(0.0411357469856739044189453125, -0.023320116102695465087890625, 0.01891444809734821319580078125), float3(-0.0945928990840911865234375, 0.02529100514948368072509765625, 0.092956520617008209228515625), float3(-0.0317381806671619415283203125, 0.226026356220245361328125, 0.2367977797985076904296875), float3(-0.3801217377185821533203125, 0.2481244504451751708984375, 0.47917068004608154296875), float3(0.13565014302730560302734375, 0.13791494071483612060546875, 0.4077457487583160400390625), float3(0.523879945278167724609375, -0.388758122920989990234375, 0.24387760460376739501953125), float3(-0.0520826168358325958251953125, -0.118409633636474609375, 0.095709107816219329833984375), float3(0.122609488666057586669921875, -0.4220634996891021728515625, 0.178109467029571533203125), float3(-0.2801954448223114013671875, -0.520291268825531005859375, 0.26809024810791015625), float3(-0.3271856009960174560546875, 0.23393590748310089111328125, 0.098123751580715179443359375), float3(0.3826406896114349365234375, 0.08367092907428741455078125, 0.257561206817626953125) }); struct main0_out { @@ -70,46 +70,55 @@ struct main0_in fragment main0_out main0(main0_in in [[stage_in]], constant type_Uniforms& Uniforms [[buffer(0)]], texture2d PositionTexture [[texture(0)]], texture2d NormalTexture [[texture(1)]], texture2d NoiseTexture [[texture(2)]], sampler Sampler0 [[sampler(0)]], sampler Sampler1 [[sampler(1)]], sampler Sampler2 [[sampler(2)]]) { main0_out out = {}; - float2 _314 = in.in_var_TEXCOORD0; - float4 _410; + float2 _317 = in.in_var_TEXCOORD0; + float4 _424; do { - _314.y = (_314.y * (-1.0)) + 1.0; - float4 _326 = PositionTexture.sample(Sampler0, _314); - float4 _327 = Uniforms.View * _326; - float3 _328 = _327.xyz; - float _329 = _327.z; - if (_329 < 0.00999999977648258209228515625) + _317.y = (_317.y * (-1.0)) + 1.0; + float4 _329 = PositionTexture.sample(Sampler0, _317); + float4 _330 = Uniforms.View * _329; + float3 _331 = _330.xyz; + float _332 = _330.z; + if (_332 < 0.00999999977648258209228515625) { - _410 = float4(1.0); + _424 = float4(1.0); break; } - float4 _336 = NormalTexture.sample(Sampler1, _314); - float3 _339 = fast::normalize((Uniforms.View * _336).xyz); - float4 _344 = NoiseTexture.sample(Sampler2, (_314 * float2(320.0, 180.0))); - float3 _346 = fast::normalize(_344.xyz); - float3 _350 = fast::normalize(_346 - (_339 * dot(_346, _339))); - float3x3 _352 = float3x3(_350, cross(_339, _350), _339); - float _354; - _354 = 0.0; - for (int _357 = 0; _357 < Uniforms.numSamples; ) + float4 _339 = NormalTexture.sample(Sampler1, _317); + float3 _340 = _339.xyz; + float4 _345 = NoiseTexture.sample(Sampler2, (_317 * float2(320.0, 180.0))); + float3 _347 = fast::normalize(_345.xyz); + float3 _351 = fast::normalize(_347 - (_340 * dot(_347, _340))); + float3x3 _354 = transpose(float3x3(_351, cross(_340, _351), _340)); + float _356; + _356 = 0.0; + float _357; + for (int _359 = 0; _359 < Uniforms.numSamples; _356 = _357, _359++) { - float3 _369 = _328 + ((_311[_357] * _352) * Uniforms.radius); - float4 _376 = Uniforms.Projection * float4(_369, 1.0); - float3 _383 = ((_376.xyz / float3(_376.w)).xyz * 0.5) + float3(0.5); - float4 _384 = float4(_383.x, _383.y, _383.z, _376.w); - _384.y = _383.y * (-1.0); - float4 _391 = Uniforms.View * PositionTexture.sample(Sampler0, _384.xy); - float _392 = _391.z; - _354 += (float(_392 >= (_369.z + Uniforms.bias0)) * smoothstep(0.0, 1.0, Uniforms.radius / abs(_329 - _392))); - _357++; - continue; + float3 _373 = _331 + (((_313[_359] + float3(0.0, 0.0, 0.00999999977648258209228515625)) * _354) * Uniforms.radius); + float _376 = _373.z; + float4 _380 = Uniforms.Projection * float4(_373.xy, _376, 1.0); + float3 _387 = ((_380.xyz / float3(_380.w)).xyz * 0.5) + float3(0.5); + float4 _388 = float4(_387.x, _387.y, _387.z, _380.w); + _388.y = (_387.y * (-1.0)) + 1.0; + float4 _395 = PositionTexture.sample(Sampler0, _388.xy); + float4 _396 = Uniforms.View * _395; + float _397 = _396.z; + float _408 = _356 + (float(_397 <= (_376 - Uniforms.bias0)) * smoothstep(0.0, 1.0, Uniforms.radius / abs(_332 - _397))); + if (_376 > 30.0) + { + _357 = _408 * precise::max(0.0, 1.0 - ((_376 - 30.0) * 0.0033333334140479564666748046875)); + } + else + { + _357 = _408; + } } - float _405 = 1.0 - (_354 / float(Uniforms.numSamples)); - _410 = float4(_405) + float4(_405 * 9.9999997473787516355514526367188e-06); + float _419 = 1.0 - (_356 / float(Uniforms.numSamples)); + _424 = float4(_419) + float4(_419 * 9.9999997473787516355514526367188e-06); break; } while(false); - out.out_var_SV_Target0 = _410; + out.out_var_SV_Target0 = _424; return out; } diff --git a/projects/content/_shaders/spv/lit_mesh.frag.spv b/projects/content/_shaders/spv/lit_mesh.frag.spv index b2e4ad4ba1dc89a7994f3a1a552a0f6ab1be0b9c..1b321e7bd0e4b3e4d35e17d254e18badb197faea 100644 GIT binary patch literal 8060 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 literal 3232 zcmZXVYjadZ5QZnWjgkl|5)dVBzu#-+;( z+K;C(r^0q3ohbBCe)n44eSy|-WCE!nERdc-o<)u!Q^+(j#-Bdh1W#an4t?;~L8s9i z^pAE1NBvIw*3s^6r{8GqboM*=jI(x1B{KI!fuYiRuig2bxyGM9b~NbxX%bCOe691K z)h_yocuUbmYWE(kw+=D~Yte3fgYI6331)(`NGV$aX0q7d?tbHsR=;uY&i3t% zjl0VWrT=8H??bktFXP=1jFvjr-#=O}jHwYvvm{lxa2``c^oZ+~LX zMSpwB<6T?qI@g>yLp`23AS*zd3D(i%w>xPdxja$q( z>y}&2ID3~{%{cSOts&O^BD4FxiJ0HJ>Cnev4Z)oOdoE&g>u;Tor~Xg5ypQmUKE%U) z1UDR~Umh2|K8Cj*i*HmP_rw}st8AW^IqJ+Kh`jbWW@C-fex6yoyx4OUmwPduUPm`q*x#tI z`SgFY!uBeDtHQ>gWR=g9C5v${U-GP}NgTm##u_e)Ofz4QJAuA^JS2%=r=z6Q1j z?|)!>@EZ?o4}N3jFy0<~4|42#5ZIo44+7hh??GVg<^Q>quCTIwS*yc7{{hW2UuP}% z=^|om;P=q2Up&X$K&)TvzP*oF{}!xgwSbtz5uER|oIM8T`z&WIo7MN}yKKDv+WkJ4 zuz3c)%kI1P#WkI+!E?EcX#blUJliXXx#XANjQ<$%obtG<6(4y%0q1!>1)E1ca$iH2 zH+F-QanC+OTvKt_r+r1<>*(g)VyE1r8-;8K39B18*+l^ocy5qnk%xNAN4?!RPr`Gd|D%1-!Y8(`TCf zaX-IAjCcJdB>1l~UR&^M8E?+`#@5lzI<$}ae3Z*MNCTiYtQrE2iuDyay&qf{(}3a;_|%PaK`Je-Mro_@5i@=o|0?p z=l_Ao^&Pr*+!5UO=yK&5miPLHip$sh5zcu1wa*}NPkutz?%JNyS>~USI9Kg)e;!sg z?GAlhC+=b{@eQFY(Whn0Se**N(rX5SU{ NX=d;Fzf^J+`48iS%$ooJ diff --git a/projects/content/_shaders/spv/ssao.frag.spv b/projects/content/_shaders/spv/ssao.frag.spv index 0bc7ed76230fb42715704ea8cc94f0716026cf29..8227293c76f016ed667f66585f1bfc7a8d894712 100644 GIT binary patch delta 2959 zcmYk8S#y;|5QgWliX>nXsFM)D90Ej4LVc|&<)S#o9ZU%au(8~3ux=lRY|JYStR-TijYOn1)$Klh*5R6B7(>(memA%q#> z-1*u)#jGPt2@TjSko8D07ri}93iZemm;|R?hg^WowR{h~18y2h47Mm_|j6 z!_HA2ZY*x=z?uN7r-ityu=#~X{%9{nPQ-SW1|qLUmSCs-5Kvjm_C| zSZ8*vS!i8Iqpyv;ozq?sZ9CV4-G)5{-A~(^FR7U0{%KXV{!6QD$4?KTJEzhFHB|wY zJQLgG^joqeB653a`E*l5={ik5Q(TE|fws3Jtjp!9?=Ch?FJ#?NX}@~VXB^novw~f< zH!k33ul~fk9_fNkR}1fyy)3Q13T`z%`@R~O&>#HmMfdv$-IUe<=TZ)b$yt8j)?zq_ zUpUI*wz3aHz78CT+zsgRv%wac>|*PHd>Y?JtXsDp*rhr8NX%{A5P5A6Zhs-G?3IMo zY$U+F+K&4&wQ`l81&x;($Vu0lL zkRGzlU;ubUZQ(6QzrRUR-yo2)jp~0PZL_v~s%{9~gO-XL#`d74;8)y&&|0P-OW+{#-twaz39HfZrBL8FZ$|{_XCfu zz6XFlkF_t)gJ34>hs#lHz5^bLj`IX{p+5|qME-YT9zi;ZpQlLwqd?xo)Lp=b@G;

A`GjP%xm-WmC^!qogO zAIH!)RxXtqvRBdi!A6iS@oVVvM*5{Tp1{`U8=1E2b#!@a^?I7kN$dfj&+94o20A}B zsNx^1#Ae|XtcS;d8XjJQPowh-%YfI+vW#=jJ(zC-_k1BT9n5m%Qxa#eJuC7*GOi2x z7BDG&=kmn3if>1Ui?~?&C+r<;eI}Fo{4V-lpznt`>3irdv8U;>z@Zjl`JD z$HM_;X0Q*9nJN!cp%0X=m=8(=sD2TBfc862%;d0E8>dl0TD%w2!6Q# z0xv0UyyD+jG(__DGZ=OA?cYaE>l+q39$IH!! z+9%hfIjI$*8_a>%Zb9}Kl+xzDG%vNGti+ZJM896Rx%i{ss`@YOYm1v3y-UyXG%GP_ z>Sp9yGOulq#n`ukE!dsdx1l?m+*0h-$Sz=JE7Ah8P9-NVmIAXC42Af15#%yc{ZX@yzWDm@pNOfb@B2Cg{Oyn+Xb^CSj_eP}4Hg+98=QE+jX#KUK z;aHy?k=fnZHrqiuTBUjDHf^hOUBjI5FR0l1udmqlUs$pAH)$UL4oE4|B6PFUwi2!Y zQQB6*(#pkl+@q7`$~K@|1-GRy4VQA`m21lu)`|hB4V1uwIlRpR{)u%j(&_Bp4DS$| zm_&Ue+z>u@?mpnufADt@-S!W7?OvOsZy*&o$h^0)Rygg_kNizY%WwR# z%wJA(i}Jud2jL((ekbU8q=VQzbo#aBO)Mtx<$M8n+3oKHuK2~wdkwT-!j^NfCg$V# zGFZg6@E&T{XpRg(7ww}cp1|uMD>&NKw_M;Uu75oH3=Qa=(Jclmt zGQD*kk5943fIe@X+-K-~>`lXeF2{Zj>9Nt@M5T?LM(0cGK&xlZtu`*^q1qI*o_ufp{sF94I$_ft;nV&PzU3BOg`!8r>xHm4_br4JdR}5gC4)`Blj1@Ey8*6(;Zb m_#QZ*G1cFqL2TbIV}1ZDfWKG9vxp_-KML-f&VSjN0q`G2ZPC2|