From 21ed53e00f681b70479132ff69e39a1ba21b25ed Mon Sep 17 00:00:00 2001 From: dexy Date: Wed, 4 Dec 2019 02:47:20 +1100 Subject: [PATCH] Fixed light falloff exponents --- CodeWalker.Shaders/LightPS.hlsl | 8 ++++---- Rendering/Renderable.cs | 2 +- Shaders/LightPS.cso | Bin 10036 -> 10180 bytes 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CodeWalker.Shaders/LightPS.hlsl b/CodeWalker.Shaders/LightPS.hlsl index a6a9404..592746f 100644 --- a/CodeWalker.Shaders/LightPS.hlsl +++ b/CodeWalker.Shaders/LightPS.hlsl @@ -114,7 +114,7 @@ PS_OUTPUT main(VS_Output input) if (ldist <= 0) discard; float4 rgbi = Unpack4x8UNF(lodlight.Colour).gbar; - float3 lcol = rgbi.rgb * rgbi.a * 5.0f; + float3 lcol = rgbi.rgb * rgbi.a * 10.0f; float3 ldir = srpos / ldist; float pclit = saturate(dot(ldir, norm)); @@ -122,7 +122,7 @@ PS_OUTPUT main(VS_Output input) if (LightType == 1)//point (sphere) { - lamt *= saturate(1 - (ldist / lodlight.Falloff)); + lamt *= pow(saturate(1 - (ldist / lodlight.Falloff)), lodlight.FalloffExponent); } else if (LightType == 2)//spot (cone) { @@ -131,11 +131,11 @@ PS_OUTPUT main(VS_Output input) float oang = lodlight.OuterAngleOrCapExt * 0.01745329 * 0.5; if (ang > oang) discard; lamt *= saturate(1 - ((ang - iang) / (oang - iang))); - lamt *= saturate(1 - (ldist / lodlight.Falloff)); + lamt *= pow(saturate(1 - (ldist / lodlight.Falloff)), lodlight.FalloffExponent); } else if (LightType == 4)//capsule { - lamt *= saturate(1 - (ldist / lodlight.Falloff)); //TODO! proper capsule lighting... (use point-line dist!) + lamt *= pow(saturate(1 - (ldist / lodlight.Falloff)), lodlight.FalloffExponent); //TODO! proper capsule lighting... (use point-line dist!) } pclit *= lamt; diff --git a/Rendering/Renderable.cs b/Rendering/Renderable.cs index f5b3246..5358b9a 100644 --- a/Rendering/Renderable.cs +++ b/Rendering/Renderable.cs @@ -1420,7 +1420,7 @@ namespace CodeWalker.Rendering light.TangentX = new Vector4(Vector3.Normalize(light.Direction.GetPerpVec()), 0.0f); light.TangentY = new Vector4(Vector3.Cross(light.Direction, light.TangentX.XYZ()), 0.0f); light.Falloff = ll.falloff[i]; - light.FalloffExponent = ll.falloffExponent[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]; var type = (LightType)((light.TimeAndStateFlags >> 26) & 7); diff --git a/Shaders/LightPS.cso b/Shaders/LightPS.cso index 685dc0f93d258d19fbe53d29343924495772fa8a..70aac34c164f44ead068b8bc8c7f77230e6b25a6 100644 GIT binary patch delta 917 zcmaJ=Jxc>Y5S`6;4kIQSf{B>BoJk-SqDTx9P@{+-s3<}ZOMii-g*io0n>1UAKfp!> ziIrH2z1Z4_m4c0>Ao%8z#pMtWhMk=^^X6;sX6b&pJXf#Ho;1IYSFX<9A5Nc~SM%^q z5Yc^+D1@^Dd5#j*4WbK31@?vFb$Q1y4hD#(0bAkLtufyxKBdT}eDk}lbhacKBSgV{ z>LDLICOap{!d_b%SP(w_fA}Yegh>?P7(aXr2RD2%h?pjqJ4*pS^D}-<6y1i7!sVLT zFYin8y7>z%BFK5_l8E&ta5{@2!PHE68t7< zR#hSF$89j?Ed+_&xRCtFr9?>v?O{=qqjsjDBD~B*&J-_S!(C=B)oV+4vhwo1nD?>p zf|1MRN)QbS^PiUykbCyjx_X0%bQ|MS(dst6jD4igu?g&$ZR#ES<)hsjNMcp3$k3`V uOiZ;ct*!i~urm02x?G0#u#cdpAozEv8xoT*g-kL6jTzNffZ~(!qWuFrTw7=W delta 750 zcmZ8fJxc>Y5S>k8K28mnXrktd^j3LE_ev9YkwsJ+cLmTIGg zh!P96w$vXW*xOnJ1VQl4daH*EbGtil-n^N)eO$d=sVubS=C6Y3kLB&R`sB>n;q~QO zQxMUVOBBXlg}ugzS_aW2?4n3?SG=k07)H+`Y5@KUcOQ)Aut-Xg9SMZn-Ar~ugpx!; z-sPO-bD~(8Oo|}XFii?z7vL>oZ?;XPk|XNhL`)xi;SO$CgRnpYA1vmC_#j_$g}wuh zl)|=B>IC