기본적인 컬러 바꾸기

1
2
3
4
5
SubShader {
    Pass {
         Color (1111)
    }
}
cs

Color 명령어로 RGBA 값을 변경 가능.




물체 표면의 재질(material) 정의

1
2
3
4
5
6
7
8
SubShader {
    Pass {
        Material {
            Diffuse (1111)
            Ambient (1111)
        }
    }
}
cs

Material 명령어 안에 

Diffuse, Ambient, Shininess, Specular, Emission 을 선언 가능.


Ambient (주변광) : 물체를 덮은 일정한 색상(고정). 빛의 영향을 받지않고 항상 동일.

Diffuse (확산광) : 물체 표면에서 분산되어 들어오는 빛. 빛이 밝은곳에서는 강한 색상. 어두운쪽에선 약한 색상.

그림자가 진것처럼 표현됨

Specular (반사광) : 빛이 반사되어 하이라이트 되는 색상.

Emission (방출광) : 물체의 표면 자체에서 나오는 색상. (외부가 아닌 오브젝트 자체에서 발산)

Shininess (광택) : 하이라이트 선명도. 0~1 사이




라이팅 적용하기

1
2
3
4
5
6
7
8
9
SubShader {
    Pass {
        Material {
            Diffuse (1111)
            Ambient (1111)
        }
        Lighting On
    }
}
cs

Lighting On 명령어를 이용하면 표준 라이팅을 적용가능.




프로퍼티에서 선언한 변수들 사용하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Shader "VertexLit Simple" {
    Properties {
        _Color ("Main Color", Color) = (1,1,1,1)
    }
    SubShader {
        Pass {
            Material {
                Diffuse [_Color]
                Ambient [_Color]
            }
            Lighting On
        }
    }
}
cs

값을 직접 입력하지않고 Diffuse [_Color] 처럼 변수를 넣으면 적용가능.




텍스쳐 적용하기

1
2
3
4
5
6
7
8
Properties {
    _MainTex ("Base Texture", 2D) = "white" {}
}
SubShader {
    Pass {
        SetTexture[_MainTex]
    }
}
cs

인스펙터에서 받아와서 SetTexture 로 적용




텍스쳐에 이전 연산결과 적용하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Properties {
    _MainTex ("Base Texture", 2D) = "white" {}
    _SubTex ("Sub Texture", 2D) = "white" {}
}
SubShader {
    Pass {
        Material
        {
            Diffuse[_Color]
            Ambient[_Color]
        }
        Lighting On
        SetTexture [_MainTex]
        {
            Combine texture * primary DOUBLE
        }
        SetTextrue [_SubTex]
        {
            Combine texture * previous
        }
    }
}
cs

SetTexture 뒤에 Combine 명령어를 통해 연산결과를 적용할 수 있음.


primary라이팅 계산결과 적용

이전 결과값에 현재 텍스쳐를 곱해 텍스쳐에 라이팅 연산결과를 적용할 수 있음. 

previous 바로 직전까지의 결과를 적용

Constant ConstantColor 명령어로 지정된 컬러


DOUBLE라이팅 강도를 2배로 높이겠다는 키워드. 

QUAD4배 적용




보간 (Lerp)

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
Properties {
    _Color ("Color", Color) = (1,1,1,1)
    _MainTex ("Albedo (RGB)", 2D) = "white" {}
    _MainTex2("Albedo2 (RGB)", 2D) = "white" {}
}
 
SubShader{
    Pass
    {
        Material
        {
            Diffuse[_Color]
            Ambient[_Color]
        }
        Lighting On
        SetTexture[_MainTex]
        {
            Combine texture * primary DOUBLE
        }
        SetTexture[_MainTex2]
        { 
            ConstantColor (1111)
            Combine constant lerp(texture) previous
        }
    }
}
 
cs

constant 명령어는 위에 적혀있듯이 ConstantColor로 설정한 색상을 의미.

A lerp(B) C 처럼 사용하며 B의 알파값을 이용하여 A와 C를 보간하여 결과값을 만듬.

B의 알파는 0~1 값을 가지며. 0일경우 C값. 1일경우 A값이 됨.


위의 경우 B가 texture(_MainTex2) 이므로 B의 알파값이 0인부분은 C(previous)가 적용되어 이전 텍스쳐.

B의 알파값이 1인부분은 A가 적용되어 constant(white)가 적용될것.




블렌딩 (Blend)

1
2
3
4
5
6
7
8
9
10
11
12
Properties {
    _MainTex ("Texture to blend", 2D) = "black" {}
}
 
SubShader{
    Tags { "Queue" = "Transparent" }
    Pass
    {
        Blend SrcColor OneMinusSrcColor
        SetTexture[_MainTex] { Combine texture }
    }
}
cs

블렌딩은 투명 오브젝트를 만드는데 사용.

Blend SrcFactor DstFactor 명령어로 블렌드를 적용할 수 있음.


오브젝트의 알파값이 0.6이라고 한다면 OneMinusSrcColor는 0.4가 되어 

오브젝트 60% 배경색상 40%비율로 섞여 반투명하게 보이는 효과가 나타남


Factor 인자는 아래와 같다.




렌더링 순서 결정 (Queue 태그)

1
2
3
4
5
6
7
8
SubShader{
    Tags { "Queue" = "Transparent" }
    Pass
    {
        Blend One One
        SetTexture[_MainTex] { Combine texture }
    }
}
cs

위와 같이 Queue 태그를 이용해 렌더링 순서를 결정할 수 있다.

Queue태그의 종류로는

Background - 가장 먼저 렌더링됨. 보통 배경에 배치해야할 때 사용

Geometry - 디폴트값. 대부분 오브젝트의 사용. 불투명인 경우에

AlphaTest - 알파테스트된 지오메트리가 사용

Transparent - 알파 값이 적용되어야 할 오브젝트들은 Geometry와 AlphaTest 이후에 렌더링

Overlay - 마지막에 렌더링되야할 항목에 적용


background는 1000, Geometry는 2000, AlphaTest는 2450, Transparent는 3000, Overlay는 4000의 값을 가지고있음.

1
Tags { "Queue" = "Geometry+1" }
cs

그렇기에 위처럼 +1을 통해 2001번으로 만들어 모든 Geometry가 렌더링 된 이후에 렌더링시킬 수도 있음.

Posted by misty_
,