unity地形shader

  unity中默认使用Hidden/TerrainEngine/Splatmap/Lightmap-FirstPass,这个shader进行地形贴图的渲染.
  如果想替换下,可以建立shader,名字为Hidden/TerrainEngine/Splatmap/Lightmap-FirstPass.这样unity渲染时就会使用使用新的shader.
  内置的shader,可以从unity官网下载.
下面提供一个例子:

Shader "Hidden/TerrainEngine/Splatmap/Lightmap-FirstPass" {
Properties {
	_Control ("Control (RGBA)", 2D) = "red" {}
	_Splat3 ("Layer 3 (A)", 2D) = "white" {}
	_Splat2 ("Layer 2 (B)", 2D) = "white" {}
	_Splat1 ("Layer 1 (G)", 2D) = "white" {}
	_Splat0 ("Layer 0 (R)", 2D) = "white" {}
	// used in fallback on old cards
	_MainTex ("BaseMap (RGB)", 2D) = "white" {}
	_Color ("Main Color", Color) = (1,1,1,1)
}
	
SubShader {
	Tags {
		"SplatCount" = "4"
		"Queue" = "Geometry-100"
		"RenderType" = "Opaque"
	}
CGPROGRAM
#pragma surface surf Lambert
struct Input {
	float2 uv_Control : TEXCOORD0;
	float2 uv_Splat0 : TEXCOORD1;
	float2 uv_Splat1 : TEXCOORD2;
	float2 uv_Splat2 : TEXCOORD3;
	float2 uv_Splat3 : TEXCOORD4;
};

sampler2D _Control;
sampler2D _Splat0,_Splat1,_Splat2,_Splat3;

	
void surf (Input IN, inout SurfaceOutput o) {
	fixed4 splat_control = tex2D (_Control, IN.uv_Control);
	fixed3 col;
float _Part = -0.25;
float _Amount = 4;
	col  = splat_control.r * tex2D (_Splat0, IN.uv_Splat0).rgb * (tex2D(_Splat0,IN.uv_Splat0 * _Part).rgb * _Amount);
	col += splat_control.g * tex2D (_Splat1, IN.uv_Splat1).rgb * (tex2D(_Splat1,IN.uv_Splat1 * _Part).rgb * _Amount);
	col += splat_control.b * tex2D (_Splat2, IN.uv_Splat2).rgb * (tex2D(_Splat3,IN.uv_Splat2 * _Part).rgb * _Amount);;
	col += splat_control.a * tex2D (_Splat3, IN.uv_Splat3).rgb * (tex2D(_Splat2,IN.uv_Splat3 * _Part).rgb * _Amount);;
	o.Albedo = col;
	o.Alpha = 0.0;
}
ENDCG  
}

// Fallback to Diffuse
Fallback "Diffuse"
}

你可能感兴趣的:(unity地形shader)