시작
어느 각도에서도 파티클의 분포가 똑같이 배치되었으면 좋겠다는 마음에 작업을 시작했습니다.
문제점
Shape Location의 Cylinder/Sphere는 3D 공간에 파티클을 배치하기 때문에,
특정 카메라 각도에서 파티클이 겹쳐 보이는 현상이 발생합니다. (옆에서 봤을 때)
해결 방향
카메라 화면 평면 기준으로 파티클을 배치하면 어느 각도에서 봐도 파티클이 겹치지 않습니다.
카메라의 Right Vector와 Up Vector를 기준으로 오프셋을 계산하면, 파티클이 항상 카메라를 향해 펼쳐집니다.
*Shape Location으로 해결이 안 되는 이유
기존 Shape Location 모듈 안에서는 카메라 정보를 가져올 수 없습니다.
따라서 Scratch Pad 모듈을 새로 제작해야 합니다.

1. Normalized Execution Index
파티클의 순서를 0~1 사이 값으로 반환합니다.
파티클이 3개라면 0.0 / 0.33 / 0.66 을 각각 반환합니다.
2. × 6.2832 (2π)
0~1 범위를 Sin/Cos가 이해할 수 있는 라디안(0~2π) 단위로 변환합니다.
원 한 바퀴를 의미합니다.
*왜 2π(6.2832)를 곱할까요
Sin/Cos는 라디안 단위를 사용하며, 원 한 바퀴 = 2π입니다.
NormalizedIndex(0~1)에 2π를 곱하면 원 전체(0°~360°)를 균등하게 나눌 수 있습니다.
0.000 × 2π = 0rad = 0°
0.333 × 2π = 2.09rad = 120°
0.666 × 2π = 4.18rad = 240°
3. Sin(R) / Cos(R)
라디안 값을 받아 -1~1 사이의 수직/수평 비율로 변환합니다.
각 파티클이 원 위의 어느 위치에 있는지를 결정합니다.
4. Get Camera Properties CPU/GPU
카메라 쿼리 DI를 통해 현재 카메라의 방향 벡터를 가져옵니다.
Up Vector World → 카메라 기준 위쪽 방향
Right Vector World → 카메라 기준 오른쪽 방향
5. Sin × Up / Cos × Right
수직/수평 비율에 카메라 방향 벡터를 곱해 실제 3D 오프셋 방향을 계산합니다.
6. Add (두 벡터 합산)
수직 오프셋 + 수평 오프셋을 합쳐 카메라 화면 평면 위의 최종 방향을 구합니다.
7. × Radius
오프셋 방향에 반경 값을 곱해 파티클 간 간격을 조절합니다.
8. Position + Offset → Map Set
*Engine Owner Position은 Map Get으로 읽고, Map Set에는 Particles.Position만 출력합니다.
주의사항

- 모듈은 Particle Update 단계에 배치해야 카메라 방향이 매 프레임 갱신됩니다.
- Map Set의 Position은 Local 체크 해제 상태여야 합니다. (카메라 벡터는 World Space 기준)
결과
