본문 바로가기
3D & Metaverse/Unity

Unity Shader 02

by kauree 2021. 7. 13.

색상을 출력하고 연산하기.

1번은 Properties 영역. 인터페이스를 제작하는 영역.

진짜 쉐이더를 작업하는 부분은 2번 부터.

CGPROGRAM ~ ENDCG 3번은

유니티 자체의 스크립트가 아닌 CG언어를 이용해 쉐이더를 직접 짜는 부분

서페이스 쉐이더의 특징, 스크립트와 쉐이더 언어를 같이 씀.

1,2번은 스크립트를 썼고, 3번은 쉐이더 언어를 쓰고 있음.

1번은 설정 부분.

'전처리' 또는 '스니핏(Snippet)' 이라고 부르기도 함.

쉐이더의 조명계산 설정이나, 기타 세부적인 분기를 정해주는 부분.

2번은 'Input'이라는 이름을 가진 구조체(Structure 스트럭쳐)

이 안에 넣은 내용은 '엔진으로부터 받아와야 할 데이터' 들이 들어감.

괄호 끝에 { }; 세미클론이 붙음

3번은 초반부에 배울 surf라는 이름을 가진 '함수' 영역.

색상이나 이미지가 출력되는 부분을 만들 수 있음.

이것은 괄호 끝에 { } 세미클론 없음.


색상 출력하기.

3번에 있는 surf 함수 안에 입력하면 됨.

void surf (Input IN, inout SurfaceOutputStandard o) { }

형식 이름 (입력값) { }

- 이 구조체 안에 정의된 내용

struct SurfaceOutputStandard

{

fixed3 Albedo; (반사율)

fixed3 Normal;

fixed3 Emission; (방사)

half Metallic;

half Smoothness;

half Occlusion;

half Alpha;

}

SurfaceOutputStandard 안에 7개의 변수가 안에 있고, 이 변수를 불러 간단히 값을 넣는 것 만으로 출력값을 만들수 있음.

이중에서 신경써야 하는 것은 Albedo 와 Emission 임.

float / half / fixed

float 의 1/2이 half, half보다 더 작은 것이 fixed

컬러나 벡터의 길이는 fixed로 충분. 범위나 정밀도가 필요한 것은 half, 나머지는 float을 쓰는 것이 좋다.

잘 모를때는 다 float를 써도 상관없음.


Albedo에 값을 넣어 보자.

우선 당장 필요없는 것은 지우고...

Albedo 에 값을 입력.

o.Albedo 의 뜻은

o 는 SurfaceOutputStandard란 뜻.

void surf (Input IN, inout SurfaceOutputStandard o) { }

o.Albedo는 SurfaceOutputStandard 안에 있는 Albedo란 뜻.

Albedo 대신 Emission을 쓰면...