스컬프터VR에서 모델링하고 해당 글에서 설명하는 효율적인 모바일 라이팅으로 렌더링한 모델.
한 가지 색깔을 베이스 컬러로 드래그하는 기본 라이트 셰이더는 수백 가지 연산을 수반합니다. "최대 러프니스(Fully Rough)”으로 체크 표시해도, 기본 라이트 머티리얼은 Oculus Quest 화면에 5만개의 트라이앵글 정도만 렌더할 수 있습니다. 이 정도로는 원활한 스컬프팅 경험을 제공할 수 없습니다.
그래서 기본 UE4 라이팅 대신 언릿 이미시브 머티리얼을 사용해 저만의 퐁(Phong) 라이팅을 만들었습니다. 이 머티리얼은 비용이 많이 들 것 같아 보이지만 연산이 17개뿐입니다. 자세한 방법을 확인하고 직접 사용하고 싶으신가요? 이곳 페이스트빈(Pastebin) 링크에서 확인하시기 바랍니다. https://blueprintue.com/blueprint/1gp1z-xh/
이제부터 자세한 내용을 살펴보겠습니다.
먼저, 클레이(Clay), 메탈(Metal), 글로잉(Glowing)이라는 세 가지 머티리얼 유형을 지원합니다. 클레이는 최대 러프니스 머티리얼을 에뮬레이트하고, 메탈은 광택이 나면서 빛을 반사하고, 글로잉은 클레이에 글로 정도의 상숫값을 더한 것입니다. 머티리얼 유형은 각 버텍스 컬러의 8비트 앰비언트 채널에 인코딩되어 있습니다.
월드 내 라이트는 디렉셔널 라이트 한 개와 앰비언트 스카이박스로 적용됩니다. 스컬프터VR 안의 스카이박스는 같은 앰비언트 섹션 코드를 사용하지만, 상수가 조금씩 다릅니다. 저는 블린-퐁(Blinn-Phong) 라이팅을 사용해 스페큘러 하이라이트로 디퓨즈 라이팅을 연출하고, 여기에 분석적 스카이박스의 앰비언트 라이트를 추가합니다.
그 결과는 버텍스 컬러와 버텍스 당 앰비언트 오클루전(AO) 텀에 곱해져 증식합니다. 복셀 콘 트레이싱의 커스텀 베리언트를 사용하는 버텍스마다 앰비언트 오클루전 텀이 CPU에서 계산됩니다.
각 라이팅 컴포넌트를 살펴보겠습니다.
디퓨즈:
디퓨즈 라이팅은 카메라 위치와 상관이 없이, 오로지 태양의 위치에 의해 결정됩니다. 따라서, 여기서는 태양의 방향과 표면 노멀을 도트 곱(dot product)합니다. 이 경우, 클레이는 0.2에서 1.0까지, 메탈은 0.05에서 0.25까지라는 결과가 나타납니다. 이론적으로 완전히 메탈릭한 표면은 디퓨즈 라이트가 적용되지 않아야 하지만, 디퓨즈 라이트를 살짝 추가하면 셰이프를 눈으로 파악하는 데 도움이 됩니다. 스컬프팅 애플리케이션에서 중요한 부분입니다.스페큘러:
스페큘러 라이트는 오브젝트 표면에 반사된 태양을 보여줍니다. 하이라이트의 선명도는 대체로 러프니스에 따라 결정되지만, 블린-퐁 라이팅에서는 선명도를 조절하기 위해 도트 곱을 여러 번 실시합니다. 여기서는 클레이는 6제곱, 메탈은 64제곱입니다. 또한 메탈/클레이의 최대 스페큘러 밝기를 조절합니다.앰비언트:
앰비언트 라이트는 셰이더에 효율적인 "스카이라이트”와 비슷한 것을 더하려는 저의 시도였습니다. 상단의 코멘트 박스 3개는 클레이를 위한 표면 노멀 또는 메탈을 위한 리플렉션 벡터의 Z좌표를 기반으로 하늘의 색과 지면의 색을 보간합니다. 해당 Z 좌표를 상수와 곱하면 보간이 더 선명해집니다. 네 번째 코멘트 박스는 해당 Z 좌표가 0에 근접할 때 수평선을 추가합니다. 수평선은 반짝이고 광택이 나는 메탈릭 오브젝트의 셰이프를 표현할 때 아주 중요합니다.이미시브:
이미시브 라이트는 뷰와 관련이 없으며, 모든 글로잉 픽셀에 기본량을 추가합니다. 스컬프터VR에서는 "GlowMultiple" 파라미터가 진동하면서 깜빡임을 표현합니다. 블루프린트에서 CPU가 이 진동을 제어합니다. CPU에서 실행하면 수백만 개의 픽셀에서 해야 할 연산 일부를 절약할 수 있습니다.최종 라이팅:
디퓨즈, 스페큘러, 앰비언트 라이트가 전부 합쳐지고 태양 색과 곱해져 낮과 밤의 밝기를 제어합니다. 이미시브 라이트는 그다음에 추가됩니다.다이내믹 스카이의 파라미터 조정
아래와 같이 태양을 움직이면 태양의 위치와 색상, 천정 색상, 지평선 색상, 지면 색상 모두가 동적으로 변합니다. 모든 색상은 전적으로 태양 방향의 Z 컴포넌트에 기반한 커브 테이블에 저장됩니다. 이러한 테이블을 세밀하게 조정해 스컬프터VR의 컬러 팔레트로 적당한 밝기와 대비를 연출합니다.위 참조: 흰색 메탈, 녹색 글로우, 청록색 클레이 머티리얼입니다. 오브젝트가 단색이어도 셰이프에 대한 많은 정보를 파악할 수 있습니다.
스컬프터VR에서는 모든 머티리얼은 이미시브이며 이 머티리얼 함수를 이용해 라이팅을 증식합니다. 일부 머티리얼 및 모델은 버텍스 컬러를 사용하고, 일부는 텍스처가 있지만 전부 일정한 라이팅이 적용됩니다.
이 방법이 유용한 정보이기를 바라며, 직접 사용해보거나 이 방법에 기반하여 새로운 베리언트를 만들어보시기 바랍니다. 감사합니다.