플로우 필드(flow field)는 공간의 각 지점마다 "여기 있으면 이 방향으로 움직여라"는 벡터를 정의한 것입니다. 이 데모는 Simplex 노이즈 값 하나를 각도로 해석해서(angle = noise(x, z) * 2π) 방향 벡터를 만듭니다 — 노이즈가 부드럽게 이어지므로 인접한 두 위치의 방향도 크게 다르지 않아, 입자들이 서로 끊기지 않고 흐르는 것처럼 보입니다.
매 프레임 각 파티클 위치에서 그 지점의 노이즈 각도를 다시 계산하고 그 방향으로 한 걸음 전진시킵니다. three/addons/math/SimplexNoise.js를 CPU에서 매 프레임 수천 번 호출하는 방식이라, 파티클 수가 수만 개를 넘어가면 GPU 셰이더에서 노이즈를 계산하는 쪽(gpgpu 항목 참고)으로 옮기는 게 유리합니다.
경계를 벗어난 입자는 반대편으로 감싸지 않고 무작위 위치에 다시 뿌려서, 흐름이 끊기지 않고 계속 새 입자가 유입되는 것처럼 보이게 했습니다. 색은 진행 각도에 따라 색상환을 돌려 흐름의 "결"을 시각적으로 드러냅니다.
언제 쓰나
데이터 흐름, 바람·물살 같은 자연 현상, 배경 앰비언스 모션을 자연스럽게 표현하고 싶을 때.