Avatar
tomekmichalhu:

Dobrý den, chtěl bych v Unity 5 udělat díru v terénu do nějaké jeskyně, ale U5 neumožňuje smazat polygon. Standartní shader neumožňuje ani průhldený terén, proto jsem našel na internetu tento shader:

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" {}
        //Used in fallback on old cards & base map
        [HideInInspector] _MainTex ("BaseMap (RGB)", 2D) = "white" {}
        [HideInInspector] _Color ("Main Color", Color) = (1,1,1,1)
    }

    SubShader
    {
        Tags
        {
            "SplatCount" = "4"
            "Queue" = "Geometry-100"
            "RenderType" = "Opaque"
        }
        Blend SrcAlpha OneMinusSrcAlpha
        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);
            fixed4 firstSplat = tex2D (_Splat0, IN.uv_Splat0);
            fixed3 col;
            col = splat_control.r * tex2D (_Splat0, IN.uv_Splat0).rgb;
            col += splat_control.g * tex2D (_Splat1, IN.uv_Splat1).rgb;
            col += splat_control.b * tex2D (_Splat2, IN.uv_Splat2).rgb;
            col += splat_control.a * tex2D (_Splat3, IN.uv_Splat3).rgb;
            o.Albedo = col;
            o.Alpha = 1;
            if(tex2D(_Splat0, IN.uv_Splat0).a == 0)
                o.Alpha = 1 - splat_control.r;
            else if(tex2D(_Splat1, IN.uv_Splat1).a == 0)
                o.Alpha = 1 - splat_control.g;
            else if(tex2D(_Splat2, IN.uv_Splat2).a == 0)
                o.Alpha = 1 - splat_control.b;
            else if(tex2D(_Splat3, IN.uv_Splat3).a == 0)
                o.Alpha = 1 - splat_control.a;
        }
        ENDCG
    }

    Dependency "AddPassShader" = "Hidden/TerrainEngine/Splatmap/Lightmap-AddPass"
    Dependency "BaseMapShader" = "Diffuse"

    //Fallback to Diffuse
    Fallback "Diffuse"
}

bohužel v unity 5 mi nefunguje a píše:

Shader error in 'Nature/Terrain/Diffuse': Too many texture interpolators would be used for ForwardBase pass (11 out of max 10) at line 24 (on )

Shaderům absolutně nerozumím, co jsem z toho pochopil je že je chyba v CGPROGRAM. Nevíte někdo co s tím?

 
Odpovědět 27.5.2015 16:30
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.