NLDClient-yudde/ProjectNLD/Assets/Editor/Tools/TerrainBaker/TerrainBakerShader.shader

97 lines
3.0 KiB
Plaintext

Shader "Hidden/TerrainBaker/AlbedoBaker"
{
Properties
{
_MainTex ("Main Tex", 2D) = "white" {}
_Control ("Control (Splatmap)", 2D) = "black" {}
_Splat0 ("Layer 0", 2D) = "white" {}
_Splat1 ("Layer 1", 2D) = "white" {}
_Splat2 ("Layer 2", 2D) = "white" {}
_Splat3 ("Layer 3", 2D) = "white" {}
_TerrainSize ("Terrain Size", Vector) = (100,100,0,0)
_TileSize0 ("Tile Size 0", Vector) = (10,10,0,0)
_TileSize1 ("Tile Size 1", Vector) = (10,10,0,0)
_TileSize2 ("Tile Size 2", Vector) = (10,10,0,0)
_TileSize3 ("Tile Size 3", Vector) = (10,10,0,0)
_GammaCorrection ("Gamma Correction", Float) = 1.0
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100
Cull Off
ZWrite Off
ZTest Always
Pass
{
Name "BakeAlbedo"
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma target 3.0
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
sampler2D _MainTex;
sampler2D _Control;
sampler2D _Splat0, _Splat1, _Splat2, _Splat3;
float4 _TerrainSize;
float4 _TileSize0, _TileSize1, _TileSize2, _TileSize3;
float _GammaCorrection;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
fixed4 frag (v2f i) : SV_Target
{
float4 control = tex2D(_Control, i.uv);
float2 worldXZ = i.uv * _TerrainSize.xy;
float2 uv0 = worldXZ / _TileSize0.xy + _TileSize0.zw;
float2 uv1 = worldXZ / _TileSize1.xy + _TileSize1.zw;
float2 uv2 = worldXZ / _TileSize2.xy + _TileSize2.zw;
float2 uv3 = worldXZ / _TileSize3.xy + _TileSize3.zw;
fixed4 splat0 = tex2D(_Splat0, uv0);
fixed4 splat1 = tex2D(_Splat1, uv1);
fixed4 splat2 = tex2D(_Splat2, uv2);
fixed4 splat3 = tex2D(_Splat3, uv3);
fixed4 result = splat0 * control.r
+ splat1 * control.g
+ splat2 * control.b
+ splat3 * control.a;
result.rgb = pow(result.rgb, _GammaCorrection);
result.a = 1;
return result;
}
ENDCG
}
}
FallBack Off
}