TECHARTNOMAD | TECHARTFLOWIO.COM

TECH.ART.FLOW.IO

[번역] 언리얼 5 카툰 렌더 파이프라인에 블루프린트 사용 #2 (가상 섀도 맵 제작)

jplee 2024. 7. 16. 16:00

저자 : 次次先生 : 언리얼 엔진 테크니컬 아티스트.

프로덕션 아이디어:

참고 :이 기사는 최적화를 고려하지 않고 실제 소비량을 고려하지 않으며 단순히 효과를 얻기 위해 최적화 작업이 마지막에 배치됩니다!

실생활에서 그림자가 어떻게 생성되는지 살펴 보겠습니다. 빛이 닿지 않는 곳에 그림자가 생기고 언리얼 엔진은 다양한 방법으로 그림자를 생성 할 수 있지만 카툰 렌더링에서는 그림자 색상, 램프, 전환 등과 같은 그림자에 대한 고급 작업을 수행해야하는 경우가 많으므로 고급 작업을 수행하려면 그림자 맵을 가져와야 합니다.

요즘에는 다음과 같은 다양한 방법으로 그림자를 만들 수 있습니다.

램버시안 조명: 그림자를 만드는 것은 매우 쉽지만 램버시안 조명은 모델 노멀을 먹어치우므로 그림자 마스크를 만들 수 없습니다.

장면 컬러 셰이딩: 최첨단 섀도잉 기법이지만, 오버헤드가 높기 때문에 게임에서 이 기법을 사용하는 것을 본 적이 없습니다.

엔진 렌더링 파이프 라인 변경 : 이것은 또한 최첨단 기술이며 중국에서 가장 좋은 것은 YIvanLee라고 생각합니다. 파이프 라인을 변경하는 다른 방법이 있는데, 제가 거의 접촉하지 않았기 때문에이 기술의 임계 값이 얼마나 높은지 결론을 내릴 수 없습니다.

짧은 소개를 마치고 오늘은 새로운 카드 터치 기술에 대해 잠시 공부해 보겠습니다!

큰 아이디어는 간단합니다.

오브젝트 A를 광 수집기, 오브젝트 B를 광 발광체라고 가정하고, 광 발광체는 AB(빨간색 화살표)의 거리 방향을 따라 빛(검은색 화살표)을 방출하고 노란색 영역은 광 표면, 파란색은 그림자 표면이라고 가정하면 광 발광체 B가 거리 방향을 따라 오브젝트 A에 매핑된다고 생각할 수 있는데, 이 아이디어는 이전에 KATHU의 비슷한 아이디어를 한 사람이 RenderTarget과 매트릭스 변환을 통해 수행한 적이 있습니다.섀도 맵을 생성하기 위해 렌더타겟과 매트릭스 변환을 통해 이전에도 해본 적이 있지만 소비량 문제가 있어서 이 아이디어를 따르되, 렌더타겟과 맵을 사용하는 대신 섀도 모델을 복셀로 슬라이스한 다음 복셀에서 그림자 정보를 계산하여 렌더 파이프라인으로 보내도록 하겠습니다.

======즉, 섀도 데이터가 복셀 배열 데이터로 변환된 다음 머티리얼의 섀도 맵으로 변환된다는 뜻입니다.========

제 검색 능력의 문제일 수도 있고, 국내외 기술 관련 글은 다 찾아봤지만 복셀 셰이딩 관련 내용이 없어서 혼자 공부해야만 하는 상황입니다!

우선 모델의 UV를 분할해야하는데, 우리 모두 알다시피 매핑은 UV로 모델에 매핑되고 매핑 파일에는 해상도 개념이 있으며 해상도는 독립적 인 색상 영역이라고 생각할 수 있으며지도에는 수만 개의 영역이 있으며 예를 들어 4K 매핑에는 4096 * 4096 = 16,777,216 영역이 있으며 복셀은 2 차원 공간의 개념 인 최소 단위 인 픽셀 (Pixel)과 유사하며 복셀을 2 차원 공간과 비교할 수 있습니다.복셀은 2차원 공간의 가장 작은 단위인 픽셀(픽셀)과 개념적으로 유사하며, 복셀을 3차원 물체의 해상도와 비교할 수 있으므로 이해하기 쉽습니다.픽셀을 복셀로 변환하려면 UV가 필요하므로 이제 첫 번째 결함인 모델을 잡아먹는 UV가 생겼습니다!

추신: 왜 가상 그림자에 복셀 아이디어를 사용해야겠다고 생각했나요?오래 전 노매드 네트워크에서 '나의 세 몸 - 폴른'을 개발할 때 언리얼 엔진 복셀을 연구하고 있었는데, 당시에는 스팀 게임 '티어다운'과 비슷한 전체 지형 파괴와 지형 브러싱을 연구하는 데 복셀을 사용했는데, 지금 이 연구를 하는 것은 오래된 책 QAQ를 먹는 것과 비슷합니다.;;;

일반적인 제작 사고 과정(복셀 섀도맵)

래스터의 개념은 컴퓨터 그래픽에서 비교적 기본적인 개념으로, 대략 3D 객체를 화면 공간으로 이산(투영 변환)한 다음 샘플링하여 픽셀의 중심이 삼각형 안에 있는지 여부를 결정하는 것을 의미합니다.

이미지 출처: GAMES101

그런 다음 정사각형 픽셀을 사용하여 픽셀 변화를 나타냅니다.

이미지 크레딧: GAMES101

들쭉날쭉한 부분은 잠시 무시하고 원리를 대략적으로 설명해 보겠습니다.

그런 다음 이 아이디어를 사용하여 동적 그림자를 구현할 수 있는지 알아볼 수 있습니다. 모델을 화면 공간으로 개별적으로 변환하면 기본 드로잉 보드를 얻은 다음 빛의 위치를 가져와 샘플링하여 조명 음영 정보를 얻을 수 있지만 (매트릭스 변환 그림자도 이와 유사합니다) 전체 모델을 직접 계산을 통해 매핑하면 오버 헤드가 매우 높습니다.모델은 수만 개의 얼굴이 될 수 있고 수만 번 계산할 수 없으므로 모델을 인수분해해야 합니다.

먼저 정수 해상도를 256으로 정의합니다(즉, 256복셀의 해상도를 정의합니다).

그런 다음 65536 (256 * 256) 함수를 계산해야하지만 (따라서 해상도가 높을수록 CPU 점유율이 높을수록 모바일 64는 충분히 느끼지만 나중에 라이트 컬링 개념 도입의 최적화에 대해 이야기 할 것이므로 실제로는 그렇게 많이 계산되지 않을 것이며, 라이트 컬링은 카메라 컬링과 유사 함) 후세대 재기 드의 해상도가 낮아질수록 더 높습니다.뒤에서 우리는 재기드 처리를 사용해야 합니다.

그런 다음 UV 맵을 65536 개의 영역으로 나눈 다음이 영역을 UV 데이터로 3D 공간에 매핑 할 수 있으므로 복셀 공간이 있습니다. 이것은 최소한의 계산으로 그림자를 계산할 수 있도록 모델을 복셀 화하는 방법이므로 단일 복셀의 데이터를 저장하려면 정점과 유사한 것이 필요합니다. 모델의 정점은 다음을 수행 할 수 있습니다.모델의 정점에는 6개의 정보, 벡터 및 정점 색(일부 모델에는 면에 대한 정점 인덱스가 포함됨)을 저장할 수 있으며, 픽셀 볼륨에는 위치 벡터의 플로트 3개만 저장하면 됩니다.

복셀화 모델

오리지널 모델

이 복셀화 프로세스는 다양한 양식화된 모델을 만드는 데도 사용할 수 있습니다.

얼굴에는 더 높은 해상도의 복셀을 사용하여 얼굴에 더 미세한 그림자를 만들 수 있도록 했습니다(SDF 디스턴스 필드 섀도를 사용하여 얼굴 그림자를 별도로 처리할 수도 있습니다).

뷰포트 변환 매트릭스 공식을 사용하여 단위 복셀 공간을 광원 공간에 매핑합니다.

Viewport transform matrix

 

 

우리는 광원을 면으로 가정하고, 먼저 복셀 모델을 평면에 직교 투영한 다음, 다시 투시 투영을 한 번 합니다.

이렇게 하여 두 장의 복셀 투영도를 얻고, 두 장의 복셀 투영도를 뺄셈으로 계산하면 심도도와 유사한 것을 얻을 수 있습니다.

다른 물체에서 그림자를 수신하려면 다른 물체 모델을 정의한 다음 공간에서 광원 평면 공간으로 변환한 다음 광원 평면 공간의 복셀 투영 질감을 샘플링하고 샘플링 결과와 최종 투영도를 곱하여 음영 결과를 생성하기만 하면 됩니다.

참고: 여기서부터는 항상 수학적 계산이 이루어지며 결과는 배열에 불과하고 투영 맵은 시각화일 뿐입니다.

계산 후 각 복셀은 0과 1의 두 가지 정보를 얻습니다. 0은 밝은 면이고 1은 어두운 면입니다.

그런 다음 UV 변환을 통한 매핑 시각화로 돌아갑니다.

얼굴이기 때문에 512의 복셀 해상도를 사용했습니다.

얼굴은 256 해상도에서는 충분하지 않습니다(하지만 모바일에서는 128까지 끌어올렸기 때문에 제대로 표현하려면 컨택트 섀도우의 도움이 필요합니다).

최소 해상도는 64개에 불과해 완전히 부적절합니다.

섀도 매핑과 원본 매핑을 비교하면 위치가 여전히 정확하고 앞머리 투영이 완료되었음을 알 수 있습니다.

다음 단계는 데이터 처리입니다. 이제 세 개의 부동 소수점 숫자, UV의 복셀 블록의 XY 좌표 및 0과 1 정보를 포함하는 배열을 계산했습니다.

처리된 데이터 정보를 가상 섀도 맵으로 변환한 다음 앤티앨리어싱을 블러 처리해야 합니다(샘플링 전에 앤티앨리어싱을 수행해야 합니다).

다음 장에서 설명하겠습니다, 피곤해서요.