image
R[이미시브], G[알파], B[?]

서론

바닥이 부서지는 느낌을 줄 때 역시 데칼이 있어야한다. 실제로 매 바닥에 카오스 등 물리를 쓸 수도 없는 노릇이니까... 따라서 바닥을 부수는 데칼이 어떻게 생기는지 알아보자. 위의 텍스처는 상당히 감이 없는데, 일단 열심히 그린거니까 지금은 이걸로 테스트하고, 나중에 개선해보는 것으로 하자.

RGB 패킹

가장 위의 이미지처럼 먼저 크랙을 그린 뒤, R채널에서는 중앙에 빛이 날 부분을 덧칠하고 바깥쪽을 지워서 중앙부분을 강조한다. G채널에서는 전체적으로 블러를 먹인 뒤 레이어를 합쳐서 실제로 그린 크랙 외곽부분에도 은은하게 빛나는 느낌을 준다. B채널은.. 굳이 안써도 되는듯?

노말맵

단순히 위의 텍스처들로만 배치를 하면 그냥 땅 위에 이상한 선들이 그려진 것 뿐이다. 그래서 부서진 바닥의 느낌을 주기 위해 땅이 아래로 파인 느낌을 줘야한다. 그렇다면, 당연히 노말맵이다.
image
G채널을 이용해 만든 노말맵
이미 노말맵만 봐도 알 수 있지만, 사실 크랙이 아니라 무슨 거미줄? 같은 느낌이다..

디퍼드 데칼

디퍼드 렌더링이 생각나게 하는 디퍼드 데칼인데, 실제로 디퍼드 렌더링 단계에서 작동한다. 기본적으로 디퍼드 렌더링에서 포워드 렌더링과의 가장 큰 차이점이 무엇인가? G-Buffer이다. 최종 렌더링 이전에 컬러, 메탈릭, 러프니스 등.. 렌더링에 필요한 데이터들을 모두 지버퍼에 담아놓고 마지막에 컴포지팅 하는 것이다. 포워드 렌더링 시절의 데칼은 상당히 무거운 작업이었지만, 디퍼드 렌더링의 데칼은 렌더링 방식의 구조적 장점으로 인해 가벼운 작업으로 변했다. 뭐 그건 이쪽 아티클에서 그렇게 중요한 내용은 아니니까 대충 넘어가고...
image
언리얼 엔진 에디터 Buffer Visualization > Overview
포워드 렌더링에서는 이미 있는 오브젝트 위에 데칼 오브젝트를 새로 만들었다면, 디퍼드 렌더링에서는 데칼 위치의 픽셀 정보를 덮어씌운다고 생각하면 된다. 그래서 렌더링 파이프라인에 자연스럽게 끼기 때문에 조명효과나 그림자등이 자연스럽게 적용된다. 다만, G-Buffer 단계에서 작동하므로 최종 렌더링에 렌더되는 반투명 객체 위에는 적용되지 못한다.

구조

image
바닥 크랙의 구조적 특징은 ① 주변과 다른 바닥 ② 발광 없는 크랙(G) ③ 발광 있는 크랙(R) 으로 나눠질 수 있겠다. 먼저, 주변과 다른 바닥은 바닥이 실제로 손상되서 주변과 다르다는 느낌을 준다. 노멀을 섞어서 사용하는 것으로 해결한다. 크랙의 발광 여부는 중심에서 멀어지면 점점 발광이 약해지게 구성한다. 너무 밋밋하면 좀 아쉽게 느껴질 수 있으니, 발광 위를 흐르는 FlowMap을 넣어서 좀 다른 느낌을 준다.

발광 (Emissive)

image
RGB Split
RGB 패킹한 크랙 텍스처를 가져와서 R채널로 발광값, G채널로 오퍼시티값을 만든다. R채널이 G채널보다 중앙이 강하기 대문에 발광값에 대한 채널로 사용된다. 이 때, 노멀값에 따라서 바위의 외곽선이 빛을 많이 반사할 수 있다. 바위에서 광이 나면 방금 부서진 느낌이 약해지므로(실제 바닥 재질에 따라 다르겠지만), 크랙 값에 1-x를 적용해서 크랙이 진한곳은 specular가 0이 되도록한다. ※ Specular는 정반사값.
image
Procedural Opacity Round
외곽을 부드럽게 깎아주는 오퍼시티 마스크를 사용해서 데칼이 외곽에서 날카롭게 끊어지지 않게 만든다.
image
Bump UV
Bump는 빛의 음영을 변경해서 표면의 질감을 표현하는 매핑방식이다. 범프값이 높을수록 위로 튀어나온 느낌을, 낮을수록 아래로 가라앉은 느낌을 준다. 단, 실제 오브젝트를 변경하는 것이 아니고 보는 방향에 따라 그리는 UV를 바꾸는 방식이기 때문에 수치가 과할 경우 텍스처를 망가뜨린다. 여기서는 SphereMask를 이용하여 중앙에서 외곽으로 갈수록 Bump의 영향이 약해지도록 만들고, Opacity도 적용해서 오퍼시티값에 따라 범프의 영향이 변경되도록 했다.※ 범프의 값은 -1 ~ 1를 벗어나면 과하게 적용된다.

재질 (BaseColor, Normal)

image
Base Color
베이스 컬러는 간단하다. 기본적으로 데칼은 Translucent와 같은 반투명 객체로 작동하므로 투명하다. 특히, 위에서 본 바와 같이 크랙부분과 오퍼시티 마스크 부분만 오퍼시티가 적용되기 때문에, 크랙과 연관이 없는 범위는 자동적으로 투명하다. 따라서, 크랙과 크랙 주변(오퍼시티 마스크가 영향을 주는)에 주변 바닥과 다른 재질을 주기 위한 바닥 텍스처를 사용한다. 이 때, 주변 바닥과의 색감을 맞추기 위해 ScreenColor 값을 변수로 줘서 톤을 맞출 수 있도록 한다.
image
노말
노말도 간단하다. 크랙의 효과를 보여주는 크랙 노말 부분만 범프를 적용해준다. 범프는 실제로 파인 느낌을 줘야하는 크랙 노말과 크랙 텍스처에만 적용된다. 바닥 노말은 바닥 텍스처와 동일한 레퍼런스를 사용해서 바닥의 노말 효과를 준다. Flatten은 노말의 강도를 조절하는 머티리얼 펑션이다. 추가적으로, 노말간의 블렌딩은 다른 색 블렌딩처럼 보간이나 곱하기를 사용할 경우 의도하지 않은 결과가 나올 수 있으므로, Blend Angle Corrected Normals 펑션을 사용하여 부드럽게 섞어준다.

발광 플로우맵

image
약식 플로우맵
퀄리티를 위해서는 UV를 변경하는 FlowMap과 실제 텍스처를 다르게 쓰는 것이 더 좋을 수 있지만, 시각적으로 크게 티나지 않는 부분이기 때문에 동일한 텍스처를 사용한다. 발광부분이 그냥 빛나는 것이 아니라, 꿀렁이는 흐름이 지나가면서 빛나는 느낌을 준다.

주의할 점.

image
Ground Crack VFX Texture 구글 검색 결과
먼저, 위 이미지들처럼 충격이 가해진 지점 과 주변으로 퍼진 힘의 방향, 기운의 느낌이 잘 살아야한다. 의도에 따른 힘의 밸런스? 대칭성? 그런게 있어야한다는 의미이다.
image
내가 그린 텍스처를 보면 3시, 7시 방향으로 파장이 치우쳐져 있고, 크랙 자체가 좌우로 세고 상하로 약하다. 중심부에서도 2시~3시 방향으로 쏠린 느낌이 있다. 그리다보니 뭔가 좀 이상해서 수정하다보니 이렇게 된건데, 레퍼런스를 두고 그리도록 하자...