유니티 쉐이더
-
ShaderLab(쉐이더랩)이라고 불리는 자체 스크립트 언어를 사용하고 있다.
-
쉐이더는 모바일-PC-콘솔기기 등 플랫폼별, 그리고 그림자 유무-라이트 맵 유무 등 다양한 경우의 수에 따라 제작방법이 다르다. 이를 편하게 사용하기 위해 유니티의 쉐이더랩 스크립트가 있는 것이다. (하나만 작성하면 모두 대응)
-
-
쉐이더랩을 이용한 제작 방식은 크게 세 가지로 나뉜다.
1) 쉐이더랩으로만 작성하기 (fixed function shader)
-
매우 가볍고 하드웨어 호환성이 좋지만, 기능이 상당히 부족해 고급 효과를 기대하긴 어렵다.
-
자체 문법으로 이루어져 있어서 다른 쉐이더와 호환되지 않는다.
-
지원 중단 수순을 밟는중 추천 X.
2) Surface Shader로 작성하기
-
쉐이더랩 스크립트와 함께 일부분은 CG 쉐이더 코드를 사용하는 방법이다.
-
기본적인 조명-버텍스 쉐이더의 복잡한 부분은 스크립트를 이용해 자동으로 처리된다.
-
픽셀 쉐이더 부분만 간편하게 작성할 수 있어서 편하다.
-
비주얼 쉐이더 에디터와도 상당히 비슷한 개념을 가지고 있어서 초보자가 공부하기에 좋고 응용하기에도 좋다.
-
최적화에는 다소 무리가 있고, 일정 수준 이상의 고급 기법을 구현하기는 어렵다.
3) Vertex & Fragment Shader로 작성하기
-
쉐이더랩 스크립트와 함께 CG 쉐이더 코드를 사용하지만, 좀 더 본격적인 쉐이더 작성 방법이다.
-
자동으로 처리해주는 부분이 별로 없어서 제대로 된 CG 쉐이더 방식으로 정점의 좌표 변환부터 제대로 처리해야 작동한다.
-
배우기는 힘들지만, 완전히 수동으로 제어할 수 있어서 최적화와 고급 기법을 표현할 때 좋다.
-
-
쉐이더랩 문법
-
_Name
: 이 기능의 변수명이다. _를 붙이는 것이 필수는 아니지만, 외부에서 받았다는 것을 표시하기 위해 자주 쓴다.
-
"diplay name"
: 큰 따옴표 안에 쓰는 글은 순수하게 '화면에 나타나는'글자이다. 엔진에서는 이 안의 내용을 순수한 글씨로 인식한다.
-
tex2D
: float 계열로 분류되지 않는 sampler 들이다. 텍스처는 UV 좌표와 함께 계산되어야 float4로 출력될 수 있기 때문에, 아직 UV와 계산되지 않은 텍스처는 색상(float4)으로 나타낼 수 없다. 그래서 이때까지는 sampler라고 부른다. 그 중 tex2D는 2D 텍스처를 받는 인터페이스를 만들어 준다.
-
struct SurfaceOutputStandard
{
fixed3 Albedo; // 반사율 (기본 색상 / 오브젝트의 텍스쳐)
fixed3 Normal; // 법선 (반사각을 결정하는 면의 방향)
fixed3 Emission; // 방사 (이 오브젝트가 스스로 생성하는 빛의 양)
half Metallic;
half Smoothness;
half Occlusion; // 폐색
half Alpha;
};
glossiness -> 광택 (스펙큘러 반사가 퍼지는 정도)
gradient -> 기울기?
Specular -> 머터리얼이 빛을 반사하는 정도 (0~1)
-
'Game > Unity & C#' 카테고리의 다른 글
1장 C# 복습 / 2장 디버깅 / 3장 싱글턴과 정적 멤버, 게임오브젝트와 월드 (0) | 2019.05.31 |
---|---|
unity Lambert & Blinn phong (0) | 2019.05.19 |
unity SurfaceOutputStandard (0) | 2019.05.19 |
unity uv & vertex color (0) | 2019.05.19 |
rendering pipeline & monitor right (0) | 2019.05.19 |