ProjectDDD/Packages/com.distantlands.cozy.core/Runtime/Shaders/Includes/Raymarching.cginc
2025-07-08 19:46:31 +09:00

27 lines
999 B
HLSL

TEXTURE2D_SHADOW(_DirectionalShadowAtlas);
#define SHADOW_SAMPLER sampler_linear_clamp_compare
SAMPLER_CMP(SHADOW_SAMPLER);
half GetShadowAttenuation(half3 RayPos)
{
half4 shadowPos = TransformWorldToShadowCoord(RayPos);
half4 shadowParams = GetMainLightShadowParams();
float shadowStrength = shadowParams.x;
float attenuation = _MainLightShadowmapTexture.SampleCmpLevelZero(SHADOW_SAMPLER, shadowPos.xy, shadowPos.z);
return saturate(lerp(BEYOND_SHADOW_FAR(shadowPos) ? 1.0 : attenuation, 1.0, GetMainLightShadowFade(RayPos)));
}
float Raymarching( inout float3 position, float3 direction, int maxSteps, float stepSize, float depth, float sensitivity, float densityMultiplier, out float density )
{
density = 0;
float shadowAtten = 0;
for (int i = 0; i < maxSteps; i++) {
if (density + stepSize < depth) {
position+=direction*stepSize;
density += stepSize;
shadowAtten += GetShadowAttenuation(position) * sensitivity;
} else
return shadowAtten;
}
return shadowAtten;
}