UE4 & UE5
-
[UE5] Nanite (5/5)UE4 & UE5/Rendering 2024. 3. 25. 20:44
[UE5] Nanite (5/5) 최초 작성 : 2024-03-25 마지막 수정 : 2024-03-25 최재호 목차 1. 환경 2. 목표 3. 내용 3.1. DrawBasePass 전체 레이아웃 확인 3.2. FInitializeMaterialsCS 3.3. FClassifyMaterialsCS 3.4. FFinalizeMaterialsCS 3.5. BuildNaniteMaterialPassCommands 3.6. DrawNaniteMaterialPass 3.7. FNaniteIndirectMaterialVS 쉐이더 코드 확인 4. 부록 4.1. MaterialDepth 값에 생성에 대해서 5. 레퍼런스 1. 환경 Unreal Engine 5.3.2 (release branch 072300df18a94f..
-
[UE5] Nanite (4/5)UE4 & UE5/Rendering 2024. 3. 23. 22:16
[UE5] Nanite (4/5) 최초 작성 : 2024-03-23 마지막 수정 : 2024-03-23 최재호 목차 1. 환경 2. 목표 3. 내용 3.1. EmitDepthTargets 3.2. FEmitSceneDepthPS 3.3. FEmitSceneStencilPS 3.4. FEmitMaterialDepthPS 3.5. 현재 프레임의 최종 HZB 생성 4. 레퍼런스 1. 환경 Unreal Engine 5.3.2 (release branch 072300df18a94f18077ca20a14224b5d99fee872) 개인적으로 분석한 내용이라 틀린 점이 있을 수 있습니다. 그런 부분은 알려주시면 감사하겠습니다. 이번 글은 한 번에 많은 길이의 코드를 분석하는 부분이 종종 등장합니다. 그래서 글을 2개..
-
[UE5] Nanite (3/5)UE4 & UE5/Rendering 2024. 3. 22. 23:42
[UE5] Nanite (3/5) 최초 작성 : 2024-03-22 마지막 수정 : 2024-03-22 최재호 목차 1. 환경 2. 목표 3. 내용 3.1. AddPass_Rasterize(MainPass) 3.1.1. FRasterizerPass 준비 3.1.2. AddPass_Binning(MainPass) 전체 레이아웃 3.1.2.1. RasterBinCount 3.1.2.2. RasterBinReserve 3.1.2.3. RasterBinScatter 3.1.3. HW Rasterize 3.1.4. SW Rasterize 3.2. 현재 프레임 기반 HZB 생성 3.3. PostPass 와 MainPass 의 차이점 정리 3.3.1. FInstanceCull_CS 차이점 3.3.2. Instance..
-
[UE5] Nanite (2/5)UE4 & UE5/Rendering 2024. 3. 21. 00:14
[UE5] Nanite (2/5) 최초 작성 : 2024-03-21 마지막 수정 : 2024-03-21 최재호 목차 1. 환경 2. 목표 3. 내용 3.1. TwoPassOcclusionCulling 의 컬링파트 3.2. FRenderer 생성 및 InitArgs 코드 분석 3.3. Main/Post Culling 전체 코드 레이아웃 3.3.1. AddPassInitNodesAndClusterBatchesUAV 3.3.2. AddPass_InstanceHierarchyAndClusterCull 전체 레이아웃 3.3.2.1. FInstanceCull_CS (MainPass) 3.3.2.2. AddPass_NodeAndClusterCull (MainPass) 전체 레이아웃 3.3.2.2.1. LoadCand..
-
[UE5] Nanite (1/5)UE4 & UE5/Rendering 2024. 3. 14. 20:51
[UE5] Nanite (1/5) 최초 작성 : 2024-03-14 마지막 수정 : 2024-03-14 최재호 목차 1. 환경 2. 목표 3. 내용 3.1. Nanite 에서 주요 기술 둘러보기 3.1.1. MeshShader 와 같은 Cluster 기반 렌더링 3.1.2. TwoPassOcclusionCulling 3.1.3. Visibility Buffer Rendering 3.2. Nanite MeshDrawCommandCaching 3.3. Nanite PrimitiveSceneProxy 의 생성 3.4. 새로 생성한 Nanite PrimitiveSceneProxy 를 UpdateAllPrimitiveSceneInfos 으로 FScene 에 등록 3.5. GPU Scene MaterialSlot ..
-
[UE5] D3D12 ResourceAllocation 리뷰(2/2)UE4 & UE5/Rendering 2023. 8. 24. 22:43
[UE5] D3D12 ResourceAllocation 리뷰 (2/2) 최초 작성 : 2023-08-24 마지막 수정 : 2023-08-24 최재호 목차 1. 목표 2. 내용 2.1. Non-TransientHeap 방식 2.1.1. 리소스 할당 코드 2.1.1.1. FD3D12Buffer 생성 2.1.1.2. FD3D12Texture 생성 2.1.1.3. FD3D12UniformBuffer 2.1.1.4. FD3D12UploadHeapAllocator 의 메모리 할당 2.1.1.5. FD3D12DefaultBufferAllocator 의 메모리 할당 2.1.1.6. FD3D12TextureAllocatorPool 의 메모리 할당 2.1.1.7. FD3D12FastConstantAllocator 의 메모..
-
[UE5] D3D12 ResourceAllocation 리뷰 (1/2)UE4 & UE5/Rendering 2023. 8. 23. 00:26
[UE5] D3D12 ResourceAllocation 리뷰 (1/2) 최초 작성 : 2023-08-23 마지막 수정 : 2023-08-23 최재호 목차 1. 목표 2. 내용 2.1. Non-TransientHeap 방식 2.1.1. 주요 클래스 파악 2.1.1.1. FD3D12Buffer, FD3D12Texture 2.1.1.2. FD3D12UniformBuffer 2.1.2. 리소스 해제 방식 정리 2.2. TransientHeap 방식 (RDG 에서 사용) 2.2.1. 주요 클래스 파악 2.3. Non-TransientHeap 방식의 전체 UML 2.4. TransientHeap 방식의 전체 UML 3. 레퍼런스 1. 목표 UE5 의 D3D12 Buffer, Texture 의 생성/해제 방식에 대해..
-
[UE5] Garbage CollectionUE4 & UE5/Core 2023. 7. 5. 08:00
[UE5] Garbage Collection 최초 작성 : 2023-07-05 마지막 수정 : 2023-07-05 최재호 목차 1. 환경 2. 목표 3. 내용 3.1. 언리얼 GC 방식인 Mark and Sweep 3.2. GC 가 GameThread 히칭을 발생시키는 주요 지점 중 하나 3.3. UE5 GC 의 주요 단계 3.4. UE5 가 레퍼런스를 유지하는 방식 3.4.1. UCLASS 의 UPROPERTY() 멤버 변수에 등록 3.4.1.1. ReferenceTokenStream 의 생성 과정 3.4.2. FGCObject (UGCObjectReferencer) 를 상속 받기 3.4.2.1. UGCObjectReferencer 3.4.3. Cluster Root 에 등록 (GC 를 처리하는 대표 ..