[Unreal Engine 5] Virtual Shadow Map
·
언리얼 엔진
기본 아이디어Shadow Map 해상도가 낮으면 그림자에 aliasing이 발생한다.이를 해결하기 위해 다양한 시도들이 있다.Cascaded Shadow Map : 거리에 따른 Shadow map 분리Variance Shadow Map : 텍스쳐 샘플링 때, 분산에 따른 필터링 방법…Virtual Shadow Map은 Shadow map 해상도를 16K 같이 고해상도로 늘리는 방식이다. 이 방식은 aliasing은 줄이겠지만, 16K 텍스쳐는 메모리를 엄청 사용한다. 단순히 D32 float의 depth만 저장하더라도 2^14 * 2^14 * 4 = 10억 Byte = 1GB16K 텍스쳐 한장에 1GB 정도 사용한다. Mipmap까지 포함하면 대략 1.3GB 정도는 사용한다.Directional Ligh..
[Unreal Engine 5] Nanite Basepass 분석
·
언리얼 엔진
선행 내용https://jooh3444.tistory.com/32 Two-pass Occlusion CullingHZB Occlusion CullingHZB란? depth buffer의 Mipmap 이다.원본 depth buffer에서 downsampling을 해서 만들되, 상위 4 texel의 min / max 값을 가지고 있다.reversed-Z 여부에 따라 min/max 값 결정한다. (필요에 따라 둘 다 저jooh3444.tistory.com http://filmicworlds.com/blog/visibility-buffer-rendering-with-material-graphs/ Visibility Buffer Rendering with Material Graphs filmicworlds.com..
UE5.1 Planar reflection과 VSM 동시 사용 시 프레임 드랍 문제
·
언리얼 엔진
서론 Unreal Engine 5.1 릴리즈 버전에서 Planar reflection과 VSM 사용 시, 프레임이 많이 하락하는 현상을 보인다. 원인은 planar reflection 렌더러 / 메인 렌더러에서 불리는 D3D12RHI::CreateD3D12Texture 콜 VSMCachemanager::SetPhysicalPoolSize 는 한번 세팅되면 그만불려야하는 함수인데, SceneCapture에서 쓰는 VSM cache, 메인 렌더러에서 쓰는 VSM cache가 공유되고있어서 'if (!PhysicalPagePool || PhysicalPagePool->GetDesc().Extent != RequestedSize || PhysicalPagePool->GetDesc().ArraySize != Re..
[언리얼 엔진] Referencing Assets 쿠킹 테스트
·
언리얼 엔진
목표https://docs.unrealengine.com/4.26/en-US/ProgrammingAndScripting/ProgrammingWithCPP/Assets/ReferencingAssets/위 docs에서 나온 4가지 방식으로 Reference된 Asset이 패키지 빌드에서 쿠킹되는지 여부를 테스트해봅시다.프로젝트 세팅에서 CookAll = false, MapsToCook 옵션으로 쿠킹할 맵을 지정해주었다는 가정입니다. 1. Direct Property ReferenceUPROPERTY(EditDefaultsOnly)UStaticMesh* TestStaticMesh;하드레퍼런스라고도 부르며 Root set에서 Reference되면 쿠킹됩니다. 2. Construction Time Referen..
[언리얼 엔진] 블루프린트 String Path로 로드 시 주의할 점
·
언리얼 엔진
프로젝트를 새로 만들면 DefaultEngine.inl 파일에 bDontLoadBlueprintOutsideEditor=true 를 기본값으로 사용합니다. 즉, 에디터 이외엔 Blueprint를 로드하는 것을 지양하고 있습니다. 따라서 이 옵션이 true일 경우에 아래와 같은 코드는 에디터에서는 로드가 되어도 에디터 이외의 빌드에서는 MyBlueprint는 항상 nullptr입니다. FString BlueprintAssetPath = FString("/Game/MyBlueprint.MyBlueprint"); UObject* MyObject = Cast(StaticLoadObject(UObject::StaticClass(), NULL, *BlueprintAssetPath)); UBlueprint* MyBl..