게임 개발/[D2D_Portfolio] DirectX2D 포트폴리오 작업일지

31. Particle System을 활용하여 공격 시 발생하는 먼지 구현

헛둘이 2023. 4. 22. 17:19

Particle System을 활용하여 공격 시 발생하는 파티클 구현

- 몇몇 스컬의 경우 공격 시 공격한 반대 방향으로 여러 개의 먼지 입자가 튀는데, 이 부분을 Particle System으로 구현했다.

- Particle System은 먼지가 날리는 것 같은 다수의 객체를 한꺼번에 그릴 수 있는데 이 먼지 하나 하나를 객체로 취급한다면 프레임이 상당히 떨어졌을 것이다.

(1회 공격당 50개의 파티클이 생성됨)

- 구현은 Structured Buffer로 파티클 배열만큼의 메모리를 GPU에 할당한 후에, Compute Shader에서 값을 이리저리 옮겨주고, 그 값을 Geometry Shader에서 사각형으로 만들어준다.

(파티클 각각은 점으로 이루어져 있고 Geometry Shader에서 이 점을 기준으로 삼각형 2개를 그려서 사각형을 만들어준다. 물론 uv값도 같이 설정해주기 때문에 텍스쳐를 매핑할 때 아무런 문제가 없다) 

- 그 후엔 마찬가지로 Pixel Shader에서 해당 사각형에 텍스쳐를 매핑해서 화면에 뿌려준다.

- 먼지를 구현하기 전에 200프레임 전후를 유지하고 있었는데, 구현한 후에도 200프레임 전후에서 왔다갔다 하는 것을 보고, 문제 없이 구현되었다는 것을 확인할 수 있었다.

- 방법은 몬스터가 공격당했을 때, 가지고 있는 파티클 제너레이터에 생성할 파티클의 갯수를 넘겨주면 해당 갯수만큼 Compute Shader에서 스레드를 깨워서 초기값을 주고 움직이게 한다.

- DeltaTime과 중력을 상수 버퍼로 같이 넘겨서 마치 파티클이 중력을 받는 듯한 효과를 주었다. 

(처음에는 상승하다가 일정 시간이 지나면 중력에 의해 바닥으로 떨어짐)

 

 

내일 할 일

- Town Scene 배경 이미지 변경

- Dungeon Scene 기초 작업 및 Scene 간 이동 구현