feat: Main shader detailMap A & B

This commit is contained in:
Alexandre Coirier
2026-06-17 22:01:39 +02:00
parent 410fedd8c7
commit fae42b1bda
19 changed files with 1563 additions and 92 deletions
@@ -54,15 +54,15 @@ float GetShadow(float3 PositionWS)
void GetDetailLOD
(
float Depth,
float DetailSize,
float DetailSizeA,
float LODJitter,
out float DetailSizeA,
out float DetailSizeB,
out float DetailSizeAA,
out float DetailSizeAB,
out float LODBlend
)
{
const float lodRatio = 4;
const float lodSize = DetailSize / lodRatio * 2;
const float lodSize = DetailSizeA / lodRatio * 2;
float dist = max(Depth, 1e-5);
float lod = log(dist) / log(lodRatio) + LODJitter; // log2(dist);
@@ -72,8 +72,8 @@ void GetDetailLOD
LODBlend = lodFrac * lodFrac * (3 - 2 * lodFrac);
DetailSizeA = lodSize * pow(lodRatio, lodFloor);
DetailSizeB = lodSize * pow(lodRatio, lodFloor + 1);
DetailSizeAA = lodSize * pow(lodRatio, lodFloor);
DetailSizeAB = lodSize * pow(lodRatio, lodFloor + 1);
}
float4 SampleBombedTexture
@@ -201,7 +201,7 @@ float4 SampleProjectedDetailLOD
float3 PositionOS,
float3 NormalOS,
float ProjectionBlend,
float DetailSize,
float DetailSizeA,
float Depth
)
{
@@ -225,30 +225,30 @@ float4 SampleProjectedDetailLOD
float lodJitter = (Hash1From2D(floor(projections.uv[i] * lodJitterSize) + i * 17.13) - .5) * lodJitterStrength;
float detailSizeA;
float detailSizeB;
float DetailSizeAA;
float DetailSizeAB;
float lodBlend;
GetDetailLOD
(
Depth,
DetailSize,
DetailSizeA,
lodJitter,
detailSizeA,
detailSizeB,
DetailSizeAA,
DetailSizeAB,
lodBlend
);
float4 detailA = SampleBombedTexture
(
DetailTex,
projections.uv[i] / detailSizeA
projections.uv[i] / DetailSizeAA
);
float4 detailB = SampleBombedTexture
(
DetailTex,
projections.uv[i] / detailSizeB
projections.uv[i] / DetailSizeAB
);
detail += lerp(detailA, detailB, lodBlend) * mask;
@@ -261,12 +261,16 @@ float4 SampleProjectedDetailLOD
void EnkiBillal_float
(
float4 Color,
UnityTexture2D DetailTex,
UnityTexture2D DetailTexA,
UnityTexture2D DetailTexB,
float2 ScreenUV,
float3 PositionWS,
float3 NormalWS,
float ProjectionsBlend,
float DetailSize,
float DetailIntensityA,
float DetailIntensityB,
float DetailSizeA,
float DetailSizeB,
uint FogUse,
float4 FogColor,
float FogMin,
@@ -294,25 +298,38 @@ void EnkiBillal_float
// Detail
float4 detail = SampleProjectedDetailLOD
float4 detailA = SampleProjectedDetailLOD
(
DetailTex,
DetailTexA,
positionOS,
normalOS,
ProjectionsBlend,
DetailSize,
DetailSizeA,
depth
);
float detailMask = smoothstep(0, .8, detail.a);
float4 detailB = SampleProjectedDetailLOD
(
DetailTexB,
positionOS,
normalOS,
ProjectionsBlend,
DetailSizeB,
depth
);
float detailMaskA = smoothstep(0, .8, detailA.a);
float detailMaskB = smoothstep(0, .8, detailB.a);
// Fog
// Output
Output = Color.rgb;
Output = lerp(Output.rgb, detail.rgb, detailMask);
Output = lerp(Output.rgb, detailA.rgb, detailMaskA * DetailIntensityA);
Output = lerp(Output.rgb, detailB.rgb, detailMaskB * DetailIntensityB);
if (FogUse)
{