171 lines
6.7 KiB
GLSL
171 lines
6.7 KiB
GLSL
Shader "Hidden/Lux URP/Terrain/Lit (Basemap Gen)"
|
|
{
|
|
Properties
|
|
{
|
|
// Layer count is passed down to guide height-blend enable/disable, due
|
|
// to the fact that heigh-based blend will be broken with multipass.
|
|
[HideInInspector] [PerRendererData] _NumLayersCount ("Total Layer Count", Float) = 1.0
|
|
[HideInInspector] _Control("AlphaMap", 2D) = "" {}
|
|
|
|
[HideInInspector] _Splat0 ("Layer 0 (R)", 2D) = "white" {}
|
|
[HideInInspector] _Splat1 ("Layer 1 (G)", 2D) = "white" {}
|
|
[HideInInspector] _Splat2 ("Layer 2 (B)", 2D) = "white" {}
|
|
[HideInInspector] _Splat3 ("Layer 3 (A)", 2D) = "white" {}
|
|
[HideInInspector] _Mask3("Mask 3 (A)", 2D) = "grey" {}
|
|
[HideInInspector] _Mask2("Mask 2 (B)", 2D) = "grey" {}
|
|
[HideInInspector] _Mask1("Mask 1 (G)", 2D) = "grey" {}
|
|
[HideInInspector] _Mask0("Mask 0 (R)", 2D) = "grey" {}
|
|
[HideInInspector] [Gamma] _Metallic0 ("Metallic 0", Range(0.0, 1.0)) = 0.0
|
|
[HideInInspector] [Gamma] _Metallic1 ("Metallic 1", Range(0.0, 1.0)) = 0.0
|
|
[HideInInspector] [Gamma] _Metallic2 ("Metallic 2", Range(0.0, 1.0)) = 0.0
|
|
[HideInInspector] [Gamma] _Metallic3 ("Metallic 3", Range(0.0, 1.0)) = 0.0
|
|
[HideInInspector] _Smoothness0 ("Smoothness 0", Range(0.0, 1.0)) = 1.0
|
|
[HideInInspector] _Smoothness1 ("Smoothness 1", Range(0.0, 1.0)) = 1.0
|
|
[HideInInspector] _Smoothness2 ("Smoothness 2", Range(0.0, 1.0)) = 1.0
|
|
[HideInInspector] _Smoothness3 ("Smoothness 3", Range(0.0, 1.0)) = 1.0
|
|
|
|
[NoScaleOffset] _HeightMaps (" Height Maps (RGBA)", 2D) = "grey" {}
|
|
|
|
[HideInInspector] _DstBlend("DstBlend", Float) = 0.0
|
|
}
|
|
|
|
Subshader
|
|
{
|
|
HLSLINCLUDE
|
|
// Required to compile gles 2.0 with standard srp library
|
|
#pragma prefer_hlslcc gles
|
|
#pragma exclude_renderers d3d11_9x
|
|
#pragma target 3.0
|
|
|
|
// #define _METALLICSPECGLOSSMAP 1
|
|
#define _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A 1
|
|
#define _TERRAIN_BASEMAP_GEN
|
|
|
|
#pragma shader_feature_local _TERRAIN_BLEND_HEIGHT
|
|
#pragma shader_feature_local _MASKMAP
|
|
|
|
#include "Includes/TerrainLitInput.hlsl"
|
|
#include "Includes/TerrainLitPasses.hlsl"
|
|
|
|
ENDHLSL
|
|
|
|
Pass
|
|
{
|
|
Tags
|
|
{
|
|
"Name" = "_MainTex"
|
|
"Format" = "ARGB32"
|
|
"Size" = "1"
|
|
}
|
|
|
|
ZTest Always Cull Off ZWrite Off
|
|
Blend One [_DstBlend]
|
|
HLSLPROGRAM
|
|
|
|
#pragma vertex Vert
|
|
#pragma fragment Frag
|
|
|
|
Varyings Vert(Attributes IN)
|
|
{
|
|
Varyings output = (Varyings)0;
|
|
output.clipPos = TransformWorldToHClip(IN.positionOS.xyz);
|
|
output.uvMainAndLM.xy = IN.texcoord;
|
|
output.uvSplat01.xy = TRANSFORM_TEX(IN.texcoord, _Splat0);
|
|
output.uvSplat01.zw = TRANSFORM_TEX(IN.texcoord, _Splat1);
|
|
output.uvSplat23.xy = TRANSFORM_TEX(IN.texcoord, _Splat2);
|
|
output.uvSplat23.zw = TRANSFORM_TEX(IN.texcoord, _Splat3);
|
|
|
|
return output;
|
|
}
|
|
|
|
half4 Frag(Varyings IN) : SV_Target
|
|
{
|
|
half3 normalTS = half3(0.0h, 0.0h, 1.0h);
|
|
half4 splatControl;
|
|
half weight;
|
|
half4 mixedDiffuse = 0.0h;
|
|
half4 defaultSmoothness = 0.0h;
|
|
|
|
half4 masks[4];
|
|
float2 splatUV = (IN.uvMainAndLM.xy * (_Control_TexelSize.zw - 1.0f) + 0.5f) * _Control_TexelSize.xy;
|
|
splatControl = SAMPLE_TEXTURE2D(_Control, sampler_Control, splatUV);
|
|
|
|
#ifdef _TERRAIN_BLEND_HEIGHT
|
|
half4 heights;
|
|
heights.x = SAMPLE_TEXTURE2D(_HeightMaps, sampler_Splat0, IN.uvSplat01.xy).r;
|
|
heights.y = SAMPLE_TEXTURE2D(_HeightMaps, sampler_Splat0, IN.uvSplat01.zw).g;
|
|
heights.z = SAMPLE_TEXTURE2D(_HeightMaps, sampler_Splat0, IN.uvSplat23.xy).b;
|
|
heights.w = SAMPLE_TEXTURE2D(_HeightMaps, sampler_Splat0, IN.uvSplat23.zw).a;
|
|
|
|
half height;
|
|
HeightBasedSplatModifyCombined(splatControl, heights, height);
|
|
#endif
|
|
|
|
SplatmapMix(IN.uvMainAndLM, IN.uvSplat01, IN.uvSplat23, splatControl, weight, mixedDiffuse, defaultSmoothness, normalTS);
|
|
half smoothness = dot(splatControl, defaultSmoothness);
|
|
return half4(mixedDiffuse.rgb, smoothness);
|
|
}
|
|
|
|
ENDHLSL
|
|
}
|
|
|
|
|
|
// Not used, not tweaked...
|
|
Pass
|
|
{
|
|
Tags
|
|
{
|
|
"Name" = "_MetallicTex"
|
|
"Format" = "R8"
|
|
"Size" = "1/4"
|
|
"EmptyColor" = "FF000000"
|
|
}
|
|
|
|
ZTest Always Cull Off ZWrite Off
|
|
Blend One [_DstBlend]
|
|
|
|
HLSLPROGRAM
|
|
|
|
#pragma vertex Vert
|
|
#pragma fragment Frag
|
|
|
|
Varyings Vert(Attributes IN)
|
|
{
|
|
Varyings output = (Varyings)0;
|
|
|
|
output.clipPos = TransformWorldToHClip(IN.positionOS.xyz);
|
|
|
|
// This is just like the other in that it is from TerrainLitPasses
|
|
output.uvMainAndLM.xy = IN.texcoord;
|
|
output.uvSplat01.xy = TRANSFORM_TEX(IN.texcoord, _Splat0);
|
|
output.uvSplat01.zw = TRANSFORM_TEX(IN.texcoord, _Splat1);
|
|
output.uvSplat23.xy = TRANSFORM_TEX(IN.texcoord, _Splat2);
|
|
output.uvSplat23.zw = TRANSFORM_TEX(IN.texcoord, _Splat3);
|
|
|
|
return output;
|
|
}
|
|
|
|
half4 Frag(Varyings IN) : SV_Target
|
|
{
|
|
half3 normalTS = half3(0.0h, 0.0h, 1.0h);
|
|
half4 splatControl;
|
|
half weight;
|
|
half4 mixedDiffuse;
|
|
half4 defaultSmoothness;
|
|
|
|
half4 masks[4];
|
|
float2 splatUV = (IN.uvMainAndLM.xy * (_Control_TexelSize.zw - 1.0f) + 0.5f) * _Control_TexelSize.xy;
|
|
splatControl = SAMPLE_TEXTURE2D(_Control, sampler_Control, splatUV);
|
|
|
|
SplatmapMix(IN.uvMainAndLM, IN.uvSplat01, IN.uvSplat23, splatControl, weight, mixedDiffuse, defaultSmoothness, normalTS);
|
|
|
|
half4 defaultMetallic = half4(_Metallic0, _Metallic1, _Metallic2, _Metallic3);
|
|
half metallic = dot(splatControl, defaultMetallic);
|
|
|
|
return metallic;
|
|
}
|
|
|
|
ENDHLSL
|
|
}
|
|
}
|
|
} |