>100 Views
October 14, 25
スライド概要
Unreal Fest Seoul 2025 で行った、日々のサポートから得られたUE5のグラフィクスの知見の紹介スライドです。
一部内容がかぶりますが、先にこちらを読んでおくと理解が深まるかと思います
https://www.docswell.com/s/EpicGamesJapan/58GDN9-2023-12-11-035814
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
UE5 Graphics Deep Insights From Japan Nori Shinoyama, Customer Success Director, Epic Games Japan
Unique points ● Stylized Graphics are common and preferred ● Market in Japan is dominated by Console rather than PC or Mobile ○ Strict optimization is required in many places Unreal Engine is used in various fields in Japan!
Today, I’d like to share the graphics insights we’ve gained through our daily support of a wide range of developers.
Stylized Rendering Insights from Japan UNREAL FEST 2023 GOLD COAST
● GPU Profiling ● Shader Complexity View ● TSR Agenda ● MegaLights ● Virtual Texture ● Lumen ● Nanite
UE5 Graphics Insights from Japan UNREAL FEST 2024 Seoul
Self-introduction Who I am? Nori Shinoyama ● ● ● Epic Games Japan, Customer Success, Director ● X(Twitter): @tempkinder ● International Sake Sommelier [email protected]
UE5 Deep Graphics Insights From Japan GPU Profiling
How accurate is ProfileGPU?
Graphics Pipe Compute Pipe UE5 is increasingly making use of asynchronous compute to improve GPU performance and efficiency
Lumen in a Single Frame (Unreal Insights) ~ UE5.5 r.Lumen.AsyncCompute 1 r.Lumen.AsyncCompute 0
UE5.6: Unreal Insights can visualize Compute pipe Graphics Pipe Compute Pipe
How accurate is ProfileGPU?
ProfileGPU (~5.5) automatically disables AsyncCompute
ProfileGPU UE5.6 Compute Pipe ProfileGPU supports AsyncCompute! The ProfileGPU UI has been removed in 5.6, and now only the log output remains Graphics Pipe
ProfileGPU Compute Pipe ProfileGPU supports AsyncCompute! The ProfileGPU window has been removed as of 5.6, and now only the log output remains Graphics Pipe
ProfileGPU UE5.7? Only Graphics Pipe
So.. we have ProfileGPU/Unreal Insight, We don’t need to use vendor’s GPU profilers? No!!
Unreal Insights / ProfileGPU Nsight/Pix/Razor, etc. Easily identify Gain detailed insight into where the performance bottlenecks are why that area is a performance bottleneck
asynchronous compute can lead to better performance… but not always!!
Lumen in a Single Frame (Unreal Insights) UE5.6 GPU Wait… GPU Wait… Lumen Scene Lighting took 2ms.. Since Graphics Pipe and Compute Pipe overlaps, it becomes difficult to clearly understand the performance cost of each individual pass
From Road to 60 fps (Unreal Fest Orlando 2025) “We actually ended up moving Lumen Reflections back to the graphics queue. That’s a lesson to simply not throw everything at the async compute.”
How to Enable/Disable Asynchronous Compute in Lumen r.LumenScene.Lighting.AsyncCompute=1 r.Lumen.DiffuseIndirect.AsyncCompute=1 r.Lumen.Reflections.AsyncCompute=1
Insights from Japan GPU Profiling Due to the shift to asynchronous processing, it has become more difficult to understand GPU operations in each pass Starting from 5.6, various tools in Unreal Engine now support visualization of Async Compute Unreal Insight is a lightweight, extremely useful, and goto tool. However, to gain a deeper understanding of why something is heavy, you should use the GPU profilers provided by each platform vendor. Asynchronous compute doesn’t always guarantee better performance. Make sure to evaluate and identify the most suitable settings for your own project.
UE5 Graphics Deep Insights From Japan Shader Complexity View
Shader Complexity Shader instruction count for this polygon only Shader instructions from translucent materials are additive.
Shader Complexity the character’s shader has a high instruction count possibly both multiple translucent draws are overlapping
How to Check Shader Instruction Count: Platform Stats Stat WindowにPC版での大まかなシェーダ命令数を出してくれます
If the Shader Complexity view shows red or white, does it always mean it needs to be fixed?
Important Note instruction count ≠ performance cost (Cycle数と言おうか。。) (in a rough sense, you may treat them as roughly equal...)
Difference Between Instruction Count and Actual Cost Not all instructions have the same cost Get some eggs on your way back Give two talks at Unreal Fest Seoul They’re both just single lines (instructions), but the amount of work involved is completely different!
Difference Between Instruction Count and Actual Cost Even the same shader can have different performance costs at runtime Compilers are smart. , in a shader with alpha testing, the compiler may rearrange the code to perform the alpha test before doing any color calculations (Early Exit) Transparent Area Alpha Test Opaque Area Alpha Test Color Calculation
Tricky Example: Shader Instruction Count Doesn’t Match Shader Cost With a deliberately "evil" material setup just applying it to a sphere can result in 20ms of GPU cost, even though the shader only has 39 instructions.
Tricky Example: Shader Instruction Count Doesn’t Match Shader Cost On the flip side, even a shader with 2,533 instructions can run in just 0.04ms
Important Note instruction count ≠ performance cost (Cycle数と言おうか。。) (in a rough sense, you may treat them as roughly equal...)
Can you tell that there’s something a bit off with this Shader Complexity view?
The Shader Complexity View doesn’t accurately reflect the rendering cost of transparent areas in masked materials… Transparent Area Alpha Test Opaque Area Alpha Test Color Calculation
Shader Complexity View is best used for checking overlapping transparent elements. Shader Complexity View
OK… so… what’s the right way to approach material optimization?
Nsight/Pix/Razor, etc. Gain detailed insight into why that area is a performance bottleneck
instruction count is NOT performance cost Insights from Japan Shader Complexity View What’s most dangerous is spending time on ineffective optimizations Just because the Shader Complexity view is bright red or white, doesn’t necessarily mean that reducing instruction count will have any real impact.
UE5 Graphics Deep Insights From Japan Temporal Super Resolution
Temporal Super Resolution (TSR)
4K native 57.33ms Upscaling 1080p to 4K with TSR 26.08ms
Temporal Super Resolution (TSR) ● A method of upscaling by referencing multiple previous low-resolution frames ● Reduces the total amount of pixels computed in a single frame, thus dramatically lowering the processing load on many, including Nanite/Lumen
TSR and velocity vectors need to output the correct velocity vector for each object in order for TSR to understand the change from the past frames Incorrect output of velocity vectors may cause strong ghosting (blurring) Target High Resolution
Has Pixel Animation
BeforeDOF AfterDOF (Default) Can cause ghosting on TSR DoF can apply to it Works well with TSR DoF doesn't apply to it.
r.AutoBeforeDOF (Default: ON) Adjust using AutoBeforeDOF (0~1). Translucent object Translucent object Focal Distance Since this object within the focal range AfterDOF Since this object is outside the focal range, BeforeDOF
r.AutoBeforeDOF You can turn it off by assigning a negative value, like -1. If you notice any issues with how translucency interacts with Depth of Field, try setting this to a negative number to see if it resolves the problem.
Insights from Japan TSR Ghosting may occur in areas where the velocity vector is not correct From UE5, the default translucency pass is AfterDOF Be cautious with the AutoBeforeDOF feature. If you notice anything strange, try disabling it to see if it improves the behavior.
UE5 Graphics Deep Insights From Japan Mega Lights (EXPERIMENTAL)
MegaLights (EXPERIMENTAL) https://dev.epicgames.com/documentation/en-us/unreal-engine/megalights-in-unreal-engine
MegaLights (EXPERIMENTAL) Why is it possible to place so many lights with MegaLights? ● Because the maximum number of samples per pixel per frame is fixed.
MegaLights (EXPERIMENTAL) Traditional Lighting ● Result > Performance ● The result is always consistent and physically correct lighting. ● The more lights you place, the heavier the performance cost becomes MegaLights ● Result < Performance ● The amount of lighting samples per pixel per frame is fixed. ● The performance cost does not increase with the number of lights. However it may lead to artifacts or errors.
Insights from Japan Mega Lights EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL
UE5 Graphics Deep Insights From Japan Virtual Texture
Virtual Texture non-Virtual Texture Virtual Texture
Caution: Virtual texture’s min mipmap size Min mipmap size = tile size (default 128*128 ) High frequency virtual textures can cause terrible moare
Caution: Virtual texture’s min mipmap size Min mipmap size = tile size (default 128*128 ) High frequency virtual textures can cause terrible moare TSR can mitigate the issue but cannot eliminate it completely
All streaming can potentially be delayed…
Countermeasure: Cinematic Prestreaming When Camera cuts and objects are predetermined 1. Record and save what Nanite and Virtual Texture to load 2. By pre-loading that data during actual Sequencer playback, the delay can be reduced to zero
Virtual Texture Streaming Priority (from 5.6) Streaming Priority allows you to assign loading priorities Lowest Highest
Virtual Texture Prefetch Mips (from UE5.6) r.Streaming.PoolSizeForVirtualTextures should be set appropriately Virutual Textgure Prefetch Mips must be larger log(TileSize) Default log(128) = 7 so it should be larger than 7 by default. With PrefethMips Without PrefethMips
Starting with UE5.6, Virtual Textures are enabled by default. Insights from Japan Virtual Texture Keep in mind that The minimum mip size is constrained by the tile size Virtual Textures can also experience streaming delays. From UE5.6, Streaming Priority allows you to assign loading priorities, Prefetch Mips lets you handle specific mips through standard texture streaming, have been introduced.
UE5 Graphics Deep Insights From Japan Lumen
UE5 Graphics Insights from Japan UNREAL FEST 2024 Seoul
Small Bright Emissive materials Cause Incositencites!!
Avowed: A GPU Technical Retrospective Unreal Fest Orlando 2025 They used Emissive materials for lighting!!!
Insights from Japan Lumen There are so many important considerations when working with Lumen. Lighting using emissive materials can be very powerful, but small, high-intensity objects can easily lead to lighting inconsistencies. That said, we’re now starting to see real-world examples of emissive materials being used effectively. Be sure to understand the limitations, and test carefully to see if this approach is suitable for your own project.
UE5 Graphics Deep Insights From Japan Nanite
Nanite Nanite Foliage • • This is still NOT supported on UE5.6 Existing foliage with masked materials can't be used as-is with Nanite Foliage. The Road to 60fps in the Witcher 4 Unreal Engine 5 Tech Demo Unreal Fest Orlando 2025
Nanite Nanite suports Masked materials since UE5.3 But the processing load will be very high…
Non-Nanite / Masked Nanite Nanite / fully opaque
Mask Material Only in early Z-pass (Early Z-pass should be also set to “Opaque and masked meshes”)
Nanite continues to evolve, and with the new Nanite Foliage, it's now possible to render large numbers of trees very efficiently. Insights from Japan Nanite However, Nanite Foliage has NOT yet been fully integrated into UE5.6, and it might use a specialized data structure. For teams that want to continue using their existing assets, it might make more sense to stick with trees using masked materials. In that case, we recommend trying the option “Mask Material Only in Early-Z Pass” (And if you encounter any issues after enabling this option, please don’t hesitate to reach out!)
● GPU Profiling ● Shader Complexity View ● TSR Agenda ● MegaLights ● Virtual Texture ● Lumen ● Nanite
Thank you!