오늘 할일

12/5 DLL, 파티클

Roka_is_back 2023. 12. 5.

1.DLL 학습 및 테스트

2.DLL 학습 및 결과 블로그에 기록

3.DX 11 강의 1개 듣기

 

강의 내용 정리 <파티클>

 

파티클에서 모듈 변수 세팅 함수 만들어야 함.
(선생님이 귀찮아서 안해두고 안에서 초기화 시키심)

Access모드를 Default 로 하면 만든 후에는 수정 불가능 Read만 가능.
Dynamic | Write 조합해서 하면 데이터 덮어쓰기 가능 CPU ->GPU
Staging| read GPU data를 CPU로 읽어올 수 있음 CPU<-GPU

CPU->GPU 쓰기 + CPU<-GPU 읽기 를 동시에 사용 불가능함.

선생님 코드에서는 둘다 지원하기 위해 구조체버퍼를 생성할 때
bSysAccess 매개인자를 통해 받아온다.
둘다 한다고 설정하면 버퍼를 2개 만든다.


기본 구조체 버퍼는 defualt로 만든다.
왜냐하면 write, read 설정을 하는 순간 unodered register에 바인딩이 안된다.
(왜인지는 모르고 그냥 시스템에서 막혀있음.)

그래서 쓰기 버퍼, 읽기 버퍼를 따로 만든다.
쓰기를 했다면 해당 버퍼를 Default 버퍼에 Copy를 하고,
읽기를 했다면 default 를 읽기 버퍼로 Copy 를 하여 쓰는 방식임.

shader 코드에서 RWStructedBuffer 는 u레지스터에 바인딩하기 위한거고
RWStructedBuffer<int> <>에 들어가는건 하나 하나의 요소가 어떤 단위인지.
예를들어 particle 구조체였다면 RWStructedBuffer<t_particle>  이런식으로..


파티클 메모리풀 동기화 shader code,

파티클의 draw call 줄이기 = 인스턴싱
- geometry shader 사용 

1.파이프라인 제어(비활성 파티클 거르기)
2. 빌보드 처리 (카메라 바라보는)
3. 속도에 따른 회전 정렬( 파티클이 향하는 방향으로 길어짐 + 회전 처리 같은거 )

gs 는 점을 추가로 생성할 수 있는데 , 

파티클 할때 point mesh를 전달하여서 네개의 점을 생성하도록 할 수 있다.

그런데 만약 해당 파티클의 상태가 active 가 아니면 점을 아예 생성하지 않기 때문에
resterize, ps 에 넘어갈 정점은 없기 때문에 출력하지 않는다.(이로 인한 최적화)

 

'오늘 할일' 카테고리의 다른 글

12/12  (0) 2023.12.11
12/11  (0) 2023.12.11
12/8  (0) 2023.12.08
12/7  (0) 2023.12.06
12/6  (0) 2023.12.05

댓글