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 eb4c2b7..9ae7e3b 100644 Binary files a/Shaders/LightPS.cso and b/Shaders/LightPS.cso differ diff --git a/Shaders/LightPS_MS.cso b/Shaders/LightPS_MS.cso index 0877aac..3ba9541 100644 Binary files a/Shaders/LightPS_MS.cso and b/Shaders/LightPS_MS.cso differ diff --git a/Shaders/LightVS.cso b/Shaders/LightVS.cso index 6fdaf6d..379b340 100644 Binary files a/Shaders/LightVS.cso and b/Shaders/LightVS.cso differ diff --git a/Shaders/LodLightsPS.cso b/Shaders/LodLightsPS.cso index 5bfe0f6..44cc1fb 100644 Binary files a/Shaders/LodLightsPS.cso and b/Shaders/LodLightsPS.cso differ diff --git a/Shaders/LodLightsPS_MS.cso b/Shaders/LodLightsPS_MS.cso index ff6ed20..8c66a64 100644 Binary files a/Shaders/LodLightsPS_MS.cso and b/Shaders/LodLightsPS_MS.cso differ diff --git a/Shaders/LodLightsVS.cso b/Shaders/LodLightsVS.cso index dabed49..dbe91c6 100644 Binary files a/Shaders/LodLightsVS.cso and b/Shaders/LodLightsVS.cso differ