전체 글
Cpu Memory Pool
Cpu의 메모리를 관리 하기 위한 메모리 풀이다.Git!https://github.com/aszd0708/DirecX12_Rendering/tree/master/CpuMemoryPool DirecX12_Rendering/CpuMemoryPool at master · aszd0708/DirecX12_Renderingdeveloping simple rendering engine by DirectX12. Contribute to aszd0708/DirecX12_Rendering development by creating an account on GitHub.github.com해당 풀의 코드이다.설계Pool일단, CPU가 한번에 캐시에서 읽는 최소한의 크기는 64바이트 이다. (어떤 CPU를 사용하는지에 따라 ..
Texture!
그러하다. Texture다.Dx11과 굉장히 다르다.너무 다르다... 일단. 진행 해보자... 이론Dx11과 다른점은 Dx11때에는 그냥 ShaderResourceView로 그냥 넘겼다.Dx12에서는 조금 아니! 매우 큰 다른 방법으로 넘겨줘야 한다.이런식으로 CPU와 GPU 그리고 GPU에서 원하는 Texture가 있다고 하자Dx11에서는 그냥 읽고 메모리에 태우면 알아서 ㅃㅃ 했겠지만...Dx12에서는 다르다!! 이런식으로 CPU에서 텍스처를 읽고-> CPU와 GPU가 공유하는 메모리에 넣고-> 그걸 GPU에서 GPU만 들고 있는 메모리에 넣어준다. 그럼 왜 중간 공유 메모리에 두면 다 되는거 아니냐! 라고 할수 있지만...메모리 대역폭 차이CPU의 메모리와 GPU의 메모리를 계속해서 이동하게 되면 ..
Mesh Rendering - 2
이전에 너무 코드만 있었지만... 어쩔수 없다 ㅠMeshRenderer이제 여기서!! 이전 포스트에서 만든 모든 것들을 잘 조립해서 Mesh를 표시한다. class MeshRenderer : public Renderer{ DECLARE_COMPONENT_TYPE(eComponentType::Renderer);public: MeshRenderer(); virtual ~MeshRenderer() override;public: void Init(shared_ptr> mesh, shared_ptr shader); virtual void Render() override;public: const D3D12_VERTEX_BUFFER_VIEW& GetVertexBuffer() { return _mesh->GetVert..
Mesh Rendering - 1 (Shader, ConstantBuffer, Vertex Index Buffer)
이젠 저 삼각형을 좀 이렇게 저렇게 해서 만든 Mesh다. 우선 이전 포스트에서 사용했던 코드를 바탕으로 약간의 구조를 잡아본다. Shader여기서 Shader는HLSL 에서 PixelShader, VertexShader 매핑RootSignature, PSO 제작 이 정도만 한다.그리고, 각 Model이나 Mesh마다 각각 다른 Shader정보를 갖고있기 때문에 해당 정보를 담은 ShaderInfo 클래스를 만들어 Shader를 만들 때, 해당 정보에서 읽는다. ShaderInfo#pragma oncestruct ShaderInfo{ wstring _path; vector _inputLayoutDesc; D3D12_ROOT_PARAMETER* _signatureRootParam; uint32 _signa..
삼각형 출력
삼각형이다. DirectX11에서는 데이터 넘기고 셰이더에서 처리하고 출력하고 가 끝이었다.하지만... DirectX12에선... 아니다... 삼각형!일단 간단한 삼각형을 그릴 때 필요한 것들은준비물삼각형 데이터(Vertex, Color)셰이더 데이터를 전달할 ResourceShader에서 어떤 데이터를 받을 것인지에 따른 SignaturePSO(Pipeline State Object)가 필요하다.삼각형 데이터void TriagleDemo::CreateTriangle(){ { Vec3 vertex = Vec3(0.0f, 0.5f, 0.0f); Vec4 color = Vec4(1.0f, 0.0f, 0.0f, 1.0f); VertexData data = {vertex, color}; _vertexDa..
기본
Githttps://github.com/aszd0708/DirecX12_Rendering GitHub - aszd0708/DirecX12_Rendering: developing simple rendering engine by DirectX12developing simple rendering engine by DirectX12. Contribute to aszd0708/DirecX12_Rendering development by creating an account on GitHub.github.com 서론DirectX11에서는 Device와 DeviceContext 만 부르면 어느정도 내가 원하는 것들을 만들 수 있다.하지만! DirectX12는 다르다! 필요한 것들기본적으로 Device는 같지만... 나..
DirectX12, DirectX11의 차이
생각보다 DirectX11과 DirectX12이 개발 방향이 너무 달라서 따로 카테고리를 생성했다. 일단, 차이점들을 간단히 살펴보자. 차이점렌더링 명령 하달 방식DirectX11기본적으로 단일 통로(Immediate Context)를 통해 GPU에 명령멀티 스레딩을 지원했지만, 드라이버 내부에서 병목현상이 발생해 CPU를 100% 활용하기 어려움DirectX12CommandList와 CommandQueue를 도입각 CPU의 CommandList에 명령을 해 멀티 스레딩 사용 원할마지막에 CommandQueue에 한번에 명령들을 입력하여 GPU가 처리이로 인해 CPU의 멀티스레딩 효율이 높아지고, 드로우콜 성능이 높아짐상태관리DirectX11필요한 상태들만 개별적으로 변경 가능 (VSSetShader, ..
통합 (PBR, AO, 그림자, 환경맵)
지금까지 만들었던 것들을 전부 하나로 통합하는 과정이다. 다만 여기서 바뀐것들 두개만 따로 정리하겠다. GTAO(Grando Truth Anblient Occulusion)일단 이전에 만들었던 SSAO와 다른 방법을 사용한다. 간단하게 말하면, 하나의 픽셀에서 주변에 가장 높이 올라가 있는 값을 찾아서 카메라 방향에서 얼마나 가려져 있는지를 계산하는 방법이다. 반구를 슬라이스로 자금이렇게 네개의 슬라이스로 자르고, 다섯개의 스탭 그리고 5도로 기울인다고 생각 해보자그러면 각 슬라이스 에서 각 스탭에서의 앞 뒤로 갔을 경우 가장 높은 값들을 갖고온다.그럼 앞 중에 가장 높은 값, 그리고 뒤 중에 가장 높은 값을 계산 가능하다. (여기서 높은 값은 하나의 픽셀에서 해당 방향을 바라볼 때의 높은 값이다) 해당..