어제 Texel Density와 Normal Map의 블록화의 관계성에 대해서 글을 올렸었는데, 사실 텍셀을 충분히 확보하려면 텍스처를 크게 써야 한다는 것 때문에 일정 크기 이상으로 텍스처를 쓰지 못하는 상황도 충분히 발생한다. 어쩔 수 없이 블록화 아티팩트를 감내해야 할 수도 있는 것이다.
2025.05.24 - [TA] - Texel Density의 진정한 의미 : 3D 아트 리소스 제작의 코어
다음과 같이 상자가 있다고 치자.
왼쪽이 하이폴, 오른쪽이 로우폴 모델링이라고 쳤을 때, Mikkt space 조건에 따라 Vertex 별로 TBN공간이 독립적으로 생성될 수 있도록 UV Shell 1개당 Smoothing Group을 한 개만 할당한다고 치자.
상자의 UV는 다음과 같이 전개도 처럼 펴거나, 아니면 각이 90도로 꺾이는 부분을 분리해서 펴거나 둘 중 하나를 선택할 수 있다.
그후 Normal Map을 Bake하면, 두 오브젝트의 Normal Map이 살짝 다른 형태로 보여지는 것을 알 수 있다.
섭페의 뷰포트 상에서 보여지는 모습은 동일하다.
하지만 이 normal map을 엔진에 가져갔을 시에는 차이가 발생한다.
텍스처 압축시 이 블록 아티팩트는 색상 변화가 많은 부분에서 특히 도드라진다. 왜냐하면 압축을 하지 않았을 때는 부드럽게 연속적으로 이어지던 픽셀들이 블록으로 묶이기 때문이다.
즉 텍셀 밀도를 충분히 많이 확보했음에도 도드라지는 블록화 아티팩트는 low pol 메쉬의 Vertex Normal 값이 너무 극명하게 변하기 때문에 이를 교정하기 위해서 Normal Map의 표면상에 과도한 Gradient가 생기게 되고, 실제로 highpol 메쉬에서 표현해준 묘사가 없는 단순한 평면이 위 이미지와 같이 블록처럼 보이게 되는 현상이 발생한다.
그러므로 하이폴리곤 모델링과 최대한 Vertex Normal의 방향이 일치할 수 있도록 low polygon modeling도 수정해줄 수 있다면 gradient가 normal map에서 나타나는 빈도를 줄일 수 있고, 블록화 아티팩트도 좀 더 보기 좋은 방향으로 다듬을 수 있다는 얘기다.
결국 결과적으로 게임 엔진 상에서 오브젝트의 시각적 품질을 향상시키기 위해
3D 모델러, 아티스트는 UV 뿐만 아니라 Vertex Normal도 컨트롤할 수 있어야 한다고 생각한다.
물론 이렇게 해서까지 블록화 아티팩트를 굳이 없애야 하는가? 라고 묻는 사람도 있을 것이다. 당연히 이 Cube의 케이스에서는 블록화 아티팩트를 최소화하려고 UV를 저렇게 면마다 펴버리면 Vertex 개수가 크게 증가할 것이기 때문에, Vertex 개수를 희생하고 Vertex Normal을 수정하는 등의 작업으로 얻을 이득이 별로 크지 않다고 판단한다면 그냥 이러한 블록화 아티팩트가 Bake workflow 상에서 반드시 발생할 수 밖에 없다는 점을 인지하고 딱히 해결하려 들지 않으면 된다.
하지만 하다보니 그렇지가 않더라. 이런 수정 작업은 시간이 걸리고 하기 싫은데, 블록화 아티팩트도 용납할 수 없는 모순적인 상황을 마주한다. 그냥 이걸 어떻게 해야겠다는 생각은 딱히 없고, 단순한 신세한탄이다.
'TA' 카테고리의 다른 글
[Unity] Skeletal Animation 동작에 대하여 (0) | 2025.02.28 |
---|---|
(작성중)[Unity] Custom Shadow System 제작하기 (3) - Shadow Map 샘플링 (0) | 2025.02.25 |
[Unity] Custom Shadow System 제작하기 (2) - Directional Light Shadow Map 그리기 (1) | 2025.02.15 |
(작성중) [Unity] URP환경에서 GPU Instancing Tool 만들기 (0) | 2025.01.20 |
[Unity] Custom Shadow System 제작하기 (1) - 커스텀 그림자 제작의 필요성 (0) | 2024.12.30 |