97 lines
3.0 KiB
Plaintext
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
|
|
}
|