Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
05-15 13:20
관리 메뉴

nomad-programmer

[CG/Unity] Custom Light 만드는 방법 본문

CG/Unity

[CG/Unity] Custom Light 만드는 방법

scii 2022. 1. 15. 00:58

라이팅을 커스터마이징하게 만들 수 있다. 

#pragma surface surf Test noambient

라이팅 이름을 Test로 지정하였다. 이름은 마음대로 지어도 상관 없다. 대신 이름에 적합한 라이팅 함수를 추가해주어야 한다.

float4 LightingTest(SurfaceOutput s, float3 lightDir, float atten) {
    return float4(1, 0, 0, 1);
}

이 함수는 무엇을 하든지 붉은 결과물을 출력하는 기능을 가진 함수이다.

또한 이어서 나오는 이름에 주의해야 한다. 저자가 설정한 커스텀 라이트 이름은 "Test" 였다. 그래서 앞에 "Lighting" 이란 이름을 추가해야 라이트 함수로 받아들인다.

Lighting + (커스텀 라이트 이름)

 

따라서, 커스텀 라이트 함수의 이름은 "LightingTest" 가 되었다.

LightingTest 함수의 인자값은 미리 정해져 있다. 이 부분은 수정할 수 없으며, 주어진 대로만 사용해야 한다. 그러므로 '커스텀 라이트' 안에서 쓸 수 있는 값은 Properties에서 만들어서 변수로 받아오는 값 빼고는 이 값만 사용할 수 있다.

(SurfaceOutput s, float3 lightDir, float atten)

 

SurfaceOutput 구조체는 Albedo와 Normal, Emission, Specular, Gloss, Alpha 이다. 이 구조체를 통째로 받아온다. 

void surf() 로 시작하는 함수에서 o.Albedo, o.Normal 등의 넣은 값들은 최종적으로 이 라이팅 함수를 거친다. 따라서 커스텀 라이트 함수 안에서는 surf 함수에서 o.Albedo로 집어 넣었던 값을 s.Albedo로 꺼내서 사용할 수 있게 된다.

커스텀 라이트 함수는 맨 나중에 계산된다.

 

또한, 커스텀 라이트 함수의 위치는 어디에 있든 상관 없다.

Shader "Custom/NewSurfaceShader"
{
    Properties
    {
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
        #pragma surface surf Test noambient

        #pragma target 3.0

        sampler2D _MainTex;

        struct Input
        {
            float2 uv_MainTex;
        };

        void surf (Input IN, inout SurfaceOutput o)
        {
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
            o.Albedo = c.rgb;
            o.Alpha = c.a;
        }

        float4 LightingTest(SurfaceOutput s, float3 lightDir, float atten){
            return float4(1, 0, 0, 1);
        }

        ENDCG
    }
    FallBack "Diffuse"
}

'CG > Unity' 카테고리의 다른 글

[CG/Unity] Diffuse Warping  (0) 2022.02.01
[CG/Unity] Toon Shader  (0) 2022.02.01
[CG/Unity] Vertex Shader  (0) 2022.01.30
[CG/Unity] Lambert 셰이더  (0) 2022.01.16
[CG/Unity] 유니티 셰이더의 작성 방법  (0) 2021.11.14
Comments