[ 유니티 내장 라이팅 구조 ]
[ Standard Shader ]
유니티 5부터 기본으로 적용된 쉐이더인 Standard Stader의 라이팅은 좋은 라이팅 구조이지만
물리기반 쉐이더 라이트이기에 모바일과 같은 저사양 기기에서 구동하기는 무겁다 .
그렇기에 유니티 내부에는 4버전 이전부터 사용하던 라이트 구조가 남아있다 .
물리 기반 쉐이더보다 품질은 떨어지지만 상대적으로 가볍기에 물리기반 쉐이더를 사용 할 필요 없이
가볍게 처리해야 하는 모바일 프로젝트에 적합한 쉐이더 구조이다 .
[ Standard Shader의 구조체 ]
다음은 물리기반쉐이더의 구조체이다 .
struct SurfaceOutputStandard
{
fixed3 Albedo; (물체의 기본 색상)
fixed3 Normal; (Normal Map)
fixed3 Emission; (빛의 영향을 받지 않는 색상)
half Metallic; (재질의 금속 여부)
half Smoothness; (재질의 매끈함)
half Occlusion; (차폐되어 어두운 정도)
half Alpha; (알파)
}
다음은 물리기반쉐이더 이전 쉐이더 구조인 램버트 / 블린봉 라이트에서 사용하는 입력 구조체이다
struct SurfaceOuput
{
half3 Albedo; (물체의 기본 색상)
half3 Normal; (Normal Map)
half3 Emission; (빛의 영향을 받지 않는 색상)
half Specular; (Specular의 넓이.얼마나 넓은 하이라이트가 나오는가)
hlaf Gloss; (Specular의 강도)
half Alpha (알파)
}
즉 , 유니티에 내장된 라이팅은 총 3가지이다 .
- Lambert :Specular 공식이 없고 단지 빛에 의한 밝고 어두움이 구현된 가벼운 라이트 구조.
- Blinn Phong :램버트 공식에 가벼운 Specular공식 블린퐁 공식이 더해진 라이트 구조.Specular 공식은 보는 각도와 조명 각도에 따라 계산된 특정 색의 하이라이트 동그라미로 표현 .
- Standard : PBS(물리기반)쉐이더 . 주변환경을 반사해서 Specular를 구현. Diffuse와 Specular가 에너지 보존 법칙에 의해 서로 보완관계를 가지고 Specular의 색상이 메탈릭 송성에 따라 자동으로 결정되는 라이트구조인 SurfaceOutputStandard 구조체와 SurfaceOutputStandardSpecular구조체를 사용한다 .
[ Lambert 라이팅 만들기 ]
[ Lambert ]
음영은 계산하지만 Specular는 계산하지 않는 전통적이고 가벼운 라이팅 공식이다 .
위와 같이 두군데를 바꾸어 준다 .
해당 라이팅 함수에서는 Emission/Normal 사용 할 수 있다 .
다만 Specular는 구현 할 수 없으므로 o.Specular / o.Gloss에 어떤값을 넣어도 변화는 없다 .
해당 라이팅 구조는 내장된 기본 라이팅 구조중 가장 가벼워 저사양 기기에서도 잘 동작한다 .
[ Blinn-Pong 라이팅 만들기 ]
[ Blinn-Pong ]
부이 통 퐁 박사의 논문에서 발표된 퐁 공식은 제임스 블린에 의해 Blinn - Pong 공식으로 계량되었다 .
이 공식은 Specular 를 가볍게 표현 할 수 있는 공식이었고 , 유니티에서 해당 공식이 들어가 있다 .
위의 부분을 바꾸어 준다 .
특이하게도 , BlinnPhong 공식에서만 가동하는 예외사항이 있다 .
_SpecColor("Specular Color",color)=(1,1,1,1)
다음 구문을 받는 코드가 어디에도 없다 .
또한 저 값을 코드내에서 평범하게 받으면 에러가 발생한다 .
즉 , _SpecColor는 코드에서 받으면 안되고 프러파티만 만들어야 하는 것이다 .
또한 해당 이름외에 다른 이름은 사용해서는 안된다 .
이는 BlinnPhong 공식이 구현된 내부 코드에서 해당 값을 받고 있기 때문이다 .
즉,_SpecColor는 예약어이고 절대로 코드 내부에서 받아서는 안된다는 특이한 예외사항이 있다 .
o.Gloss=1;
o.Specular=0.5;
Gloss는 0과 1 사이의 값이 들어가야 하며 Specular의 강도를 의미한다 .
0은 둔탁한 재질 1은 매끄러운 재질을 의미한다 .
Specular는 0과 1 사이의 값이 들어가야 하며 Specular의 크기를 의미한다 .
0에 가까워질수록 Specular의 크기가 커지면 1에 가까울수록 작아진다 .
'유니티 쉐이더 스타트업' 카테고리의 다른 글
[ 유니티 쉐이더 스타트업 ] 08 . SurfaceOutputStandard 사용하기 (0) | 2023.08.18 |
---|---|
[ 유니티 쉐이더 스타트업 ] 07 . 버텍스 컬러 이용하기 (0) | 2023.08.16 |
[ 유니티 쉐이더 스타트업 ] 06 . UV를 이용하는 법 배우기 (0) | 2023.08.10 |
[ 유니티 쉐이더 스타트업 ] 05 - 2 . Surface Shader를 활용한 텍스쳐 제어 (0) | 2023.08.07 |
[ 유니티 쉐이더 스타트업 ] 05 - 1 . 기초적인 Surface Shader (0) | 2023.08.02 |