feat: Main shader detailMap A & B
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user