본문 바로가기

DirectX49

27. Particle System_2 Particle System_1에서 쉐이더에서 구현한 내용을 cpp 코드에서도 구현하기 위해 2개의 클래스를 추가 1. StructuredBuffer - Constant Buffer와 마찬가지로 Graphics 기능을 지원하기 위해 만들어진 클래스 - Engine에서 이 클래스의 포인터를 소유하고 Get 함수로 접근할 수 있게 빼두었다. - Init 함수에서 버퍼의 크기와 개수를 받고 SRV, UAV 뷰를 만든다. - 멤버함수로 SRV, UAV의 내용을 세팅해주는 Set 함수를 제공한다. - 여기서 세팅해주는 SRV, UAV는 Compute 전용 DescriptorHeap에 전달된다. 2. Particle System - Component로 GameObject에 연결되어 로직이 돌아간다 - 내부적으로 S.. 2023. 2. 14.
26. Particle System_1 파티클 시스템은 화면에 떠다니는 다수의 개체를 표현할 때 사용하는 기술이다. 그리고 그 개체 하나 하나를 파티클이라고 한다. - 이런 물방울들을 화면에 표현할 때 개체 하나 하나를 렌더링파이프라인을 거쳐 출력하면 성능이 매우 떨어질 것이다. (몇천 몇만개가 되므로) - 이번 주제는 이런 파티클들을 컴퓨트 쉐이더를 통해 어떻게 표현하는지에 대한 내용이다. 인스턴싱(Instancing) - 동일한 객체를 한 화면에 여러 개 등장시킬 때 사용하는 기술 - 이 기술은 지금도 사용하고 있었다. - CommandList의 DrawIndexedInstanced 함수는 이런 인스턴싱에 관여하며 2번째 인자가 한번에 그릴 개체의 개수를 의미한다. struct Particle { float3 worldPos; float .. 2023. 2. 13.
25. Compute Shader CPU와 GPU의 핵심적인 차이는 코어의 갯수이다. CPU는 코어가 몇 개 안되지만 GPU는 엄청 많음 (몇 천개 단위..) 하지만 코어 하나의 성능은 CPU가 더 똑똑하다 CPU는 이것 저것 많은 일들을 처리해야 하기 때문 (일당백) 모든 일감이 독립적으로 실행되는 경우 예를 들면 이전의 작업과 지금의 작업이 아무 관련이 없어서 병렬로 실행되어도 아무 문제 없는 경우 GPU에게 단순 작업을 떠넘길 수 있다. UAV(Unordered Access View) - u0~un이 컴퓨트쉐이더에서 사용하는 레지스터이다. 쉐이더코드에서 제공하는 Texture중 RWTexture2D라는 텍스쳐가 있는데, RW는 Read/Write를 의미하며 특이하게도 Write가 가능한 텍스쳐다. 이 텍스쳐는 픽셀 하나하나당 일감을.. 2023. 2. 12.
24. Multi Render Target - 멀티 렌더타겟은 CCTV같이 화면 안에 화면을 표현할 때 주로 사용되는 기술이다. - 하나 더 주요한 기능은 텍스쳐에 정보를 저장할 수 있다는 것인데, - 원래 기존에 픽셀 쉐이더의 결과물이 단순히 색상값이었다면, - 멀티 렌더타겟을 통해 텍스쳐에 픽셀 쉐이더의 결과를 저장하면 이후에 이 텍스쳐를 통해 그 정보를 재사용할 수 있다. - 어떤 이점이 있는가? - A라는 정보를 B, C, D라는 텍스쳐에 적용하고 싶은데 각각 적용하려면 전부 렌더링파이프라인을 처음부터 거쳐서 하나 하나 처리해야 한다. - 그런데 텍스쳐에 저장해놓으면 한 번 계산된 값을 돌려쓸 수 있는 장점이 생겨서 성능 향상에 도움이 된다. - 이런 기법을 Deferred Rendering 기법이라고 하고, 기존에 우리가 사용한 방법은 .. 2023. 2. 4.