Unity가 4.X 부터 2pass가 가능하다는 이야기에 기존 Diffuse에 outline 그리는 공식 추가해서 붙여 보았다. 잘 그려지는거 보니 케릭터에 써볼까 했는데.. 이러면 cull option 덕분에 2 side가 적용되 폴리 x2배 찬스~!!
가뜩이나 유닛많이 등장하는 게임에 폴리까지 두배되니 이건 좀 아니다 싶어 자체 봉인... 쩝.... 나중에 쓸일 있지 않을까... (2pass에 2side까지 적용되니 좀 무겁다 싶다...)
Border 굵기 조절과 색상 조절 가능한걸 넣어서 정리
//
Properties {
_TintColor ("TintColor", Color) = (1,1,1,1)
_MainTex ("Texture", 2D) = "white" {}
_Outline ("OutlineColor", Color) = (1,1,1,1)
_OutlineBorder ("OutlineBorder", Range(0.01, 0.1)) = 0.02
}
SubShader {
Tags { "RenderType" = "Opaque" }
Lighting On
LOD 200
CGPROGRAM
#pragma surface surf Lambert nolightmap nodirlightmap noforwardadd approxview halfasview
sampler2D _MainTex;
fixed4 _TintColor;
struct Input {
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = tex2D (_MainTex, IN.uv_MainTex) * _TintColor.rgb;
}
ENDCG
Tags { "Queue"="Opaque" }
Cull front
CGPROGRAM
#pragma surface surf Lambert vertex:vert nolightmap nodirlightmap noforwardadd approxview halfasview
float4 _Outline;
float _OutlineBorder;
struct Input {
float4 Color:color;
};
void vert(inout appdata_full v){
v.vertex.xyz += v.normal * _OutlineBorder ;
}
void surf (Input IN, inout SurfaceOutput o) {
o.Emission = _Outline.rgb ;
}
ENDCG
}
}
Toggle형 제어문
Properties {
_TintColor ("TintColor", Color) = (1,1,1,1)
_MainTex ("Texture", 2D) = "white" {}
_Outline ("OutlineColor", Color) = (1,1,1,1)
[MaterialToggle] _Outlinetoggle ("Outline", Float ) = 1
_OutlineBorder ("OutlineBorder", Range(0.01, 0.1)) = 0.02
}
SubShader {
Tags { "RenderType" = "Opaque" }
Lighting On
LOD 200
CGPROGRAM
#pragma surface surf Lambert nolightmap nodirlightmap noforwardadd approxview halfasview
sampler2D _MainTex;
fixed4 _TintColor;
struct Input {
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = tex2D (_MainTex, IN.uv_MainTex) * _TintColor.rgb;
}
ENDCG
Tags { "Queue"="Opaque" }
Cull front
CGPROGRAM
#pragma surface surf Lambert vertex:vert nolightmap nodirlightmap noforwardadd approxview halfasview
float4 _Outline;
float _OutlineBorder;
float _Outlinetoggle ;
struct Input {
float4 Color:color;
};
void vert(inout appdata_full v){
v.vertex.xyz += v.normal * _OutlineBorder * _Outlinetoggle ;
}
void surf (Input IN, inout SurfaceOutput o) {
o.Emission = _Outline.rgb ;
}
ENDCG
}
fallback "Diffuse"
}
'Technical Report > Unity Shader' 카테고리의 다른 글
SelfilluminationBlend shader (0) | 2015.01.20 |
---|---|
Wrapped Diffuse (0) | 2015.01.19 |
Android platform texture compresstion option에 따른 결과물 (0) | 2015.01.16 |
Matcap shader review. (0) | 2015.01.12 |
Unity3D Transparent cutout lightmap (0) | 2014.12.26 |