[CC] 유리창에서 데칼이 안 먹는 이유! #Unreal #rendering #material #shader

제가 운영하는 채널입니다. 많은 방문 부탁드립니다.

채널바로가기

📌 언리얼 엔진에서 반투명 오브젝트에 데칼이 적용되지 않는 이유는 무엇인가?

데칼은 사전에 배치된 오브젝트의 신 댑스 값을 이용하여 겹쳐진 영역에 배치되는 원리인데, 반투명 오브젝트는 신 댑스 값에서 빠지기 때문에 겹쳐진 영역을 구할 수 없어 렌더링이 불가능하기 때문입니다

💡 반투명 오브젝트에 데칼과 유사한 효과를 적용하는 방법은?

매쉬와 데칼 머트리얼을 혼합하여 사용하면 데칼을 적용한 것과 비슷한 느낌의 효과를 만들 수 있습니다

목차

이 튜토리얼은 언리얼 엔진에서 데칼이 반투명 오브젝트에 적용되지 않는 이유와 해결 방법을 설명합니다. 핵심은 데칼이 신 댑스(Scene Depth) 정보를 활용하여 렌더링되는데, 반투명 오브젝트는 신 댑스에 포함되지 않기 때문입니다. 해결책으로, 데칼 머티리얼을 메시(Mesh)에 직접 적용하는 방법을 제시하며, 이를 통해 데칼과 유사한 효과를 낼 수 있습니다. 이 튜토리얼은 언리얼 엔진에서 데칼을 효과적으로 사용하는 방법을 제시하여, 렌더링 문제를 해결하고 시각적 완성도를 높이는 데 도움을 줍니다.

1. 🪟 데칼이 반투명 오브젝트에 적용되지 않는 문제와 실질적 대안

  • 데칼은 포스터, 그래피티, 벽의 균열 등 배경을 자연스럽게 꾸미기 위해 자주 사용되는 시각적 효과다.
  • 그러나 데칼을 반투명 오브젝트(예: 유리창)에는 바로 적용할 수 없다는 문제가 있다.
  • 실제로 반투명에 적용된 것처럼 보여도, 이는 반투명 오브젝트가 아니라 바닥에 데칼이 적용된 경우다.
  • 이 문제를 해결하기 위해서는 매쉬와 데칼 머티리얼을 혼합해서 사용하는 전략이 필요하다.
  • 스태틱 매쉬(플랜)에 데칼용 머티리얼을 직접 적용하면, 데칼이 적용된 것과 매우 유사한 효과를 얻을 수 있다.

2. 🪟 데칼이 반투명 오브젝트에 적용되지 않는 근본적 이유

  • 데칼이 반투명한 질감에 적용되지 않는 이유는, 반투명 오브젝트가 신 댑스(Depth) 정보에 포함되지 않기 때문임을 확인할 수 있다.
  • 신 댑스는 카메라로부터 3D 오브젝트가 얼마나 멀리 떨어졌는지를 나타내는 값이며, 이 모드를 통해 버퍼 비주얼라이제이션에서 확인 가능하다.
  • 오페이크(Opaque)나 마스크드(Material Masked) 오브젝트는 신 댑스 값에 포함되기 때문에 데칼이 정상적으로 렌더링된다.
  • 그러나 트랜스루센트(Translucent), 즉 반투명 오브젝트는 신 댑스 값에서 제외되어 데칼의 겹치는 좌표 영역을 계산할 수 없어 데칼 적용이 되지 않는다.
  • 실험적으로, 데칼이 적용된 오브젝트를 허공에 배치하면 머티리얼만 적용된 경우와 다르게 데칼의 동작을 직접 관찰할 수 있다.

3. 🧩 매쉬 기반 데칼 적용과 G파이팅 문제

  • 트랜슬루센트(반투명) 오브젝트는 데칼의 바운딩 박스 범위와 무관하게 항상 렌더링되어 멀어져도 보인다
  • 트랜슬루센트 오브젝트의 두께가 거의 0에 가까워서 거리 변화가 시각적으로 잘 드러나지 않는다
  • 이미지가 반투명이고 글씨가 투명인 이유는 명확히 알 수 없어 추가적인 조사가 필요하다
  • 데칼 머티리얼을 매시에 적용한 경우와 일반 머티리얼을 적용한 기본 오브젝트를 비교하는 두 가지 예시가 있다
  • 트랜슬루센트 머티리얼과 오페이크(불투명) 머티리얼이 겹쳐 있으면 누가 먼저 렌더링될지 알 수 없어 G파이팅이 발생한다

4. 📝 데칼 처리 방식 및 추가 연구 방향

  • **오페이크(Opaque)**와 **데칼(Decal)**의 경우, 먼저 오브젝트를 그리고 그 위에 데칼을 덮는 명확한 순서로 인해 **깊이 파이팅(z-fighting)**이 발생하지 않는다
  • 데칼을 제한적으로 활용할 수 있으며, UV 정리에 신경을 써야 하지만 데칼을 전혀 사용하지 못하는 것보다는 낫다
  • 데칼 적용과 관련된 문제나 궁금증이 생길 경우, 이메일로 문의하면 된다

포스트 프로세싱(post processing)

포스트 프로세싱(Post-Processing)이란?

포스트 프로세싱은 렌더링 된 이미지나 영상에 후처리 효과를 적용하는 과정입니다. 리얼 타임 엔진에서는 이를 통해 게임이나 시뮬레이션의 비주얼 품질을 향상 시키는 데 큰 역할을 합니다. 렌더링을 통해 최종적으로 한 장의 이미지를 완성하게 되지만, 한 장의 이미지를 만드는데 필요한 다양한 데이터들을 생성하게 됩니다. 이렇게 생성된 다수의 이미지를 재 가공하기도 하며, 새로운 이미지를 생성해서 추가적인 효과를 만들게 됩니다.
 
마치 케이크라는 하나의 완성 품을 위해 빵에 크림을 두르고, 데코레이션이 겹겹이 올라가는 것과 비슷한 것이라고 보면 됩니다. 이러한 층층히 쌓이는 다양한 소스들을 렌더 패스라고 합니다. 컬러를 나타내는 BaseColor, 그림자만 나타내는 Shadow, 카메라로 부터 거리를 나타내는 Depth, 방향을 나타내는 World Normal 등 다양한 패스의 합성을 통해서 한 장의 이미지를 만들어 내게 됩니다. 

왜 포스트 프로세싱이 필요한가?

시각효과 : 기본 렌더링 설정에서 지원하지 않는 여러가지 시각효과들을 추가 할 수 있습니다. 모자이크 효과나 가려진 오브젝트에 비춰보이는 실루엣효과, 아웃라인을 그려주는 효과등 다양한 효과를 그릴 수 있습니다.
분위기 연출: 색조, 블러, 빛 효과 등을 컨트롤 하여 다양한 분위기 연출을 할 수 있습니다. 컬러 그레이딩과 같은 효과들을 이용하면 복잡한 셰이더의 개발없이도 손쉽게 조절이 가능합니다.

주요 포스트 프로세싱 효과

Bloom: 빛이 강한 부분이 주변에 퍼져 나가는 현상을 모방한 효과.
Depth of Field: 특정 거리에 있는 객체는 선명하게, 그 외의 거리에 있는 객체는 흐리게 보이는 효과.
Color Grading: 전체 씬의 색상을 조절하여 원하는 무드나 분위기를 연출하는 효과.
Ambient Occlusion: 코너나 간극에서 자연스럽게 발생하는 그림자 효과.
Motion Blur: 빠르게 움직이는 객체 또는 카메라의 움직임에 따라 발생하는 블러 효과.
Lens Flare: 빛이 카메라 렌즈에 반사되어 생기는 빛나는 효과.