Improved Terrain Shader

Hey guys! I was wondering if it is possible to add more maps than bump map or if its possible to use my own shaders on the Terrain so that I can have some better looking textures. Any information is much appreciated! :slight_smile:

From what I heard the Shader needs to replace the Unity one, would this shader be compatible?

Shader "Hidden/TerrainEngine/Splatmap/Realtime-FirstPass" {

Properties {

    _Color ("Main Color", Color) = (1,1,1,1)
    _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
    _Shininess ("Shininess", Range (0.03, 1)) = 0.078125
    _Parallax ("Height", Range (0.005, 0.08)) = 0.02
    _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}
    _SpecMap ("Specular map", 2D) = "black" {}
    _BumpMap ("Normalmap", 2D) = "bump" {}
    _ParallaxMap ("Heightmap (A)", 2D) = "black" {}
    _Occlusion ("Occlusion Map", 2D) = "white" {}

}

SubShader { 

    Tags { "RenderType"="Opaque" }

    LOD 600

CGPROGRAM

#pragma surface surf BlinnPhong

#pragma target 3.0

sampler2D _MainTex;
sampler2D _BumpMap;
sampler2D _SpecMap;
sampler2D _ParallaxMap;
sampler2D _Occlusion;
fixed4 _Color;
half _Shininess;
float _Parallax;

struct Input {

    float2 uv_MainTex;
    float2 uv_BumpMap;
    float2 uv_SpecMap;
    float3 viewDir;
};

 

void surf (Input IN, inout SurfaceOutput o) {

    half h = tex2D (_ParallaxMap, IN.uv_BumpMap).w;
    float2 offset = ParallaxOffset (h, _Parallax, IN.viewDir);
    IN.uv_MainTex += offset;
    IN.uv_BumpMap += offset;

    fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);
    fixed4 Occ = tex2D(_Occlusion, IN.uv_MainTex);
    fixed4 specTex = tex2D(_SpecMap, IN.uv_SpecMap);
    o.Albedo = tex.rgb * _Color.rgb * Occ.rgb;
    o.Gloss = specTex.r;
    o.Alpha = tex.a * _Color.a;
    o.Specular = _Shininess * specTex.g;
    o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
}

ENDCG

}
FallBack "Specular"
}

Nobody got any ideas at all?

For a custom terrain shader you better start off with the source code for the built-in terrain shaders (can find them somewhere at Unity.com download archives).

You need arguments such as _Splat0, _Splat1 etc. Your shader may “work” on the terrain mesh itself but you won’t get any splats that way. Then again, maybe you won’t need them… still a good idea to always start off from the built-ins when going custom, especially in the beginning!