Files
KopMap/Assets/NatureManufacture Assets/WorldStreamer/Shaders/TerrainLit_Basemap_Gen.shader
2025-09-02 18:55:19 +08:00

122 lines
3.2 KiB
Plaintext

Shader "HDRP/TerrainLit_BasemapGenNM"
{
Properties
{
[HideInInspector] _DstBlend("DstBlend", Float) = 0.0
}
SubShader
{
Tags { "SplatCount" = "8" }
HLSLINCLUDE
#pragma target 4.5
#pragma only_renderers d3d11 playstation xboxone vulkan metal switch
#define SURFACE_GRADIENT // Must use Surface Gradient as the normal map texture format is now RG floating point
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariables.hlsl"
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Material.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/NormalSurfaceGradient.hlsl"
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/TerrainLit/TerrainLitSurfaceData.hlsl"
// Terrain builtin keywords
#pragma shader_feature_local _TERRAIN_8_LAYERS
#pragma shader_feature_local _NORMALMAP
#pragma shader_feature_local _MASKMAP
#pragma shader_feature_local _TERRAIN_BLEND_HEIGHT
#define _TERRAIN_BASEMAP_GEN
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/TerrainLit/TerrainLit_Splatmap_Includes.hlsl"
CBUFFER_START(UnityTerrain)
UNITY_TERRAIN_CB_VARS
float4 _Control0_ST;
CBUFFER_END
struct Varyings
{
float4 positionCS : SV_POSITION;
float4 texcoord : TEXCOORD0;
};
#pragma vertex Vert
#pragma fragment Frag
float2 ComputeControlUV(float2 uv)
{
// adjust splatUVs so the edges of the terrain tile lie on pixel centers
return (uv * (_Control0_TexelSize.zw - 1.0f) + 0.5f) * _Control0_TexelSize.xy;
}
Varyings Vert(uint vertexID : SV_VertexID)
{
Varyings output;
output.positionCS = GetFullScreenTriangleVertexPosition(vertexID);
output.texcoord.xy = TRANSFORM_TEX(GetFullScreenTriangleTexCoord(vertexID), _Control0);
output.texcoord.zw = ComputeControlUV(output.texcoord.xy);
return output;
}
ENDHLSL
Pass
{
Tags
{
"Name" = "_MainTex"
"Format" = "ARGB32"
"Size" = "1"
}
ZTest Always Cull Off ZWrite Off
Blend One[_DstBlend]
HLSLPROGRAM
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/TerrainLit/TerrainLit_Splatmap.hlsl"
float4 Frag(Varyings input) : SV_Target
{
TerrainLitSurfaceData surfaceData;
InitializeTerrainLitSurfaceData(surfaceData);
TerrainSplatBlend(input.texcoord.zw, input.texcoord.xy, surfaceData);
return float4(surfaceData.albedo, surfaceData.smoothness);
}
ENDHLSL
}
Pass
{
Tags
{
"Name" = "_MetallicTex"
"Format" = "RG16"
"Size" = "1/4"
}
ZTest Always Cull Off ZWrite Off
Blend One[_DstBlend]
HLSLPROGRAM
#define OVERRIDE_SPLAT_SAMPLER_NAME sampler_Mask0
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/TerrainLit/TerrainLit_Splatmap.hlsl"
float2 Frag(Varyings input) : SV_Target
{
TerrainLitSurfaceData surfaceData;
InitializeTerrainLitSurfaceData(surfaceData);
TerrainSplatBlend(input.texcoord.zw, input.texcoord.xy, surfaceData);
return float2(surfaceData.metallic, surfaceData.ao);
}
ENDHLSL
}
}
Fallback Off
}