2014-01-25 78 views
0

我想配置這個着色器,我從網上獲得一個白色輪廓不是黑色的。但是「_OutlineColor(」Outline Color「,Color)=(1,1,1,1)」不起作用。 我是新來的團結和事情如何工作,所以我希望你能幫助我。 下面是完整的着色器:Unity3d中的輪廓着色器

Shader "Outlined/Diffuse" { 
    Properties { 
     _Color ("Main Color", Color) = (0,0,0,0) 
     _OutlineColor ("Outline Color", Color) = (1,1,1,1) 
     _Outline ("Outline width", Range (.002, 0.03)) = 5 
     _MainTex ("Base (RGB)", 2D) = "white" { } 
    } 

CGINCLUDE 
#include "UnityCG.cginc" 

struct appdata { 
    float4 vertex : POSITION; 
    float3 normal : NORMAL; 
}; 

struct v2f { 
    float4 pos : POSITION; 
    float4 color : COLOR; 
}; 

uniform float _Outline; 
uniform float4 _OutlineColor; 

v2f vert(appdata v) { 
    // just make a copy of incoming vertex data but scaled according to normal direction 
    v2f o; 
    o.pos = mul(UNITY_MATRIX_MVP, v.vertex); 

    float3 norm = mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal); 
    float2 offset = TransformViewToProjection(norm.xy); 

    o.pos.xy += offset * o.pos.z * _Outline; 
    o.color = _OutlineColor; 
    return o; 
} 
ENDCG 

    SubShader { 
     //Tags {"Queue" = "Geometry+100" } 
CGPROGRAM 
#pragma surface surf Lambert 

sampler2D _MainTex; 
fixed4 _Color; 

struct Input { 
    float2 uv_MainTex; 
}; 

void surf (Input IN, inout SurfaceOutput o) { 
    fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color; 
    o.Albedo = c.rgb; 
    o.Alpha = c.a; 
} 
ENDCG 

     // note that a vertex shader is specified here but its using the one above 
     Pass { 
      Name "OUTLINE" 
      Tags { "LightMode" = "Always" } 
      Cull Front 
      ZWrite On 
      ColorMask RGB 
      Blend SrcAlpha OneMinusSrcAlpha 
      //Offset 50,50 

      CGPROGRAM 
      #pragma vertex vert 
      #pragma fragment frag 
      half4 frag(v2f i) :COLOR { return i.color; } 
      ENDCG 
     } 
    } 

    SubShader { 
CGPROGRAM 
#pragma surface surf Lambert 

sampler2D _MainTex; 
fixed4 _Color; 

struct Input { 
    float2 uv_MainTex; 
}; 

void surf (Input IN, inout SurfaceOutput o) { 
    fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color; 
    o.Albedo = c.rgb; 
    o.Alpha = c.a; 
} 
ENDCG 

     Pass { 
      Name "OUTLINE" 
      Tags { "LightMode" = "Always" } 
      Cull Front 
      ZWrite On 
      ColorMask RGB 
      Blend SrcAlpha OneMinusSrcAlpha 

      CGPROGRAM 
      #pragma vertex vert 
      #pragma exclude_renderers gles xbox360 ps3 
      ENDCG 
      SetTexture [_MainTex] { combine primary } 
     } 
    } 

    Fallback "Diffuse" 
} 
+1

驗證材料檢查器中的顏色是白色的。 Unity的Inspector設置將取代您在着色器中硬編碼的值。 – Jerdak

回答

0

的「(1,1,1,1)」您要指派給「_OutlineColor」描述的默認值。當您創建利用該着色器的新材質時(此處爲「輪廓/漫反射」),​​將考慮該值。只需創建新材質併爲其分配着色器。你會注意到這次的輪廓顏色是白色的。您也可以在編輯器中簡單地選擇您的材料,並通過檢查器窗口更改輪廓顏色。

至於你的問題 - 可能你已經創建了一個新的材質結合你描述的着色器,在你着色器的主體從黑色(0,0,0,1)到白色(1,1 ,1,1)顏色(我承認着色器的主體,所以我認爲是黑色)。而這意味着默認的黑色已經被分配給材質。如果你想改變顏色,就像我上面寫的那樣,通過編輯檢查員在材質上做。