본문 바로가기

포트폴리오 /DirectX 11

[ Eunbi's Farm - DirectX 11 ] 파티클 시스템



[ 파티클 시스템 ]


파티클시스템이란? 

무작위한 방식으로 움직이는 입자들의 집합을 모형화한것이며, 비, 연기, 폭파, 마법, 발사체같은 다양한 현상과 사물을 흉내내는데 쓰인다. 

2D 스프라이트와 다르게 3차원공간에서 터지는 이펙트이므로 조금 더 사실적이며, 속도와 방향을 지정할 수 있다는 면에서 장점이다.

하지만 2D스프라이트보다는 연산량이 많고, 두단계 쉐이더를 거쳐야하기 때문에 무겁다는 단점이 있다. 


[ Stream- Output ]


GPU에서 텍스처와 깊이/스텐실버퍼에 자료를 기록하며, 후면 버퍼에도 기록한다. 

스트림 출력 단계를 이용하면, 기하셰이더에서 출력한 정점들이 정점버퍼에 기록되게 할 수 있다. 그리고 저장된 점들을 렌더링파이프라인에 입력해서 그리는 것이 가능하다.



스트림 출력을 사용하는 경우, 특별한 설정이 없는 한, 기하셰이더가 출력한 정점은 스트림으로 출력될 뿐 아니라, 렌더링 파이프라인의 다음단계(래스터화기) 로도 입력이 된다. 자료를 스트림으로 출력하기만하고, 렌더링하지 않는 기법에서는 픽셀셰이더와 깊이,스텐실 버퍼를 비활성해야한다. 


그러므로, 파티클 시스템은 다음과 같이 수행된다.


1. 입자목록을 스트림출력 전용으로 그린다. (래스터화기 비활성, 픽셀,깊이스텐실 비활성) 

2. GS는 주어진 조건에 따라 입자들을 생성하거나 파괴한다.

3. 입자목록을 스트림출력으로 정점 버퍼에 기록한다. 

4. 파티클 렌더 쉐이더의 VS에 버퍼에있는 정점들을 넣어준다. 

5. 이 정점들을 파티클 렌더 쉐이더의 GS에서 확장시켜 Plane으로 만들어준다. (빌보드 적용) 

6. PS에서 텍스쳐를 입혀 출력 


> particlesystem.cpp 


 

참고 ) DirectX11을 이용한 3D 프로그래밍 입