Remove NeedsHitNormal/HitNormal feature from GlobalSDFTrace to simplify code
This commit is contained in:
@@ -328,7 +328,6 @@ float4 PS_Debug(Quad_VS2PS input) : SV_Target
|
||||
float3 viewRay = lerp(lerp(ViewFrustumWorldRays[3], ViewFrustumWorldRays[0], input.TexCoord.x), lerp(ViewFrustumWorldRays[2], ViewFrustumWorldRays[1], input.TexCoord.x), 1 - input.TexCoord.y).xyz;
|
||||
viewRay = normalize(viewRay - ViewWorldPos);
|
||||
trace.Init(ViewWorldPos, viewRay, ViewNearPlane, ViewFarPlane);
|
||||
trace.NeedsHitNormal = true;
|
||||
GlobalSDFHit hit = RayTraceGlobalSDF(GlobalSDF, GlobalSDFTex, GlobalSDFMip, trace);
|
||||
|
||||
float3 color;
|
||||
@@ -337,7 +336,6 @@ float4 PS_Debug(Quad_VS2PS input) : SV_Target
|
||||
// Sample Global Surface Atlas at the hit location
|
||||
float surfaceThreshold = GetGlobalSurfaceAtlasThreshold(GlobalSDF, hit);
|
||||
color = SampleGlobalSurfaceAtlas(GlobalSurfaceAtlas, GlobalSurfaceAtlasChunks, GlobalSurfaceAtlasCulledObjects, GlobalSurfaceAtlasObjects, GlobalSurfaceAtlasDepth, GlobalSurfaceAtlasTex, hit.GetHitPosition(trace), -viewRay, surfaceThreshold).rgb;
|
||||
//color = hit.HitNormal * 0.5f + 0.5f;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -33,7 +33,6 @@ struct GlobalSDFTrace
|
||||
float3 WorldDirection;
|
||||
float MaxDistance;
|
||||
float StepScale;
|
||||
bool NeedsHitNormal;
|
||||
|
||||
void Init(float3 worldPosition, float3 worldDirection, float minDistance, float maxDistance, float stepScale = 1.0f)
|
||||
{
|
||||
@@ -42,7 +41,6 @@ struct GlobalSDFTrace
|
||||
MinDistance = minDistance;
|
||||
MaxDistance = maxDistance;
|
||||
StepScale = stepScale;
|
||||
NeedsHitNormal = false;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -326,19 +324,6 @@ GlobalSDFHit RayTraceGlobalSDF(const GlobalSDFData data, Texture3D<snorm float>
|
||||
hit.HitTime = max(stepTime + stepDistance - minSurfaceThickness, 0.0f);
|
||||
hit.HitCascade = cascade;
|
||||
hit.HitSDF = stepDistance;
|
||||
if (trace.NeedsHitNormal)
|
||||
{
|
||||
// Calculate hit normal from SDF gradient
|
||||
float texelOffset = 1.0f / data.Resolution;
|
||||
ClampGlobalSDFTextureGradientUV(data, cascade, texelOffset, textureUV);
|
||||
float xp = tex.SampleLevel(GLOBAL_SDF_SAMPLER, float3(textureUV.x + texelOffset, textureUV.y, textureUV.z), 0).x;
|
||||
float xn = tex.SampleLevel(GLOBAL_SDF_SAMPLER, float3(textureUV.x - texelOffset, textureUV.y, textureUV.z), 0).x;
|
||||
float yp = tex.SampleLevel(GLOBAL_SDF_SAMPLER, float3(textureUV.x, textureUV.y + texelOffset, textureUV.z), 0).x;
|
||||
float yn = tex.SampleLevel(GLOBAL_SDF_SAMPLER, float3(textureUV.x, textureUV.y - texelOffset, textureUV.z), 0).x;
|
||||
float zp = tex.SampleLevel(GLOBAL_SDF_SAMPLER, float3(textureUV.x, textureUV.y, textureUV.z + texelOffset), 0).x;
|
||||
float zn = tex.SampleLevel(GLOBAL_SDF_SAMPLER, float3(textureUV.x, textureUV.y, textureUV.z - texelOffset), 0).x;
|
||||
hit.HitNormal = normalize(float3(xp - xn, yp - yn, zp - zn));
|
||||
}
|
||||
}
|
||||
|
||||
// Move forward
|
||||
|
||||
@@ -311,26 +311,39 @@ float4 PS_Debug(Quad_VS2PS input) : SV_Target
|
||||
float3 viewRay = lerp(lerp(ViewFrustumWorldRays[3], ViewFrustumWorldRays[0], input.TexCoord.x), lerp(ViewFrustumWorldRays[2], ViewFrustumWorldRays[1], input.TexCoord.x), 1 - input.TexCoord.y).xyz;
|
||||
viewRay = normalize(viewRay - ViewWorldPos);
|
||||
trace.Init(ViewWorldPos, viewRay, ViewNearPlane, ViewFarPlane);
|
||||
trace.NeedsHitNormal = true;
|
||||
GlobalSDFHit hit = RayTraceGlobalSDF(GlobalSDF, GlobalSDFTex, GlobalSDFMip, trace);
|
||||
|
||||
// Debug draw
|
||||
float3 color = saturate(hit.StepsCount / 80.0f).xxx;
|
||||
if (!hit.IsHit())
|
||||
color.rg *= 0.4f;
|
||||
#if 0
|
||||
else
|
||||
{
|
||||
float3 color = saturate(hit.StepsCount / 50.0f).xxx;
|
||||
if (hit.IsHit())
|
||||
{
|
||||
#if 1
|
||||
float3 hitPosition = hit.GetHitPosition(trace);
|
||||
float hitSDF;
|
||||
float3 hitNormal = SampleGlobalSDFGradient(GlobalSDF, GlobalSDFTex, GlobalSDFMip, hitPosition, hitSDF, hit.HitCascade);
|
||||
#if 1
|
||||
// Composite step count with SDF normals
|
||||
//color.rgb *= saturate(normalize(hitNormal) * 0.5f + 0.7f) + 0.3f;
|
||||
color = lerp(normalize(hitNormal) * 0.5f + 0.5f, 1 - color, saturate(hit.StepsCount / 80.0f));
|
||||
#else
|
||||
// Debug draw SDF normals
|
||||
color.rgb = normalize(hit.HitNormal) * 0.5f + 0.5f;
|
||||
}
|
||||
#elif 1
|
||||
color = normalize(hitNormal) * 0.5f + 0.5f;
|
||||
#endif
|
||||
#else
|
||||
// Heatmap with step count
|
||||
if (hit.StepsCount > 40)
|
||||
color = float3(saturate(hit.StepsCount / 80.0f), 0, 0);
|
||||
else if (hit.StepsCount > 20)
|
||||
color = float3(saturate(hit.StepsCount / 40.0f).xx, 0);
|
||||
else
|
||||
color = float3(0, saturate(hit.StepsCount / 20.0f), 0);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
// Composite with SDF normals
|
||||
color.rgb *= saturate(normalize(hit.HitNormal) * 0.5f + 0.7f) + 0.1f;
|
||||
// Bluish sky
|
||||
color.rg *= 0.4f;
|
||||
}
|
||||
#endif
|
||||
return float4(color, 1);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user