Nanite Geometry
Use Nanite for static or predictably deforming meshes. Keep fallback meshes clean for non-Nanite paths.
Применяйте Nanite для статичных или предсказуемо деформируемых мешей. Поддерживайте чистые fallback-меши для non-Nanite путей.
High-End Rendering
High-End Rendering
This section covers practical rendering boundaries for cinematics and gameplay maps with dense geometry.
Продвинутый рендеринг
Раздел описывает практические ограничения рендеринга для кинематографичных и геймплейных карт с плотной геометрией.
Video Walkthrough
Видеообзор
Shared UE5 explainer video for this section.
Общее объясняющее видео по UE5 для этого раздела.
Use Nanite for static or predictably deforming meshes. Keep fallback meshes clean for non-Nanite paths.
Применяйте Nanite для статичных или предсказуемо деформируемых мешей. Поддерживайте чистые fallback-меши для non-Nanite путей.
Lumen GI and reflections require careful roughness and emissive balancing to avoid temporal instability.
Lumen GI и отражения требуют аккуратной настройки roughness и emissive, чтобы избежать temporal-нестабильности.
Substrate material graphs can increase shader compile time significantly. Cache DDC in CI.
Графы материалов Substrate заметно увеличивают время компиляции шейдеров. Кэшируйте DDC в CI.
Mixing too many translucent layers with Lumen reflections can create severe performance spikes.
Сочетание большого количества translucent-слоев с Lumen reflections может вызывать резкие просадки производительности.
Profile with `stat GPU` and `r.ProfileGPU.ShowUI 1` after every major material revision.
Профилируйте через `stat GPU` и `r.ProfileGPU.ShowUI 1` после каждого крупного изменения материалов.
void URenderTuningSubsystem::ApplyCinematicPreset()
{
IConsoleManager::Get().FindConsoleVariable(TEXT("r.Lumen.Reflections.HardwareRayTracing"))
->Set(1, ECVF_SetByCode);
IConsoleManager::Get().FindConsoleVariable(TEXT("r.Shadow.Virtual.ResolutionLodBiasDirectional"))
->Set(-1, ECVF_SetByCode);
IConsoleManager::Get().FindConsoleVariable(TEXT("r.Nanite.MaxPixelsPerEdge"))
->Set(1, ECVF_SetByCode);
}