Ring Shader – Unreal decal


📌 언리얼 엔진에서 링 셰이더를 이용한 데칼 VFX를 제작하는 핵심 과정은 무엇인가요?

월드 포지션과 액터 로케이션의 거리값을 이용해 원형 그라데이션을 만들고, 이를 데칼 머티리얼에 적용하여 시간에 따라 퍼져나가다 폭발하는 링 효과를 제작하는 것이 핵심입니다.

💡 데칼 VFX가 DepthFade나 PostProcess 방식보다 유리한 점은 무엇인가요?

데칼은 면의 흐름과 상관없이 띠의 두께가 일정하게 유지되며, 개별 오브젝트마다 효과를 제어하기 용이하여 여러 개의 링 효과를 독립적으로 표현할 수 있습니다.

언리얼 엔진에서 링 셰이더를 활용해 폭발 효과를 만드는 핵심 공식을 10분 만에 배울 수 있습니다. 데칼을 이용해 어떤 오브젝트에도 일정한 두께의 링 효과를 적용하고, 블루프린트로 타이밍과 속도까지 완벽하게 제어하는 실전 팁을 얻어가세요. VFX 제작의 효율성을 극대화하고 싶다면 놓치지 마세요!

1. 언리얼 엔진 링 셰이더를 활용한 폭발 효과 제작

언리얼 엔진에서 링 셰이더와 블루프린트를 활용하여 폭발 시 링 효과가 점점 빨라지다가 터지는 VFX를 제작하는 방법을 설명한다.

1.1. 데칼 방식과 댑스페이드 방식의 차이점

  1. 댑스페이드(DepthFade) 방식의 문제점
    1. 메시를 이용한 효과로, 메시가 겹쳐지는 부분에서 띠가 가늘어지는 문제점이 발생한다. 
  2. 데칼(Decal) 방식의 장점
    1. 면의 흐름(수직, 수평 등)과 상관없이 띠의 두께가 일정하게 유지되는 장점이 있다. 
    2. 따라서 본 영상에서는 데칼 방식을 사용하여 띠 효과를 제작한다. 

1.2. 링 셰이더 머티리얼 제작

  1. 머티리얼 설정
    1. 머티리얼 도메인을 서피스(Surface)가 아닌 디퍼드 데칼(Deferred Decal)로 설정한다. 
    2. 투명도를 지원하기 위해 블렌드 모드를 트랜슬루센트(Translucent)로 변경한다. 
  2. 띠 효과 원리 이해
    1. 띠 효과는 액터의 로케이션으로부터 면의 방향과 상관없이 항상 일정한 거리의 그라데이션을 만드는 것이 핵심이다. 
    2. 이를 위해 셰이더가 뿌려질 공간의 월드 포지션(World Position) 값과 액터의 로케이션(Location) 값이 필요하다. 
    3. 액터 로케이션(시작점)에서 월드 포지션(끝점)을 빼서 벡터 방향을 얻고, 이 벡터의 길이(Length)를 알아내어 거리값을 계산한다. 
  3. 거리값 기반 그라데이션 생성
    1. 월드 포지션에서 액터 로케이션을 빼고, 그 결과를 랭스(Length) 노드로 변환한다. 
    2. 이 값을 이미시브 컬러에 연결하면, 가운데는 거리값이 0에 가까워 검은색이고 바깥으로 갈수록 값이 증가하는 원형 그라데이션이 생성된다. 
  4. 띠 형태 만들기 (중앙 비우기)
    1. 원형 그라데이션의 안쪽을 비우기 위해 서브트랙트(Subtract) 노드를 사용하여 일정한 거리값(예: 100 또는 200)을 빼준다. 
    2. 이 비어 있는 영역이 시간에 따라 작아졌다 커지도록 타임(Time) 노드와 프랙(Frac) 노드를 활용한다. 
      1. 타임 스케일(Time Scale) 스칼라 파라미터를 만들어 속도를 조절한다. 
      2. 타임 노드는 0초부터 계속 증가하므로, 프랙 노드를 사용하여 값을 0에서 1 사이로 반복되게 만든다. 
    3. 멀티플라이(Multiply) 노드를 사용하여 링 맥스 레디우스(Ring Max Radius) 스칼라 파라미터(기본값 128)로 거리값을 조절하고, 이를 앞서 만든 월드 포지션 길이값에서 빼주면 원이 서서히 커지는 효과를 볼 수 있다. 
  5. 띠의 부드러운 경계 및 두께 조절
    1. 스무스 스텝(Smooth Step) 노드를 사용하여 값의 변화를 급격하게 만들어 띠의 경계를 부드럽게 처리한다. 
    2. 맥스(Max) 값에 띠의 두께(예: 10유닛)를 지정하여 폭을 조절한다. 
    3. 원 마이너스(One Minus) 노드를 사용하여 값을 뒤집어 원하는 띠 형태를 만든다. 
  6. 절댓값(Abs)을 이용한 띠 형태 완성
    1. 현재 그래프는 0보다 작은 구간이 존재하는데, 이 구간은 보이지 않아야 한다. 
    2. 앱솔루트(Abs) 노드를 사용하여 마이너스 값을 절댓값으로 변환하면 V자 형태의 그래프가 된다. 
    3. 이 V자 그래프에 스무스 스텝을 적용하면 직선이었던 그래프가 부드럽게 바뀌며, 맥스 값으로 띠의 폭을 조절할 수 있다. 
    4. 마지막으로 원 마이너스로 값을 뒤집으면 얇은 띠 형태만 보이게 된다. 
  7. 최종 머티리얼 연결
    1. 기본 거리값에서 시간에 의해 빠지는 부분을 절댓값으로 변환한 후 스무스 스텝에 넣어 오파시티(Opacity)에 연결한다. 
    2. 벡터 파라미터(Vector Parameter)를 이용하여 링 컬러(Ring Color)를 만들고, 이미시브 컬러에 연결하여 붉은색 계열(Red 10, Green 2, Blue 1)로 설정한다. 
    3. 스무스 스텝의 맥스 값을 링 위스(Ring Width) 스칼라 파라미터로 지정하여 띠의 폭을 조절할 수 있게 한다 (예: 10유닛). 
    4. 머티리얼을 적용한다. 

1.3. 데칼 액터 배치 및 확인

  1. 데칼 액터 배치
    1. 레벨에 데칼 액터(Decal Actor)를 배치하고, 제작한 머티리얼을 데칼의 머티리얼 항목에 연결한다. 
    2. 이렇게 하면 시간에 따라 링 형태로 퍼져나가는 효과를 확인할 수 있다. 
  2. 데칼 효과의 일관성 확인
    1. 오브젝트가 어떤 방향으로 휘어져 있거나 기울어져 있거나 수직으로 되어 있더라도 링 효과가 일정하게 적용되는 것을 확인할 수 있다. 

2. 블루프린트를 이용한 링 효과 제어 및 폭발 연동

수류탄 오브젝트에 링 효과를 적용하고, 블루프린트를 통해 링의 속도를 조절하며 최종적으로 폭발 효과와 연동시키는 과정을 설명한다.

2.1. 수류탄 오브젝트에 데칼 컴포넌트 추가

  1. 수류탄 오브젝트 준비
    1. 메시 AI를 통해 제작된 수류탄 오브젝트를 언리얼 엔진으로 임포트한다. 
  2. 블루프린트 변환 및 데칼 컴포넌트 추가
    1. 임포트된 오브젝트를 블루프린트(Blueprint)로 변환하고, 변환된 블루프린트에 데칼 컴포넌트(Decal Component)를 추가한다. 
    2. 데칼 컴포넌트의 디테일 창에서 데칼 사이즈(Decal Size)를 큐브 형태로 지정하고, 링의 폭 값보다 크게 설정한다 (예: 16유닛). 
    3. 제작한 링 머티리얼을 데칼 컴포넌트에 연결한다. 
  3. 블루프린트 적용 확인
    1. 컴파일 후 레벨로 돌아가면, 수류탄이 어느 위치나 방향에 배치되더라도 링 효과가 일정하게 적용되는 것을 확인할 수 있다. 

2.2. 블루프린트에서 링 속도 조절 및 폭발 연동

  1. 다이내믹 머티리얼 인스턴스 생성
    1. 크리에이트 다이내믹 머티리얼(Create Dynamic Material Instance) 노드를 사용하여 동적으로 머티리얼을 제어할 수 있도록 한다. 
    2. 패런트 에셋(Parent Asset)은 제작한 M_Decal_Ring 머티리얼로 지정한다. 
    3. 리턴 밸류(Return Value)를 링 매트(Ring Mat)라는 이름의 변수로 승격시켜 다이내믹 인스턴스로 설정하고, 이를 데칼 컴포넌트의 셋 머티리얼(Set Material)에 연결한다. 
  2. 파티클 스폰 여부 제어 변수 생성
    1. 이즈 파티클 스폰(Is Particle Spawn)이라는 불리언(Boolean) 변수를 생성한다. 
    2. 브랜치(Branch) 노드를 사용하여 이 변수가 펄스(False)일 때만 다음 로직이 실행되도록 분기 처리한다. 이는 파티클이 한 번 스폰된 후 계속해서 스폰되는 것을 방지하기 위함이다. 
  3. 타임라인을 이용한 링 속도 조절
    1. 애드 타임라인(Add Timeline) 노드를 추가하여 타임 스케일(Time Scale)을 조절한다. 
    2. 타임라인 내부에 플로트 트랙(Float Track)을 추가하고, 키를 설정하여 시간이 지남에 따라 값이 0에서 4배까지 증가하도록 한다 (예: 1초일 때 0, 4.5초일 때 4). 
    3. 키 값들을 오토(Auto)로 변경하고 핸들을 조절하여 증가 속도가 점점 빨라지도록 커브를 조정한다. 이때 값이 0보다 작아지지 않도록 주의한다. 
    4. 타임라인의 플레이(Play) 핀을 셋 스칼라 파라미터 밸류(Set Scalar Parameter Value) 노드에 연결한다. 
    5. 링 매터리얼 변수를 가져와 셋 스칼라 파라미터 밸류 노드의 타겟에 연결하고, 파라미터 이름은 머티리얼에서 설정한 타임 스케일로 지정한다. 
    6. 타임라인의 뉴 트랙(New Track) 값을 셋 스칼라 파라미터 밸류의 밸류(Value)에 연결하고, 실행 핀은 업데이트(Update)에 연결한다. 
  4. 폭발 파티클 스폰 및 액터 파괴
    1. 타임라인의 피니시(Finished) 노드에서 핀을 빼서 스폰 시스템 앳 로케이션(Spawn System at Location) 노드를 연결한다. 
    2. 나이아가라 시스템(Niagara System)으로 미리 임포트해 둔 NS_Sub_Explosion_Large_001 (무료 에셋)을 지정한다. 
    3. 스폰 위치는 액터의 로케이션(Location)으로 설정한다. 
    4. 파티클이 스폰된 후 이즈 파티클 스폰 변수를 트루(True)로 설정한다. 
    5. 마지막으로 디스트로이 액터(Destroy Actor) 노드를 셀프(Self)로 연결하여 수류탄 액터를 파괴한다. 
    6. 컴파일하고 저장한다. 

2.3. 최종 결과 및 응용 가능성

  1. 최종 결과
    1. 플레이 시 링 효과가 점점 빨라지다가 폭발하며 액터가 사라지는 것을 확인할 수 있다. 
  2. 링 셰이더 공식의 응용
    1. 거리값(랭스)을 이용한 그라데이션, 타임을 이용한 원형 확산, 특정 값들을 빼서 중앙을 비우고 절댓값으로 띠 형태를 만드는 이 공식은 다양한 곳에 응용 가능하다. 
    2. 예를 들어, 포스트 프로세스(Post Process)에서 소나 형태의 맵 전체에 퍼져나가는 효과를 만들 때 활용할 수 있다. 
  3. 포스트 프로세스 방식의 한계 및 데칼 방식의 장점
    1. 포스트 프로세스 방식은 여러 개의 링을 서로 다른 위치에서 다른 타이밍으로 제어하기 어렵다는 단점이 있다. 
    2. 반면 데칼 형태로 만들면 댑스페이드 방식의 면이 얇아지는 문제점을 해결할 수 있고, 개별 오브젝트마다 효과를 넣어 따로따로 제어하기 편리하다. 

[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: 빛이 카메라 렌즈에 반사되어 생기는 빛나는 효과.