유니티 커스텀 라이트로 블린 퐁 스페큘라 구현하기

2022. 3. 5. 16:30UnityShader/수업 과제

스페큘라는 반사광이다.

반사광을 표현하는 공식은 한 가지만 있는게 아니다.

이 포스팅에서 다룰 공식은 Phong, Blinn-Phong 두 가지이다.

그리고 스페큘라의 강도를 인터페이스를 통해 조절하는 것까지 다뤄보겠다.

 

 


Phong 구현하기

 

 

퐁부터 구현해보자.

퐁 공식은 빛의 입사각과 반사각이 법선과 이루는 각도가 서로 같다는 점을 이용해

빛 방향과 노말값을 이용하여 반사 방향 값을 구한 후,

반사 방향과 카메라 방향의 내적 값으로 정반사률을 구하는 것이다.

실험 대상
Phong 결과

반사광이 잘 구현되었다.

퐁 공식의 특징은 반사벡터와 시선벡터를 내적한다는 것이다.

 

 

 


Blinn-Phong 구현하기

 

 

 

이 공식의 특징은 반사벡터를 구하지 않는다는 것이다.

블린 퐁의 원리는 빛 방향과 시선 방향의 중간 벡터를 구하고,

그 중간 벡터와 노말 벡터를 내적해서 스페큘라값을 구한다.

퐁 공식에 비해 가볍고 코드도 단순하다.

 

Blinn-Phong 결과

 

 

퐁과 블린퐁을 적용한 오브젝트.

외적으로 큰 차이는 없는 듯 하다.

 

 

 


인터페이스에서 스페큘라 강도 조절하기

 

 

이제는 인터페이스를 통해 값을 입력 받고, 

그 값으로 스페큘라의 강도를 조절해보자.

 

프로퍼티에서 값을 입력받고, 변수를 선언한다.
최종 출력 연산에 입력받은 변수를 곱한다.

 

강도를 0.1로 했을 때
10으로 했을 때
강도를 끝없이 늘려버리자, 툰렌더링처럼 색 구분이 뚜렷해졌다.

 

여기에 더해서 스페큘라의 넓이도 조절해보자.

위와 같은 방식으로 값을 입력받고,

그 값을 제곱하는 구문에 넣어주면 된다.

'UnityShader > 수업 과제' 카테고리의 다른 글

림라이트 응용하여 홀로그램 만들기  (0) 2022.03.06