유니티 서피스 셰이더를 UnLit으로 사용할 때 캐릭터가 하얗게 타는 현상이 발생했다.
Scene안에 라이트가 두개 이상 있을경우 UnLit 서피스 셰이더임에도 캐릭터가 하얗게 타는 것이다..(프라그 셰이더는 발생하지 않음)
해당 문제를 해결하기 위해서는 noforwardadd를 꼭 써줘야 한다.
#pragma surface surf NoLighting noambient noforwardadd
그런데 이렇게 하고나서도 또 타는 현상이 발생했는데, 이 역시 라이트가 두개 있을때 두 라이트가 같은 Layer Culling을 사용하면서
그 사용된 Culling Object가 또 하얗게 타는 것이다... 레이어를 수정해서 해결하긴 했는데.. 뭔가 이상하고 찜찜한 기분..
아래는 라이트에 영향받지 않는 저 사양 서피스 셰이더 코드이다. 딱 림컬러까지만 처리~
SubShader
{
LOD 200
Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
Lighting off
CGPROGRAM
#pragma surface surf NoLighting noambient noforwardadd
//================================================================
// VARIABLES
fixed4 _Color;
sampler2D _MainTex;
uniform fixed _IsRim;
uniform fixed4 _RimColor;
uniform fixed _RimPower;
struct Input
{
half2 uv_MainTex;
half3 viewDir;
};
half4 LightingNoLighting (SurfaceOutput s, half3 lightDir, half atten)
{
return half4(s.Albedo, s.Alpha);
}
//================================================================
// SURFACE FUNCTION
void surf (Input IN, inout SurfaceOutput o)
{
fixed4 mainTex = tex2D(_MainTex, IN.uv_MainTex);
fixed rim = (1.0 - saturate(dot(normalize(IN.viewDir), o.Normal)));
o.Albedo = mainTex.rgb; * Color.rgb;
o.Alpha = mainTex.a * _Color.a;
o.Emission = _RimColor.rgb * pow(rim, 1.5 - _RimPower) * _IsRim;
}
ENDCG
}
'SHADER' 카테고리의 다른 글
유니티 셰이더 - 서피스 셰이더에서 빛 연산을 안하기 위해서는 Albedo가 아닌 Emission을 사용하자. (0) | 2016.07.15 |
---|---|
유니티 셰이더 - Surface 셰이더에서 알파가 안빠지는 현상 (0) | 2016.07.14 |
유니티 셰이더 익히기 - 1 기본 개념 파악 (0) | 2015.12.30 |
ShaderForge(쉐이더포지) (0) | 2015.12.10 |
물리 기반 렌더러의 이론 이해(physically-based-rendering) (0) | 2015.12.10 |