서론
Dust 효과, 먼지 효과는 약간 밋밋하게 날카롭게 남을 수 있는 외곽선 부분을 라이팅을 적용하면서 뭉개주는 효과를 가진다. 또한, 이펙트가 사라진 뒤에도 약간 남아서 여운을 남겨준다. 또한, 퍼져나가는 먼지 스프라이트에 노멀을 주면서 좀 더 이펙트에 입체감? 볼륨감?을 줄 수 있다. 위의 영상 예시에서도 카메라가 움직여버려서 조금 애매하긴한데, 먼지가 안쪽의 푸른 라이트를 같이 받으면서 초반에 퍼져나갈 때 좀 더 형태감이 사는 느낌을 준다. 계속해서 보고 있으면 점점 조잡해보이니까 잠깐만 보고 넘어가자 아무튼, 먼지 효과를 구성하는 머티리얼을 살펴보고, 좀 더 볼륨감과 사라질 때 자연스러운 느낌을 주기 위해서 어떤식으로 파라미터를 조정해야될 지 알아보도록 하자.
구조

R,G,B 채널에 서로 다른 PerlinNoise 형태의 노이즈를 그려 패킹한 텍스처를 플로우맵으로 사용하고 있다. 이 때,
ScaleUVsByCenter라는 머티리얼 함수를 사용한다. 이 함수는 Texture Scale에 입력된 값에 따라서 텍스처의 크기를 변경하는 데, 변경할 때 텍스처의 중앙을 중심으로 Scale을 적용한다. ※ Texture Coord 는 좌측 상단 (0,0)에서 우측 하단 (1,1)로. 좌표 축이 +X, -Y 방향으로 가기 때문에 UV에 타일링 하듯이 Scale을 적용하면 확대 축소 과정에서 좌측 상단 부분으로 카메라가 이동한다. 따라서, 먼지의 플로우맵을 실시간으로 조정하려면 중앙이 기준이 되도록 변경해야한다. 같은 수치 이용해서 한 것인데, 유효 Range 차이가 좀 있어서 연출의 느낌이 다르긴하다. 하지만 그것을 고려하고 보더라도, 우측 것은 형태가 계속 바뀌고 좌측 상단으로 빨려가는 느낌이 있어서, 좌측 텍스처를 활용하는 것이 맞다는 것을 알 수 있다.
형태감
먼지 레퍼런스로는 이런 동작을 기대할 수 있겠다. AI의 도움을 받아 후디니에서 만든 먼지의 느낌은 아래와 같다.

대충 직관적으로 생각했을 때 (물리 못함), 먼지가 퍼지는 구조는 다음과 같을 것이라고 생각한다. 강력한 힘이 지나가면서 그 힘이 먼지를 밀어내고, 밀어낸 먼지가 다시 또 그 뒤의 공기를 밀어내고, 그 공기가 다시 밀어내고... 밀어낸 공기와 힘의 옆각도 쪽으로 퍼져나간 힘이랑 만나서 옆으로 또 퍼지고.. 크게 중요한 내용은 아니다.
이 때, 만들어야하는 먼지의 구성은 이런 "가만히 있던 먼지가 뚫림"이 아니라, 뚫렸을 때 주변으로 퍼져나가는 먼지를 구현하는 것이기 때문에 이 다음 부분을 더 살펴보자.

이런식으로, 지나간 힘의 방향 그 옆쪽으로 퍼지는 먼지들은 바깥쪽으로 나가면서 살짝씩 말려들어가는 모습을 보인다. 힘이 가해진 방향에서 반대로 퍼져나가다가, 안쪽으로 살짝 말리는 듯 하다가도 바깥쪽으로 향한다.
주요 특징은 대충 "살짝 안쪽으로 말려들어감", "점점 부피가 커짐(밀도는 낮아짐)" 정도로 볼 수 있겠다.
적용
이를 어떻게 적용해야할까? 실제로 몇몇 스프라이트들에게 Wind Force나 Curl Noise등을 이용해서 안쪽으로 향하게 한다? 이거는 조금 위험할 수 있다고 생각한다. 시뮬레이션을 보면, 전체 먼지 중에서 말려들어가는 느낌을 주는 것은 뒷 배경이 뚫려 보일 정도로 아주 일부이다.

그렇기 때문에 스프라이트의 크기를 키우는 방식으로 이를 처리한다. 바깥으로 퍼져나가는 힘이 거의 줄었을 때, 부피가 커진다면 스프라이트 범위의 일부가 다시 안쪽으로 들어가는 느낌을 줄 수 있지 않을까? 좌측에 그린 것 처럼, Sprite의 크기를 많이 키운다면 안쪽으로 이동하는 것처럼 보이는 먼지가 조금 생길 것이기 때문이다.
단순히 Scale Sprite Size와 약간의 Force
{0,0,20} 정도를 같이 주면서 위로 떠오를 수 있게 해줬다. 단순히 SpriteSize를 크게 키우는 것 만으로는 아주아주 부자연스러워 보여서 크게 키우지 못했다. 따라서, 이전에 위에서 살펴봤던 UV에 Perlin 기반 Noise를 적용하는 것으로 UV에서 먼지 크기를 조절하면서 Sprite 크기를 같이 조절해보자.
보면 알 수 있듯이, dist_scale 값을 낮게줄수록 먼지가 자잘해지고, 높일수록 커진다. 그리고, dist_weight값을 0이면 원본 텍스처가 나오고, 커질수록 점점 플로우맵 영향을 받아 자잘해진다. 따라서, 먼지의 크기를 키우는 scale 값을 적당히 키우면서, 너무 먼지의 형태가 유지되면서 커지는 느낌을 주지 않도록 dist weight도 같이 키운다.

지금보면 좌측 검은 사각형 형태에 일치하는 부분에 사각형을 그렸으면 좀 더 이해가 편했겠다 싶은데.. 아무튼, dist weight를 올려서 전체적으로 좀 더 구멍이 숭숭 뚫린 느낌이 되었고, dist scale를 올려서 크기가 커졌다. 여기에 오퍼시티 조절까지 더해져서 좌측의 먼지보다 오른쪽의 먼지가 더 퍼져있다는 느낌을 준다. 여기서
Scale Sprite Size를 넣어서 스프라이트 자체의 크기를 조절해주고, 그에 맞춰서 weight,scale를 더 조절한다면 퍼지는 느낌이 더 잘 들것이다.노멀
대략적인 형태를 잡았으니, 노멀을 적용해보자.

노멀은 빛을 반사할 방향을 가리키는 벡터이다. 노멀맵을 이용하면 평면에서도 빛을 반사할 방향을 변경해서 평면을 입체처럼 보이게 만들어 줄 수 있다. 따라서, 현재 먼지는 평면인데 유저를 늘 바라보고 있어서(빌보드) 입체를 흉내내고 있을 뿐이다. 여기서 더 입체 흉내를 잘 낼 수 있게 노멀을 적용해준다.

노멀 자체는 가운데에 보면 살짝 볼록 튀어나온 부분이 있다, 거기를 기준으로 가장 튀어나온 송곳같은 느낌으로 노멀맵이 작성되어져 있다. Weight는 이 노멀에 가해지는 플로우맵의 적용도에 영향을 주기 때문에 노멀의 적용 강도는 그대로인 상태이다(UV왜곡이 덜됐을 뿐). Weight를 0, 1로 번갈아가면서 변경하면 뷰포트상에서는 뭔가 색감이 확확 변한다는 느낌이 든다. 근데 사진으로 캡처해놓으니 큰 차이가 없어보인다. 대체로, W=1.0 쪽이 좀 더 밝은 느낌이 난다고 보면 되겠다. 노멀 플로우맵을 수정하면 막 엄청나게 큰 변화가 생기지는 않는다. 다만, 먼지의 형태가 유지되는 선에서 그림자가 움직이므로, 형태는 유지되는데 노멀의 Scale을 키우면서 바깥쪽으로 퍼져나가는 느낌을 줄 수 있다.
일부러 스프라이트가 메시처럼 느껴지는 것을 막기 위해 Rotation을 random(-5,5)를 걸어놨다. 이거 때문에 우측에서도 살짝 돌아가는 느낌이 있긴 한데, 결국 스프라이트 1개 전체가 이동하는 느낌이 난다. 반면에 좌측
Normal_Flow_Scale이 변화하는 경우, 스프라이트 1개 전체가 이동하는 느낌이 없어진 것은 아니지만, 그래도 뭔가 내부 먼지가 스스로 회전하는 느낌이 있다. 아주 미묘한 차이인데, 아무튼 좌측이 좀 더 낫다. Normal_Flow_Weight 도 같이 변화시키면 회전하는 느낌이 좀 더 추가되긴 하지만, Normal_Flow_Scale의 영향도 같이 늘어나기 때문에 의도와 다르게 좀 과하게 적용되는 느낌이 들 수 있다. 파라미터를 섬세하게 조절할 수 있다면 둘 다 건드려도 되지만, 간단하게 쓰려는 경우는 Weight는 고정한 뒤, Scale만 변경하는 것이 좋아보인다. 기존 더스트가 많이 이상하긴 했고, 새로운 것도 그렇게 깔끔한 느낌은 또 아니지만, 그래도 확실히 좀 개선된 느낌은 있다. 약간 자잘한 느낌이 있긴한데, 이 부분은 먼지 텍스처에 대한 flowmap의 weight를 상황에 따라 낮춰주면 다시 약간 블러링한 느김으로 바뀐다.
정리
DISTORTION WEIGHT,FLOW SCALE은 각 먼지가 얼마나 자잘한지를 결정한다.Dust Tex에 가하는 파라미터는 먼지의 형태를 변화시킨다.Normal Tex에 가하는 파라미터는 형태는 유지하고 그림자를 변화시킨다.