From d59663d87eec2deb5af20b4a84467c9dca04f6f8 Mon Sep 17 00:00:00 2001 From: dexy Date: Thu, 5 Dec 2019 15:04:00 +1100 Subject: [PATCH] Interior lights improvements --- CodeWalker.Shaders/LightPS.hlsli | 8 ++++---- CodeWalker.Shaders/LightVS.hlsl | 2 +- CodeWalker.Shaders/LodLightsVS.hlsl | 4 ++-- Rendering/Renderable.cs | 11 ++++++----- Shaders/LightPS.cso | Bin 5100 -> 5028 bytes Shaders/LightPS_MS.cso | Bin 25920 -> 25344 bytes Shaders/LightVS.cso | Bin 2436 -> 2408 bytes Shaders/LodLightsPS.cso | Bin 5264 -> 5208 bytes Shaders/LodLightsPS_MS.cso | Bin 28272 -> 27824 bytes Shaders/LodLightsVS.cso | Bin 2504 -> 2448 bytes 10 files changed, 13 insertions(+), 12 deletions(-) diff --git a/CodeWalker.Shaders/LightPS.hlsli b/CodeWalker.Shaders/LightPS.hlsli index f284acf..95dff93 100644 --- a/CodeWalker.Shaders/LightPS.hlsli +++ b/CodeWalker.Shaders/LightPS.hlsli @@ -103,8 +103,8 @@ float4 DeferredLODLight(float3 camRel, float3 norm, float4 diffuse, float4 specu else if (LightType == 2)//spot (cone) { float ang = acos(-dot(ldir, lodlight.Direction)); - float iang = lodlight.InnerAngle * 0.01745329 * 0.5; - float oang = lodlight.OuterAngleOrCapExt * 0.01745329 * 0.5; + float iang = lodlight.InnerAngle; + float oang = lodlight.OuterAngleOrCapExt; if (ang > oang) return 0; lamt *= saturate(1 - ((ang - iang) / (oang - iang))); lamt *= pow(saturate(1 - (ldist / lodlight.Falloff)), lodlight.FalloffExponent); @@ -148,8 +148,8 @@ float4 DeferredLight(float3 camRel, float3 norm, float4 diffuse, float4 specular else if (InstType == 2)//spot (cone) { float ang = acos(-dot(ldir, InstDirection)); - float iang = InstConeInnerAngle * 0.01745329 * 0.5; - float oang = InstConeOuterAngle * 0.01745329 * 0.5; + float iang = InstConeInnerAngle; + float oang = InstConeOuterAngle; if (ang > oang) return 0; lamt *= saturate(1 - ((ang - iang) / (oang - iang))); lamt *= pow(saturate(1 - (ldist / InstFalloff)), InstFalloffExponent); diff --git a/CodeWalker.Shaders/LightVS.hlsl b/CodeWalker.Shaders/LightVS.hlsl index 07d4254..221933d 100644 --- a/CodeWalker.Shaders/LightVS.hlsl +++ b/CodeWalker.Shaders/LightVS.hlsl @@ -48,7 +48,7 @@ VS_Output main(float4 ipos : POSITION, uint iid : SV_InstanceID) } else if (InstType == 2)//spot (cone) { - float arads = InstConeOuterAngle * 0.01745329 * 0.5; // deg -> rad + float arads = InstConeOuterAngle; float3 cpos = ipos.xyz * (tan(arads) * extent); cpos.y += ipos.w * extent; opos = (cpos.x * InstTangentX) + (cpos.y * InstDirection) + (cpos.z * InstTangentY); diff --git a/CodeWalker.Shaders/LodLightsVS.hlsl b/CodeWalker.Shaders/LodLightsVS.hlsl index 11c66da..961cf43 100644 --- a/CodeWalker.Shaders/LodLightsVS.hlsl +++ b/CodeWalker.Shaders/LodLightsVS.hlsl @@ -46,7 +46,7 @@ VS_Output main(float4 ipos : POSITION, uint iid : SV_InstanceID) } else if (LightType == 2)//spot (cone) { - float arads = lodlight.OuterAngleOrCapExt * 0.01745329 * 0.5; // deg -> rad + float arads = lodlight.OuterAngleOrCapExt; float3 cpos = ipos.xyz * (tan(arads) * extent); cpos.y += ipos.w * extent; opos = (cpos.x * lodlight.TangentX.xyz) + (cpos.y * lodlight.Direction.xyz) + (cpos.z * lodlight.TangentY.xyz); @@ -54,7 +54,7 @@ VS_Output main(float4 ipos : POSITION, uint iid : SV_InstanceID) else if (LightType == 4)//capsule { float3 cpos = ipos.xyz * extent; - cpos.y += (ipos.w * 2 - 1) * lodlight.OuterAngleOrCapExt * 0.1; + cpos.y += (ipos.w * 2 - 1) * lodlight.OuterAngleOrCapExt; opos = (cpos.x * lodlight.TangentX.xyz) + (cpos.y * lodlight.Direction.xyz) + (cpos.z * lodlight.TangentY.xyz); } opos += (lodlight.Position - CameraPos.xyz); diff --git a/Rendering/Renderable.cs b/Rendering/Renderable.cs index 4a360be..062e20e 100644 --- a/Rendering/Renderable.cs +++ b/Rendering/Renderable.cs @@ -1359,9 +1359,9 @@ namespace CodeWalker.Rendering Type = l.Type; Intensity = l.Intensity; Falloff = l.Falloff; - FalloffExponent = l.FalloffExponent; - ConeInnerAngle = l.ConeInnerAngle; - ConeOuterAngle = l.ConeOuterAngle; + FalloffExponent = Math.Max(l.FalloffExponent * 0.25f, 0.5f);//is this right? + ConeInnerAngle = l.ConeInnerAngle * 0.01745329f; //is this right?? + ConeOuterAngle = l.ConeOuterAngle * 0.01745329f; //pi/180 CapsuleExtent = l.Extent; CullingPlaneNormal = l.CullingPlaneNormal; CullingPlaneOffset = l.CullingPlaneOffset; @@ -1491,8 +1491,8 @@ namespace CodeWalker.Rendering light.TangentY = new Vector4(Vector3.Cross(light.Direction, light.TangentX.XYZ()), 0.0f); light.Falloff = ll.falloff[i]; light.FalloffExponent = Math.Max(ll.falloffExponent[i]*0.01f, 0.5f);//is this right? - light.InnerAngle = ll.coneInnerAngle[i]; - light.OuterAngleOrCapExt = ll.coneOuterAngleOrCapExt[i]; + light.InnerAngle = ll.coneInnerAngle[i] * 0.0087266462f; //pi/360 + light.OuterAngleOrCapExt = ll.coneOuterAngleOrCapExt[i] * 0.0087266462f; //pi/360 var type = (LightType)((light.TimeAndStateFlags >> 26) & 7); switch (type) { @@ -1503,6 +1503,7 @@ namespace CodeWalker.Rendering spots.Add(light); break; case LightType.Capsule: + light.OuterAngleOrCapExt = ll.coneOuterAngleOrCapExt[i] * 0.1f;//is this right? caps.Add(light); break; default: break;//just checking... diff --git a/Shaders/LightPS.cso b/Shaders/LightPS.cso index eb4c2b709cd3cb0653d571f964b30a5da2a86ca5..9ae7e3b064bf4ef0885cb60c24515a1f4108ae25 100644 GIT binary patch delta 274 zcmaE(zC_*7CBn%$_w@?9g%vj&gJybUMEFh0U}RumSR%~8zzU>IfS84yfguKnCjha= zM#E%w&I#NM3=TkIfS84yfguKnCjfE5 zM#E%w&Kuke3=Tkz|=GIk^e3_yH`p2#Sc{ z;HE@yaB&a^!4DwlAUHZYhzNQYUyENM4=(TC-Tm%sqwJ&Xtz9~6A?1CAu^hT?+P&k@W>YTCSa^o%3?o>^ z?Pd)GL$QQy60@}meNgP^jwFR{!H#B9J*7fgq@DvFH4_#`I^bK2B~L~4lB&B@ovJlt z@#8Odnlb3=U63cxlZ1H$9yLe#pm*N<6X9{Fjv26MOYk-pYajRR`` zIK0}Xnh^*MZ(4z>l~9Nc;g(bwNpo#~zo3Pa{$pp;+cMK@o zI$Wfp5OZ`d>trSGAh9P0ig0u&NQCc#^%_2MLHfD)e9Q9zBmBJV6J9MCpcf^$D#SV! z?BOPAX&h42yEL1qpJmw9j0hf-Bt_6ktq&_SYtU0LxCK+iA^9&NolnS=3CBy(jQch^ siTpGh>NZG6O*qL*svlpA5E*&N;ELB)x|Uit8nHemp@k~zg_n)>UzdaOE&u=k delta 1946 zcmds2O=}ZT6ur|V^W{ut#tA$VDT!?gB??Vq!O&Kmrf#IGY=Vo-BC&2X%UW0x)} zcdg(~Q3M&pE)5g~_x=MHE?u|~i{icGygG*bf*E+cH}Bl9b0;}>{6TsDNon7_-Q9Wk zv6iduN2f1OgX7Z9@3#s71a|=nw6D|3YXAdUN3>4%-n2)Wc_jqcCTLegPqlmMr4E4J z1sBKyHpVqrpgl)R2`I$R;#LPAbbK$Lx>*F!CV1TuxLUNljl{PNaBhjuI4%33^sc1P z*(~Xp4RFU?6<1NDEsjKI=})-C^e(r#nXU+YRkv(z zj!s3y&B147QId8{Od@zxFL@G>ozQW(DQvEo&8R2DTd7n{=FK;K6<=>&&=Qh3T=s2A zi{S=Nn*#TiUHsa#@cEjH%`FSRH{Gb#3i6R&JuGC2&w3+6d`>d;Q+pI-=+n?&=Xf_; ze7^J#3q6*O^Q0^)NypqNK={%Op4M-cJ&Cilsdz9DUVNg6EPt$}1)dE(sdOxkJg69* z&7F>ICbNNSxE+R4CBhkGtJh-mL*o^Sj@>Y4Sl5& XeGcE{z56);lS1)BN4SblMtA-IS2sbH diff --git a/Shaders/LightVS.cso b/Shaders/LightVS.cso index 6fdaf6d43f44a4b4638ad47bc63dee4e7156ef0f..379b340320d0fbda354834f9830553235f705147 100644 GIT binary patch delta 194 zcmZn>ej#M!65-@LPemyBOmd^-;j;yGo8l`37#SECGB_C+Sb?+&5XZ1EFl+&09-zP* zj*Uk5SU7JmGcY(XFfx3bEXf)y>&w8vA;cg6RLZ~rqCo~&H7I~-mdQ(5ohCE0DKaWe zR%KISVh@`9l2ux(2&jw+s4R>XqRp)dq8ub<#K6F{32Gc0!{#Ekc}#*bKyjcGzyN4B KgYaZU&SU^kf*zg# delta 205 zcmaDM)FN!;65-_h>#y5itFi}vz3Zo{im^YEWMp7qXyIgFU zK!YPtfCY%TkmQ{}x`1NH@?evIVthc;Ve&9NT9ZZjcQZN_@EAe8VFH8`7Yn?$q521o9FO*un3j|m9Yac2!ND%PW~#K3;>c8D_{Ts diff --git a/Shaders/LodLightsPS_MS.cso b/Shaders/LodLightsPS_MS.cso index ff6ed2083cdadd4421e66e141c14d5e7579d7ee2..8c66a647504728950e789cc8eb74cbae99b0212c 100644 GIT binary patch delta 1109 zcmexxhjGJAMl+WPC+EFgX6v3X++Clzar+~K13upv85kHg0ci^$)&Me=0PzhV zRso8eVNA%D~_Vln&hdlA^fbt+QWO-m?6vx*15SeqnK6jFf#)KH&6!%umG{sWZt}F0OW{h-~a#s delta 1421 zcmdmRlkvkHMl+WPCucd$PkUC+-yU`(QzCo$--w@#3=9kfc?=9}K-vO`HGqsIKzsv; zpX4$ye97Htwv3IFC7pr65h#6d^Ha9h?3O^4TuBT944gorW!wT_-AoQZ4iK39;c~jbC5caphJVDshCBn%$Lv!otPYdR$q_NeV*DK!C$;iOKFoBbSfelDo0C5R31H&00_F!RP zU;&DYY%~>T;oJh`IWRCX=uQr0nJ((fz`!oVAOPeuFo0+#AkDQ|mUT0uj1dC^CrAhc ete{G`p#04o>^@9_%0L;AWgx%`#KMzPIgULjacb$}YIP+AI4