From c66dbaaab60cac6deb8be83816e131d67b12b384 Mon Sep 17 00:00:00 2001 From: Peter Li Date: Thu, 24 Apr 2025 20:19:08 -0700 Subject: [PATCH] saming --- engine/rend/shaders/lit_mesh.frag.hlsl | 52 ++++++++++-------- engine/rend/shaders/lit_mesh.frag.json | 17 ++++-- engine/rend/shaders/meshes.vert.hlsl | 3 +- engine/rend/src/sgpu/renderer.zig | 5 +- .../content/_shaders/dxil/lit_mesh.frag.dxil | Bin 5308 -> 5536 bytes .../content/_shaders/dxil/meshes.vert.dxil | Bin 5684 -> 5680 bytes .../content/_shaders/msl/lit_mesh.frag.msl | 49 ++++++++++++++--- projects/content/_shaders/msl/meshes.vert.msl | 2 +- .../content/_shaders/spv/lit_mesh.frag.spv | Bin 2364 -> 3128 bytes projects/content/_shaders/spv/meshes.vert.spv | Bin 1772 -> 1808 bytes projects/sampleGame/main.zig | 20 ++++--- 11 files changed, 99 insertions(+), 49 deletions(-) diff --git a/engine/rend/shaders/lit_mesh.frag.hlsl b/engine/rend/shaders/lit_mesh.frag.hlsl index 2ed0b54..bb17255 100644 --- a/engine/rend/shaders/lit_mesh.frag.hlsl +++ b/engine/rend/shaders/lit_mesh.frag.hlsl @@ -3,45 +3,51 @@ SamplerState Sampler : register(s0, space2); cbuffer Uniforms : register(b0, space3) { + float4 viewPos; + float4 lightPosition; float time; - float3 viewPos; }; // from learnopengl.com float3 BlinnPhong(float3 normal, float3 fragPos, float3 lightPos, float3 lightColor) { + float dist = length(lightPos - fragPos); + // attenuation + float maxDist = 5; + float cutoff1 = 2; + float cutoff2 = 4; + float cutoffFactor = 0.5; + float attenuation = 1.0 / (dist * dist); + + if (dist > cutoff1) + { + attenuation *= cutoffFactor; + } + if (dist > cutoff2) + { + attenuation *= cutoffFactor; + } + if (dist > maxDist) + { + attenuation = 0; + } + if(length(normal) < 0.1) + { + return fragPos * lightColor * (1 / (dist * dist)) * attenuation; + } // diffuse parameter float3 lightDir = normalize(lightPos - fragPos); float diff = max(dot(lightDir, normal), 0.0); float3 diffuse = diff * lightColor; // specular parameter - float3 viewDir = normalize(fragPos - viewPos); + float3 viewDir = normalize(fragPos - viewPos.xyz); float3 reflectDir = reflect(-lightDir, normal); float spec = 0.0; float3 halfwayDir = normalize(lightDir + viewDir); spec = pow(max(dot(normal, halfwayDir), 0.0), 30.0); float3 specular = spec * lightColor * 2; - // attenuation - float maxDist = 5; - float cutoff1 = 2; - float cutoff2 = 4; - float cutoffFactor = 0.5; - float dist = length(lightPos - fragPos); - float attenuation = 1.0 / (dist * 2); - //if (dist > cutoff1) - //{ - // attenuation *= cutoffFactor; - //} - //if (dist > cutoff2) - //{ - // attenuation *= cutoffFactor; - //} - //if (dist > maxDist) - //{ - // attenuation = 0; - //} diffuse *= attenuation; @@ -67,10 +73,10 @@ float4 main( discard; } - float3 lightPos = float3(0, 20 + -4, -5); + float3 lightPos = lightPosition.xyz; //+ float3(0, 20, 0); float3 lightColor = float3(0.8, 0.8, 0.5); - float3 ambient = lerp(float3(0.01, 0.01, 0.003), float3(0.004, 0.004, 0.06), dot(Normal, float3(0.0,1.0,0.0)) ); + float3 ambient = lerp(float3(0.01, 0.01, 0.003), float3(0.004, 0.004, 0.06), dot(Normal, float3(0.0,1.0,0.0)) ) * 0.1; float3 col = s.xyz; diff --git a/engine/rend/shaders/lit_mesh.frag.json b/engine/rend/shaders/lit_mesh.frag.json index 0becd0f..bb4572c 100644 --- a/engine/rend/shaders/lit_mesh.frag.json +++ b/engine/rend/shaders/lit_mesh.frag.json @@ -10,14 +10,19 @@ "name" : "type.Uniforms", "members" : [ { - "name" : "time", - "type" : "float", + "name" : "viewPos", + "type" : "vec4", "offset" : 0 }, { - "name" : "viewPos", - "type" : "vec3", - "offset" : 4 + "name" : "lightPosition", + "type" : "vec4", + "offset" : 16 + }, + { + "name" : "time", + "type" : "float", + "offset" : 32 } ] } @@ -66,7 +71,7 @@ { "type" : "_11", "name" : "type.Uniforms", - "block_size" : 16, + "block_size" : 36, "set" : 3, "binding" : 0 } diff --git a/engine/rend/shaders/meshes.vert.hlsl b/engine/rend/shaders/meshes.vert.hlsl index 6fb84fc..4333206 100644 --- a/engine/rend/shaders/meshes.vert.hlsl +++ b/engine/rend/shaders/meshes.vert.hlsl @@ -42,8 +42,9 @@ Output main(Input input) // pos.x += 0.2 * sin(time * 0.5 ) * pos.y * 0.5; // pos.y += 0.2 * cos(time * 0.5 ) * pos.z * 0.5; + float4 WorldPos = mul(scene[input.Instance].Model, pos); output.Position = mul(ViewProjection, mul(scene[input.Instance].Model, pos)); - output.WorldPos = pos.xyz; + output.WorldPos = WorldPos.xyz; output.Normal = input.Normal; return output; diff --git a/engine/rend/src/sgpu/renderer.zig b/engine/rend/src/sgpu/renderer.zig index 0cfa55d..34eba6a 100644 --- a/engine/rend/src/sgpu/renderer.zig +++ b/engine/rend/src/sgpu/renderer.zig @@ -43,6 +43,8 @@ pub const Renderer = struct { blockySampler: *gpu.GPUSampler = undefined, defaultTexture: *rend.Texture = undefined, + lightPosition: core.Vectorf = .{}, + debugDrawSys: *DebugDrawSystem = undefined, // transients DO NOT TOUCH @@ -364,7 +366,8 @@ pub const Renderer = struct { position = cam.finalPos; } - ptr.viewPos = @bitCast(position); + ptr.viewPos = @bitCast(position.toZm()); + ptr.lightPosition = @bitCast(self.lightPosition.toZm()); cmd.pushGPUFragmentUniformData(0, &data, @sizeOf(lit_mesh_frag.Uniforms)); } } diff --git a/projects/content/_shaders/dxil/lit_mesh.frag.dxil b/projects/content/_shaders/dxil/lit_mesh.frag.dxil index 13e86127bc5c52a90a19ca5d4833c90d3a95c925..eecd278ff19c5c915a54f94b10d5c3a5989020f6 100644 GIT binary patch delta 2050 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 A?EnA( delta 932 zcmY+DeMl2=7{{MG&vR=xb~+iGncj5xLRz;7-;-@lDHF;5sA-UE5F3KvDnXjCH$_K_ zoV^f3L!F|3D4fiHqJrI=QV=*(XoN&qWRk=PBmA%1o7xW!e$PFh-}igZ_s211OJy>x zPSX%Z7q9-Dp7K=mMqXtN_bnm-aDGv?f%3^H0L4A3$A8db1pKGcexcd=5m8`7r1FS> zMC2r4Qvs0ve4NFqy@HpeZfw1B#v`V`@0H)u>Mpg^2>|qfz#0k=tGO+ZoPmOSuW1N; zmJ6YdK&%thFMWcdJB{!pwuc5s( z&&LnZhMrhdk6Jd@uEMlXib(NE%-EbBcE$yW+AKyuPRYb+0 zz2BM~d)wvdd#w)vq9Tc@7nJL^Aldls8m(di^XEp^h7pug((27wqf#t!W#nLbb5$pu zxG9frdLWqoY{s67vf#nfx%X5u%DFOKL5?%&P~bPYa031MNoB21Dow6j)_0L^Da8$` zej=gOY5x|gcS{xAQTqpp(k?Ns zi~rJwkyt3rH$qs)SYvBs`AEQImejT-1n$HYY%A^i1IH8)iP0lIIHsT*TWS4rOu@i? a!upY;JjTB}GT_>^ZU41dF~a>U@%0b#;v%vD diff --git a/projects/content/_shaders/msl/lit_mesh.frag.msl b/projects/content/_shaders/msl/lit_mesh.frag.msl index 7586c69..3587446 100644 --- a/projects/content/_shaders/msl/lit_mesh.frag.msl +++ b/projects/content/_shaders/msl/lit_mesh.frag.msl @@ -5,8 +5,9 @@ using namespace metal; struct type_Uniforms { + float4 viewPos; + float4 lightPosition; float time; - packed_float3 viewPos; }; struct main0_out @@ -24,16 +25,48 @@ struct main0_in fragment main0_out main0(main0_in in [[stage_in]], constant type_Uniforms& Uniforms [[buffer(0)]], texture2d Texture [[texture(0)]], sampler Sampler [[sampler(0)]]) { main0_out out = {}; - float4 _54 = Texture.sample(Sampler, in.in_var_TEXCOORD0); - float _55 = _54.w; - if (_55 < 0.00999999977648258209228515625) + float4 _58 = Texture.sample(Sampler, in.in_var_TEXCOORD0); + float _59 = _58.w; + if (_59 < 0.00999999977648258209228515625) { discard_fragment(); } - float3 _63 = float3(0.0, 16.0, -5.0) - in.in_var_TEXCOORD1; - float3 _64 = fast::normalize(_63); - float _80 = 0.5 / length(_63); - out.out_var_SV_Target0 = float4(powr(_54.xyz * (mix(float3(0.00999999977648258209228515625, 0.00999999977648258209228515625, 0.0030000000260770320892333984375), float3(0.0040000001899898052215576171875, 0.0040000001899898052215576171875, 0.0599999986588954925537109375), float3(in.in_var_TEXCOORD2.y)) + (((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * precise::max(dot(_64, in.in_var_TEXCOORD2), 0.0)) * _80) + (((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * powr(precise::max(dot(in.in_var_TEXCOORD2, fast::normalize(_64 + fast::normalize(in.in_var_TEXCOORD1 - float3(Uniforms.viewPos)))), 0.0), 30.0)) * 2.0) * _80))), float3(0.4545454680919647216796875)), _55); + float3 _115; + do + { + float3 _73 = Uniforms.lightPosition.xyz - in.in_var_TEXCOORD1; + float _74 = length(_73); + float _75 = _74 * _74; + float _76 = 1.0 / _75; + float _81; + if (_74 > 2.0) + { + _81 = 0.5 / _75; + } + else + { + _81 = _76; + } + float _86; + if (_74 > 4.0) + { + _86 = _81 * 0.5; + } + else + { + _86 = _81; + } + float _88 = (_74 > 5.0) ? 0.0 : _86; + if (length(in.in_var_TEXCOORD2) < 0.100000001490116119384765625) + { + _115 = ((in.in_var_TEXCOORD1 * float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5)) * _76) * _88; + break; + } + float3 _96 = fast::normalize(_73); + _115 = ((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * precise::max(dot(_96, in.in_var_TEXCOORD2), 0.0)) * _88) + (((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * powr(precise::max(dot(in.in_var_TEXCOORD2, fast::normalize(_96 + fast::normalize(in.in_var_TEXCOORD1 - Uniforms.viewPos.xyz))), 0.0), 30.0)) * 2.0) * _88); + break; + } while(false); + out.out_var_SV_Target0 = float4(powr(_58.xyz * ((mix(float3(0.00999999977648258209228515625, 0.00999999977648258209228515625, 0.0030000000260770320892333984375), float3(0.0040000001899898052215576171875, 0.0040000001899898052215576171875, 0.0599999986588954925537109375), float3(in.in_var_TEXCOORD2.y)) * 0.100000001490116119384765625) + _115), float3(0.4545454680919647216796875)), _59); return out; } diff --git a/projects/content/_shaders/msl/meshes.vert.msl b/projects/content/_shaders/msl/meshes.vert.msl index d9c90e1..ec6dfbc 100644 --- a/projects/content/_shaders/msl/meshes.vert.msl +++ b/projects/content/_shaders/msl/meshes.vert.msl @@ -39,7 +39,7 @@ vertex main0_out main0(main0_in in [[stage_in]], constant type_Uniforms& Uniform main0_out out = {}; float4 _44 = float4(in.in_var_TEXCOORD0, 1.0); out.out_var_TEXCOORD0 = in.in_var_TEXCOORD3; - out.out_var_TEXCOORD1 = _44.xyz; + out.out_var_TEXCOORD1 = (scene._m0[gl_InstanceIndex].Model * _44).xyz; out.out_var_TEXCOORD2 = in.in_var_TEXCOORD1; out.gl_Position = Uniforms.ViewProjection * (scene._m0[gl_InstanceIndex].Model * _44); return out; diff --git a/projects/content/_shaders/spv/lit_mesh.frag.spv b/projects/content/_shaders/spv/lit_mesh.frag.spv index e6a567c7e1a0040a186a9c8c03560c6ffa7abd64..ed95d7b9cfbbadbcfdc2650bd68fc77fe2b33aca 100644 GIT binary patch literal 3128 zcmZXU%X3p@7>AFoZ3Sw%7Nn>o6h#FCA|P6NlVVY;Ewq$+rO}2GZJL^-1$2YMFyl%$ z?%cR?#{a-!>AI}_7hJkw@H*r3oSe6l(QoFL_xiop@1(u0zbi=|N|K}}`GQ~1_M|P< zY)Lv(IzBNyQK&Z-3MWn;)83P`OH$j`WK;4md>g0~%ggGus_OuqU>h3kB!X*C^>ZjX zu&Qg^TqzZfFBHm^;$jK8gWHclXG%93tF=<q7EUvn-SLmbD~Jv?bpjvARysiH3;6RIAIS)MgJNs6!tXKo>W0=I7PHxYviQkI)u=``|qxKb}grHtK!?`QG~aVA$Q|(YwD6McnH^`HLzg7q zkA$30iPm7QPgEBp_p_TNVL@?YTh?7W<>`-!9M$uZNXnr!OZhnL^B`lmC! zva>$~HCFT8Hs6c7(0k_@Wb^nQyz?y7JLa6Y+d%*D*JtgY@L3e z-to=*N0I{`_n@5qfk033ZCSgyJofTC(u>eRe4WJ!U@T>4aT1t6Pl{Up`f=O`G-07>WToT9c@;qBeIPi5cxS$OqczbYP-PGqi z-vGw3KJ9n#RsSZ?Ccesa6Y&0TXuFHf*}nz!$ph$}__y}HKcc9%qBiG09 z)}v2+OAGLROZ_0er4qdQc*|Ge)d`RB+d#b4MR=vLsJllut2&*1e{ z7k$*=_0`t8H}~h;bZ>Rwetj4EyVJPefOj_f#G6@#_kTm1JsD#SL{HlHgZK}-p4lNA lx*M6!JK=XT)48)L;vRy24!p0w_5m=&`|gBl`-iNj!M_5*Zu{U?leXdzwh~qbi7IRtyAaRd#mcc+qE_A4M{RDNs^}I7Qc?=NlhAAoYbfD zz~Ja$Zl-c4*Ky>4d{a{ElyXaxg~@#U8myErP8ydrR)^JN%ZSKx5MFH>pCC{NYpn8k zx{y0`Cs!=x?-jsxtX{x8R(MpIEf-SV!qCm+OVjrYWnijX#5|gX+;4H{u1yy2PL)eD z;ChtC9hG9qBj#dO{-9WRI6O6jsxD~+S1l#dkk(V2%st4Lb7N;G&I}D*?N9q4XPy6X z2MML?tp7jmP;mBTYPOPYIy!!PEMLA?sIaTGSNGC0mY_|0^sn~0Mh&2~*PGmwAvPbe zb&1VE?4DxJt=8M;Emgd@4Rffsztz0Bnzvu_=Am93{CQ4~zPA&1M9ln*nePCr)tTce zB2CP#n3~maOEbI&PJbD;=xh6_z{|moz|ARo(ieC|ir;=*!}^u@?qR-r>4ta}<{qw7 z8|zl%fB8Jv6L<}n(G%;|0@P@7p=-f^_olxybnC$8tjUFLJ^oblv(CU9z^^{dcE!4l zU^SXt=)AxEAHH>mZZp_en7Zm7#=3v^@_nu^-W#L0g*WUwv@iDDdx#-+w6bU1q1tt* ze3QnvDqx5=fxS!jvbXZvnBCL3cd(sV-kAIj=6RTL@y-mpUi~g+^?obzyP3T|<15%@ z4|5xlz0CUS@qIJqxe|UKv+Huqp6R}wVC(UFcZjXS@7p0ZZ@*{Ph|SY;%~fok=2VS+ zZ-LFz_vV_TyajV}FNeAQ1np<;Vi#-Y`KMa3Ir>N9{(=4TaDTD29mdRGZ0|cT^B+fL z{YNl0#;=o!{W^*n_bkTyZ9s0kiT;Evi z+lg=9_GCDFZ>R8$hc!}#^>$(EyeHp`-@n?SjPJ%bN6n$uem)~#*Y{w)W&75coz;u4 z?kpz%I;*!2zZWyNM!IPaPGf3^F?s(JUS@lr!S}tZ=_6*2{g~fJD;9U;ImRQWbNJ?C zJaQVq_Z(yLPqQ=5 z6R|7!#&vY2Z^cO#3{Fb}h@Z{#NCdiC;zq%xE05$A0y#qu;Jv(p;0#!B@iC9&|3ls` zdY6rZ1x5fox|b`BwFpd2x|`K=BS#{pm{VI)6ZJQCy16Bul;na57StV4Kjc0A|DFT0 o_NX6rAL-R=_JJHrpumYikG82dp;Edc;~}vA`59HCAAaIYzA0S~-T(jq delta 163 zcmbQh_lB33nMs+Qfq{{Mfq{>~WFxO28#gP1GLWYW5}9nsCZ6iZzz!DC2a50ju^U1WbWK(7| Sp8S?goCl=tFVIC6Knws?jShMM diff --git a/projects/sampleGame/main.zig b/projects/sampleGame/main.zig index 7946de8..f31f764 100644 --- a/projects/sampleGame/main.zig +++ b/projects/sampleGame/main.zig @@ -51,11 +51,11 @@ const assetReferences = [_]assets.AssetImportReference{ "t_fox", .{ .path = "gltf-samples/Fox/glTF/Texture.png" }, ), - // assets.MakeImportRefOptions( - // "Texture", - // "t_empire", - // .{ .path = "textures/lost_empire-RGBA.png" }, - // ), + assets.MakeImportRefOptions( + "Texture", + "t_empire", + .{ .path = "textures/lost_empire-RGBA.png" }, + ), }; pub fn prepare(self: *@This()) !void { @@ -93,7 +93,7 @@ pub fn prepare(self: *@This()) !void { scene.setPosition(.{ .y = -20 }); const empireMesh = lostEmpire.addComponent(rend.MeshComponent).?; empireMesh.setMesh("m_empire"); - empireMesh.setTexture("t_default"); + empireMesh.setTexture("t_empire"); } { @@ -266,15 +266,17 @@ pub fn tick(self: *@This(), dt: f64) void { self.cameraComponent.pitch = std.math.clamp(core.radians(self.pitch), core.radians(-90.0), core.radians(90.0)); posRot.rotation = core.Rotation.eulerY(core.radians(self.yaw)); - const movement = scene.getPosRot().rotation.rotateVector(vector.fmul(self.cameraSpeed * fdt)); + const movement = posRot.rotation.rotateVector(vector.fmul(self.cameraSpeed * fdt)); - scene.getPosRot().position = scene.getPosRot().position.add(movement); + posRot.position = posRot.position.add(movement); const forward = posRot.rotation.forward(); - const debugCenter = scene.getPosRot().position.add(forward.fmul(2)); + const debugCenter = posRot.position.add(forward.fmul(2)); core.debugSphere(debugCenter, 0.3, .{}); core.debugSphere(debugCenter, 0.1, .{ .color = .{ .x = 1.0 } }); + + rend.context().lightPosition = posRot.position.add(.{ .y = -0.01 }); } var show: bool = true;