버텍스컬러 출력하기

{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}


}

 

SubShader
{
Tags { "RenderType"="Opaque" }
LOD 200

CGPROGRAM

#pragma surface surf Standard noambient


sampler2D _MainTex;

struct Input
{
float2 uv_MainTex;
float4 color:COLOR; //
컬러를 추가하였음.
};

 

void surf (Input IN, inout SurfaceOutputStandard o)
{

fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
//o.Albedo = c.rgb;
//o.Albedo = IN.color.rgb; //
이렇게 해도됨. 다만 그림자가 진다.
//o.Albedo = c.rgb+IN.color.rgb; //
이러면 버텍스 컬러와 이미지가 같이 나오겠지.
//o.Albedo = c.rgb*IN.color.rgb; //
이러면 버텍스 컬러와 이미지가 곱해지니깐 검은곳은 어둡게(검은곳은 0이니깐).
이렇게하면 텍스쳐 없는 오클루젼을 만들수 있다.(라이트맵처럼)
o.Emission = IN.color.rgb; // Emission
으로 출력
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}

   

여러장 버텍스 텍스쳐사용

{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_MainTex2 ("Albedo (RGB)", 2D) = "white" {}
_MainTex3 ("Albedo (RGB)", 2D) = "white" {}
_MainTex4 ("Albedo (RGB)", 2D) = "white" {}


}

 

SubShader
{
Tags { "RenderType"="Opaque" }


CGPROGRAM

#pragma surface surf Standard noambient


sampler2D _MainTex;
sampler2D _MainTex2;
sampler2D _MainTex3;
sampler2D _MainTex4;

 

struct Input
{
float2 uv_MainTex;
float2 uv_MainTex2;
float2 uv_MainTex3;
float2 uv_MainTex4;
float4 color:COLOR;



};
<![if !supportLineBreakNewLine]>
<![endif]>

 

void surf (Input IN, inout SurfaceOutputStandard o)
{

fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
fixed4 d = tex2D (_MainTex2, IN.uv_MainTex2);
fixed4 e = tex2D (_MainTex3, IN.uv_MainTex3);
fixed4 f = tex2D (_MainTex4, IN.uv_MainTex4);

o.Albedo = lerp(c.rgb, d.rgb, IN.color.r);
o.Albedo = lerp(o.Albedo, e.rgb, IN.color.g);
o.Albedo = lerp(o.Albedo, f.rgb, IN.color.b);

o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}

 

유니티 쉐이더 스타트업 자료(정종필저)

'Unity > Surface Shader' 카테고리의 다른 글

Lambert 공식  (0) 2020.05.17
라이팅구조  (0) 2020.05.17
texture  (0) 2020.05.16
CGPROGRAM03  (0) 2020.05.16
CGPROGRAM02  (0) 2020.05.16