shader

Shader "Diffuse_Shader01"
{
Properties // 변수들
{

_Color ("Main My Color", Color) = (1,1,1,1) // => 변수명 ("이름", 속성) = (값)
_MainTex ("Base (RGB)", 2D) = "white" {}
_SubTex ("Sub (RGB)", 2D) = "white" {}
_BumpTex ("Normal" , 2D) = "bump"{}

_f("Value",float) = 1

_RimColor("RimColor", Color) = (1,1,1,1)
_RimPower("RimColor", float) = 3.0

}

SubShader
{
Tags { "RenderType"="Opaque" } // 렌더링 되는 순서
LOD 200

CGPROGRAM // 쉐이더 코드 시작
#pragma surface surf Lambert // => #pragma 쉐이더가 어떤 것인지 정의 ( surface 는 픽셀 세이더 Lambert 버텍스 단위로 라이팅 )

sampler2D _MainTex; //자료형 변수 선언
sampler2D _SubTex; // 텍스쳐 추가
sampler2D _BumpTex; // 범프 텍스쳐 추가

float4 _RimColor;
        float _RimPower;


fixed4 _Color;      //자료형 변수 선언 float4(32bit), half4(16bit), fixed4(8bit) = 모바일에서는 half4만 사용된다. 주로 half4 사용하면 됨
half _f;

struct Input
{
float2 uv_MainTex; //tiling
float2 uv_BumpTex; // 텍스쳐 좌표
float3 viewDir;
};


half4 LightingSimpleLambert (SurfaceOutput s, half3 lightDir, half atten)
{
              half NdotL = dot (s.Normal, lightDir); // half Lambert 전반적으로 밝아짐.

 NdotL = NdotL * 0.5 + 0.5;


              half4 c;
              c.rgb = s.Albedo * _LightColor0.rgb * (NdotL * atten);
              c.a = s.Alpha;
              return c;
        }

void surf (Input IN, inout SurfaceOutput o) {
half2 uv = IN.uv_MainTex;

//uv.y += _Time.x; // _Time 함수로 애니메이션

half4 c0 = tex2D(_MainTex,uv);
half4 c1 = tex2D(_SubTex,IN.uv_MainTex); // 두번째 텍스쳐

half a = abs( _SinTime.w); //_SinTime 함수로 자연스러운 페이딩 가능
half4 c2 = lerp(c0,c1, a);

fixed4 c = c2 * _Color;

//fixed4 c = tex2D(_MainTex, uv) * _Color; // 출력
o.Albedo = c.rgb * _f;
o.Alpha = c.a;

half4 N = tex2D(_BumpTex, IN.uv_BumpTex);//  IN.uv_BumpTex 로 부터 uv를 읽어온다.

o.Normal = N.xyz * 2.0 - 1.0;  // 0~1 -> 1~ + 1 => * 2-1
//o.Emission = _f; // Emission 오브젝트 발산광
half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));
o.Emission = _RimColor.rgb * pow (rim, _RimPower);
}
ENDCG // 쉐이더 코드 끝
}

Fallback "VertexLit"
// 쉐이더 에러시 단색 핑크로 나온다.
// 쉐이더 코드를 컴파일 하다가 컴파일이 안됐을때 이쪽으로 넘어옴 -
// 내장 쉐이더로 작동을 하게끔 한다.
// 현재는 "VertexLit"
// 중국산 mali칩 사용 폰에서 에러가 남. 버텍스 쉐이더 코드가 많아지면 에러 발생

}

댓글

이 블로그의 인기 게시물

날짜 시간 시간차 시간 계산 하기

코루틴에서 CallBack 함수 적용하기

C++ 언어 퍼센트 구하는 방법 / 기본 언어 퍼센트 구하는 방법