[학원 Unity]/[게임 그래픽 프로그래밍]

09-02 수업내용 쉐이더 랜더링

롤링페이퍼 2024. 9. 2. 12:36

1.  랜더링

Shader "LearnShader/Test/MyShader"
{
    Properties
    {
        // Properties 안에선 ; 을 사용하면 안된다.
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}

        // 여기선 log를 확인할 방법이 없어 인게임에서 결과로 색을 확인해야한다.
        // 변수명(디스플레이 이름, 변수의 타입) = 기본값
        _Darkness ("Darkness", Float)=0.1
        _Brightness ("Brightness", Range(0.0, 1.0)) = 1

        // Float4를 받는 인터페이스
        _MyColor("Color", Color) = (1,1,1,1)
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }

        CGPROGRAM
        // 서핏 쉐이더에 픽셀을 결정하는 함수
        // Standard : 유니티에서 빛의 계산을 자동으로 해준다. 추가로 물리기반 라이팅(사물과 사물의 빛 반사)도 계산 해준다.
        #pragma surface surf Standard noambient
        #pragma target 3.0

        //변수는 CGPROGRAM에서 ENDCG까지 중 아무데나 넣어도 된다.
        sampler2D _MainTex;

        // 엔진으로 부터 받아오는 내용
        struct Input
        {
            float2 uv_MainTex;
        };

        fixed4 _Color;

        // 픽셀계산한다.
        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            //fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
            // 여기서 색을 정해 넣음
            // o.Albedo : 빛(Directional Light)의 영향을 받고 출력한다.
            //o.Albedo = float3(0,0,0);
            // o.Emission : 빛(Directional Light)의 영향을 받지 않고 출력한다.
            o.Emission = float3(1,0,0);
            o.Alpha = 1;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

 

2. 랜더링

Shader "Custom/MyShader2"
{
    Properties
    {
        // Range : 슬라이더
        _Red ("Red", Range(0,1)) = 1
        _Green("Green", Range(0,1)) = 1
        _Blue("Green", Range(0,1)) = 1
        _BrightDark ("Bright & Dark", Range(-1,1)) = 1
    }
    SubShader
    {
        // Opaque 가 있으면 o.Alpha = 1;를 추가할 필요가 없다.
        Tags { "RenderType"="Opaque" }

        CGPROGRAM
        #pragma surface surf Standard fullforwardshadows
        #pragma target 3.0


        struct Input
        {
            fixed4 color;
        };

        float _Red;
        float _Green;
        float _Blue;
        float _BrightDark;

        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            float3 r = float3(_Red, _Green, _Blue);

            // 1 - 변수 => 색상 반전
            o.Emission = 1 - r;
            o.Alpha = 1;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

 

 

 

 

https://docs.unity3d.com/kr/2020.3/Manual/SL-SurfaceShaders.html

 

표면 셰이더 작성 - Unity 매뉴얼

빌트인 렌더 파이프라인에서 표면 셰이더는 조명과 상호작용하는 셰이더를 더욱 간단하게 작성하는 방법입니다.

docs.unity3d.com

 

 

 

https://developer.download.nvidia.com/cg/max.html

 

max

Name max - returns the maximum of two scalars or each respective component of two vectors Synopsis float max(float a, float b); float1 max(float1 a, float1 b); float2 max(float2 a, float2 b); float3 max(float3 a, float3 b); float4 max(float4 a, float4 b);

developer.download.nvidia.com