Jasontreks Blog

DM 보내기

메세지는 텔레그램 챗봇에 의해 익명으로 전달됩니다. 답장을 받으려면 이메일을 입력하세요.
Send

화염 필드와 독 구름

본격적인 이펙트 제작 단계에 들어서면서 가장 먼저 화염 필드를 제작하였다.

화염 필드

게임에서 화염을 표현하는 전통적인 기법은 노이즈 텍스처같이 불규칙적인 패턴의 텍스처를 한 방향으로 움직이면서 마스킹과 함께 페이드를 적용하고 발광 효과를 부여하는 것이다.

Abstract art
화염을 표현하기 위한 노이즈 텍스처

이 텍스처를 하단에서 상단으로 갈수록 페이드되도록 그라데이션 텍스처를 UV.y값에 따라 샘플링하고 위 방향으로 일정 속도로 이동시키면 이러한 모습이 나온다.

그런 다음 화염의 하단과 양쪽 끝을 부드럽게 다듬기 위해 아래와 같은 페이드 마스크 텍스처를 이용한다.

Abstract art
부드러운 마감을 표현하기 위한 페이드 마스크 텍스처

그러면 아래와 같이 화염이 다른 사물이나 환경과 함께 표현되는데 있어 이질감이 없다.

이제 화염의 색상을 표현해본다.

이대로는 부족하다. 격렬한 화염보다는 잔불에 남아있는 뜨거운 기운이라고 인식된다.

부족한 화염 질감을 보완하기 위해 그라데이션 텍스처를 추가로 사용한다.

이 텍스처는 샘플링되어 픽셀당 하나의 정수로 구해진다. 픽셀이 검정색에서 흰색으로 갈수록 0에서 1로 가까워지는 정수이다.(흑백을 띄는 모든 마스킹, 노이즈 텍스처가 쉐이더에서 이런 원리로 활용된다.)

그렇게 얻어진 정수값을 단순히 현재 텍스처 샘플링 값에 더한다. 더한 만큼 색상의 RGB값이 커짐으로써 화염의 채도와 불투명도를 높인다.

그라데이션을 조절하여 원하는 스타일로 화염 내부로 갈수록 색이 밝아지는 현실적인 화염 질감을 연출할 수 있다.

그리고 크기를 늘리고 늘어난 크기에 따라 텍스처 비율 등을 조절하면 아래와 같이, 게임에 당장 넣어도 손색없는 이상적인 화염 필드가 완성된다.

하지만 여기서 끝이 아니다. 어느 지점에 이런 화염이 뚝 하고 생겨난다면 부자연스러울 것이다. 즉 발화 과정이 표현되어야 한다.

이를 위해 그라데이션 텍스처를 하나 더 추가하고, 샘플링한 값이 1에 가까울수록 화염 색상을 투명하게 한다. 즉 동적인 페이드 마스크 텍스처를 만드는 것이다.

키프레임 애니메이션을 제작하고 화염 필드 발생 시 이벤트에서 재생시키면 된다.

이런 화염 필드를 제작하기 위한 전체 쉐이더는 아래와 같다. 상당히 복잡해 보이지만 여러 텍스처를 샘플링하여 더하고 곱하고 빼는 반복 작업이 대부분이다.

최종적으로 게임에서 보여지는 모습은 아래와 같다.

독 구름

독 탄이 탄착했을 때 독가스가 뿜어져 나오는 현상을 표현하기 위한 탄착 이펙트이다. 게임에서 이펙트를 표현하는데 사용되는 게임 엔진의 기능인 파티클 시스템(Particle System)을 이용해 이 이펙트를 제작하였다.

파티클 시스템은 2D 그래픽 조각(파티클)을 물리학에 기반한 시뮬레이션으로 위치, 크기 등을 변형시켜 이펙트를 표현하는 기법으로, 전통적이면서 현재까지도 거의 모든 게임에서 이펙트를 제작하는 방식이다.

파티클 시스템 방식에서 독 구름 이펙트를 만들기 위한 순서는 아래와 같다.

  1. 파티클 디자인

    이펙트를 구성하는 최소 입자인 파티클을 디자인한다. 연기라면 연기 조각, 스파크라면 불똥 조각 등이다.
  2. 물리 현상 정의

    파티클들이 어떠한 물리 현상으로 표현되는지 정의한다. 한 지점에서 터져 나오는지, 위에서 떨어지는지, 밝게 빛나는지 등이다.
  3. 강도 조절 및 최적화

    물리 현상이 적절하고 의도된 형태로 이루어지도록 조절한다. 발산 강도, 중력 세기 등 수치를 세밀하게 조절해가며 가장 적절한 형태를 찾는다.

먼저 독 구름의 파티클은 아래와 같다. 파티클은 간단해도 좋다. 파티클 하나만 보여지는 것이 아니라 많은 수가 렌더링되어 물리 현상을 따를 것이기 때문에 시각적 경험을 보완할 수 있다.

이 이펙트는 한 지점에서 터져 나오는 물리 현상으로 정의할 것이다. 따라서 Initial Velocity 및 발산 방향을 정의한다.

또한 독 구름 입자는 무겁지 않기 때문에 중력은 0으로 하고 기타 가속도는 주지 않으며, 대신 파티클들이 살짝 공전하며 퍼지도록 Orbit Velocity를 부여한다.

각 입자가 무작위 크기로 팽창하도록 Scale 변화도 정의한다. 이때 크기 변화가 선형적으로 변하기보단 커브에 따라 자연스럽게 변하는 것이 보기 좋으므로 2D 커브도 추가한다.

최종적인 모습은 아래와 같다.

이 이펙트를 하나 더 복제해 반대 방향으로 퍼지도록 배치하면 원하는 독 구름 이펙트가 연출된다.

게임 내에서 보여지는 모습은 아래와 같다.

다음 포스트

발사 이펙트, 탄환 궤적 이펙트