Skip to content

Instantly share code, notes, and snippets.

@josephbk117
Created December 7, 2018 16:24

Revisions

  1. josephbk117 created this gist Dec 7, 2018.
    62 changes: 62 additions & 0 deletions FirstPass.shader
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,62 @@
    // Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)

    Shader "Nature/Terrain/Diffuse" {
    Properties {
    [HideInInspector] _Control ("Control (RGBA)", 2D) = "red" {}
    [HideInInspector] _Splat3 ("Layer 3 (A)", 2D) = "white" {}
    [HideInInspector] _Splat2 ("Layer 2 (B)", 2D) = "white" {}
    [HideInInspector] _Splat1 ("Layer 1 (G)", 2D) = "white" {}
    [HideInInspector] _Splat0 ("Layer 0 (R)", 2D) = "white" {}
    [HideInInspector] _Normal3 ("Normal 3 (A)", 2D) = "bump" {}
    [HideInInspector] _Normal2 ("Normal 2 (B)", 2D) = "bump" {}
    [HideInInspector] _Normal1 ("Normal 1 (G)", 2D) = "bump" {}
    [HideInInspector] _Normal0 ("Normal 0 (R)", 2D) = "bump" {}
    // used in fallback on old cards & base map
    [HideInInspector] _MainTex ("BaseMap (RGB)", 2D) = "white" {}
    [HideInInspector] _Color ("Main Color", Color) = (1,1,1,1)
    }

    CGINCLUDE
    #pragma surface surf Lambert vertex:SplatmapVert finalcolor:SplatmapFinalColor finalprepass:SplatmapFinalPrepass finalgbuffer:SplatmapFinalGBuffer noinstancing
    #pragma multi_compile_fog
    #include "TerrainSplatmapCommon.cginc"

    void surf(Input IN, inout SurfaceOutput o)
    {
    half4 splat_control;
    half weight;
    fixed4 mixedDiffuse;
    SplatmapMix(IN, splat_control, weight, mixedDiffuse, o.Normal);
    o.Albedo = mixedDiffuse.rgb;
    o.Alpha = weight;
    }
    ENDCG

    Category {
    Tags {
    "Queue" = "Geometry-99"
    "RenderType" = "Opaque"
    }
    // TODO: Seems like "#pragma target 3.0 _TERRAIN_NORMAL_MAP" can't fallback correctly on less capable devices?
    // Use two sub-shaders to simulate different features for different targets and still fallback correctly.
    SubShader { // for sm3.0+ targets
    CGPROGRAM
    #pragma target 3.0
    #pragma multi_compile __ _TERRAIN_NORMAL_MAP
    ENDCG
    }
    SubShader { // for sm2.0 targets
    CGPROGRAM
    ENDCG
    }
    }

    Dependency "AddPassShader" = "Hidden/TerrainEngine/Splatmap/Diffuse-AddPass"
    Dependency "BaseMapShader" = "Diffuse"
    Dependency "Details0" = "Hidden/TerrainEngine/Details/Vertexlit"
    Dependency "Details1" = "Hidden/TerrainEngine/Details/WavingDoublePass"
    Dependency "Details2" = "Hidden/TerrainEngine/Details/BillboardWavingDoublePass"
    Dependency "Tree0" = "Hidden/TerrainEngine/BillboardTree"

    Fallback "Diffuse"
    }