EasyCastleUNITY

유니티 쉐이더 본문

개인 필기

유니티 쉐이더

EasyCastleT 2023. 8. 31. 17:09

프로퍼티의 작성하면 인스펙터에 보인다

쉐이더에서 사용하는 모든 수는 float다 

쉐이더 코드

Shader "ljs/BlueSkyShader"
{
    Properties
    {
       _MyColor("MyColor",Color) = (1,1,1,1)
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        

        CGPROGRAM
        #pragma surface surf Standard noambient

        #pragma target 3.0

        struct Input
        {
            float2 uv_MainTex;
        };

        fixed4 _MyColor;

        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            // o.Albedo = fixed3(_MyColor.r,_MyColor.g,_MyColor.b);
            // o.Albedo = _MyColor;
            // o.Albedo = _MyColor.r;
            o.Emission = half3(_MyColor.r,_MyColor.g,_MyColor.b);

        }
        ENDCG
    }
    FallBack "Diffuse"
}

커스텀 라이트 모델

Shader "ljs/BlueSkyShader"
{
    Properties
    {
       _MyColor("MyColor",Color) = (1,1,1,1)
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        

        CGPROGRAM
        #pragma surface surf _MyLightModel noambient

        #pragma target 3.0

        struct Input
        {
            float2 uv_MainTex;
        };

        fixed4 _MyColor;

        void surf (Input IN, inout SurfaceOutput o)
        {
            // o.Albedo = fixed3(_MyColor.r,_MyColor.g,_MyColor.b);
            // o.Albedo = _MyColor;
            // o.Albedo = _MyColor.r;
            o.Emission = half3(_MyColor.r,_MyColor.g,_MyColor.b);

        }
        //커스텀 라이트 모델
        half4 Lighting_MyLightModel(SurfaceOutput s, half3 lightDir,half atten){
            half4 final;
            final.rgb = s.Emission;
            final.a = s.Alpha;
            return final;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

Albedo는 빛에 영향을 받는 색깔, Emission은 빛에 영향을 받지 않는 색깔 

 

들어오는 빛의 방향을 반대로 만든 다음, dot product를 실행하여, 

해당 면이 빛을 얼마나 받고 있는 가에 대한 정보를 생성한다. 

dot product의 결과는 -1~1

-1이라면 완전 반대편, 1이라면 정면, 0이라면 빛에서 90도에 있는 면을 의미