[虛幻官方教程學習筆記]深入理解實時渲染(An In-Depth Look at Real-Time Rendering)

原英文教程地址深入理解實時渲染(An In-Depth Look at Real-Time Rendering)

文章目錄

  • 1.Intro to An In-Depth Look at Real-Time Rendering
    • CPU VS GPU
    • Deferred VS Forward
  • 2. Before Rendering and Occlusion
    • Culling計算的步驟
      • 使用console command:freezerendering鎖定當前渲染(實際上是當前Occlusion)
    • Occlusion Performance Implications
  • 3. Geometry Rendering Part 1
    • Prepass / Early Z Pass
      • Drawcalls
      • 使用console command:**stat RHI** 查看Drawcall即DrawPrimitive Calls
  • 4. Geometry Rendering Part 2
    • 在構建場景時,使用整體大模型還是使用模塊化小模型
    • Instanced Rendering
    • Level Of Detail(LOD)
      • HLOD( Hierarchical LOD )
  • 5. Geometry Rendering Part 3
    • Vertex Shaders
      • Vertex Shader優化
  • 6. Rasterization(柵格化), Overshading, and the GBuffer
    • Quad Overdraw
    • GBuffer
      • Custom Depth
    • 小結
  • 7. Rendering and Textures
    • Mipmap
    • Texture Streaming
  • 8. Shaders and Materials
    • PBR Materials
      • 使用Console Command: r.Streaming.PoolSize改變Streaming緩存池大小
  • 9. An In-Depth look at Real-Time Rendering - Reflections
    • Reflection Captures
      • Sphere Reflection Capture
    • Planar Reflection
    • Screen Space Reflections(SSR)
      • 使用Console Command: r.SSR.Quality 4提高SSR的質量
  • 10. Static Lighting
    • Static Light的優缺點
    • Light Maps
    • Lightmass
      • Lightmass Importance Volume
      • Indirect Lighting Cache
    • 性能小結
  • 11. Dynamic Lighting
    • Dynamic Light的優缺點
    • 性能小結
  • 12. Fog and Transparency
    • Fog
      • Distance Fog
      • Local Volumetric Fog
    • Transparency
  • 13. Post Processing

1.Intro to An In-Depth Look at Real-Time Rendering

RTR(Real-Time Rendering) is at its most efficient when there is nothing.RTR is about managing losses

當渲染一開始性能的消耗就已經無法避免,因此RTR的關鍵就在于如何管理消耗。

在這里插入圖片描述

  • 優化良好的項目應該始終運行在Target Frame rate以上,并且隨著一切功能的開啟性能的下降成一個較為緩慢的曲線;
  • 而優化較差的項目其性能會陡然下降,最終低于Target Frame Rate。

You can not do RTR perfect.
在這里插入圖片描述

RTR永遠無法達到完美,因此優化的實質就是再性能-畫質-功能之間進行妥協和平衡。

CPU VS GPU

CPU和GPU同步工作,它們可能互為對方的瓶頸(Bottleneck)

Deferred VS Forward

在這里插入圖片描述

在這里插入圖片描述

2. Before Rendering and Occlusion

在這里插入圖片描述

  • 簡單地說在Game Thread中我們會知道"All transforms of all models"
  • 在Rendering Thread(Draw Thread)計算遮擋剔除Occlusion Culling

Culling計算的步驟

四個步驟的計算量逐漸增大

Step 1 Distance Culling(距離剔除): Distance culling removes any objects further than X from the camera

在這里插入圖片描述

可以使用Cull Distance Volume對其內部對象進行統一(分類設置)

Step 2 Frustum Culling(視錐體剔除):

Step 3 Precomputed Visibility:

要使用PrexomputedVisibilityVolume
在這里插入圖片描述

Step 4 Occlusion Culling(遮擋剔除):
該步驟在Rendering Thread(Draw Thread)中計算

使用console command:freezerendering鎖定當前渲染(實際上是當前Occlusion)

Occlusion Performance Implications

  • Set up distance culling
  • More the 10-15k objects can have an impact
  • Mostly CPU bound,but some GPU impact
  • Large open environments don’t occlude well
  • Even things like particles occlude
  • Large models will rarely occlude and thus increase GPU
  • But combing models to large models will lower the CPU

3. Geometry Rendering Part 1

Prepass / Early Z Pass

在這里插入圖片描述

Drawcalls

在這里插入圖片描述

使用console command:stat RHI 查看Drawcall即DrawPrimitive Calls

在這里插入圖片描述

在這里插入圖片描述

左圖: 5 Drawcalls: Sky + Ground + 3 x Cylinders = 5
右圖: 6 Drawcalls: Sky + Ground + 2 x Cylinders + Half Cylinder with Gray Material + Half Cylinder with Red Material= 6

右圖的渲染順序
在這里插入圖片描述

4. Geometry Rendering Part 2

RenderDoc插件:可以逐Drawcall查看一個畫面的渲染過程

在這里插入圖片描述
在這里插入圖片描述

在構建場景時,使用整體大模型還是使用模塊化小模型

討論:使用少量大模型 VS 使用大量小模型 對于Drawcall 的影響

對于Drawcall來講,使用少量大模型自然可以減少Drawcall,但是會帶來一些其它的性能問題。

在這里插入圖片描述

討論:使用模塊化網格體模型的優勢和弊端“

在這里插入圖片描述
總結: 模型的大小要適當

可以使用Editor>Tools>Merge Actors將多個網格體合并成一個網格體:Merge模式(獨立材質);Simplify模式(即Proxy Geometry Tool 合并材質)
在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

關于模型合并的幾個建議
在這里插入圖片描述
合并模型并不是必須的,而且很花時間。

Instanced Rendering

在這里插入圖片描述

Level Of Detail(LOD)

在這里插入圖片描述

HLOD( Hierarchical LOD )

對一個Mesh組(多個Mesh)進行LOD,這樣可以減少面數的同時,甚至可以減少Drawcall

Windows> Hierarchical LOD Outliner
在這里插入圖片描述

5. Geometry Rendering Part 3

Vertex Shaders

在這里插入圖片描述

在這里插入圖片描述

Vertex Shader優化

在這里插入圖片描述

6. Rasterization(柵格化), Overshading, and the GBuffer

Quad Overdraw

在這里插入圖片描述

一般情況下Quad Overdraw雖然增加性能損耗,但并不是致命的,但如果開發VR等應用時使用Forward Render時,要關注Quad Overdraw。

  1. Very thin triangles affect overshading because they pass through many 2x2 pixel quads

下圖的圓柱中心部分,嚴重overshading.
在這里插入圖片描述

GBuffer

The frame rendered out in multiple different images
These images are the used for compositing in anything ranging from materials to lighting to fog and so forth.

從此步驟開始渲染將不再利用集合體,而是全部依賴于GBuffer提供的圖片。

可以在Viewport Mode中選擇Buffer Visualization中的各個Buffer的預覽圖

在這里插入圖片描述

Custom Depth

小結

在這里插入圖片描述

7. Rendering and Textures

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

Mipmap

在這里插入圖片描述

在這里插入圖片描述

Texture Streaming

在這里插入圖片描述

8. Shaders and Materials

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

DirectX使用HLSL即High Level Shader Language

一個Materials不只生成一個Shader,一個Materials會對每一種應用生成一個對應的Shader

在這里插入圖片描述

PBR Materials

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

使用Console Command: r.Streaming.PoolSize改變Streaming緩存池大小

在這里插入圖片描述

  • Base Pass shader 的 Instruction在200左右是可以接受的,當達到700就太大了
  • 復雜的Shader對性能的影響還取決于它在屏幕中的占比及它影響像素數,占比約大像素越多,復雜的Shader對性能影響越大
    在這里插入圖片描述

在這里插入圖片描述

9. An In-Depth look at Real-Time Rendering - Reflections

在這里插入圖片描述

Reflection Captures

Reflection Captures在關卡載入時進行捕獲

Sphere Reflection Capture

  • 靜態
  • 預計算
  • 速度快
  • 不準確
  • 多個Sphere Reflection Capture可以混合,越近權重越大

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

Planar Reflection

  • 不常用
  • 計算量大
  • 適合需要高精度的平面對象(如鏡子)
  • 其它均不適用
  • 僅限于用于下范圍(大的海洋湖泊不要用)

在這里插入圖片描述

Screen Space Reflections(SSR)

  • 默認的反射系統
  • 實時影響所有對象
  • 準確
  • 會輸出嚴重的噪點
  • 只會反射當前顯示(未被剔除)的對象

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

使用Console Command: r.SSR.Quality 4提高SSR的質量

10. Static Lighting

在這里插入圖片描述
在這里插入圖片描述

Static Light的優缺點

在這里插入圖片描述

在這里插入圖片描述

Light Maps

在這里插入圖片描述
在這里插入圖片描述

Lightmass

在World Settings中設置
在這里插入圖片描述

Lightmass Importance Volume

Indirect Lighting Cache

在這里插入圖片描述
在這里插入圖片描述

性能小結

在這里插入圖片描述

可以使用Viewport的Lightmap Density模式查看每個模型Lightmap的密度(分辨率),并在模型的Lighting>Overridden Light Map Res修改其分辨率
在這里插入圖片描述

在這里插入圖片描述

11. Dynamic Lighting

Dynamic Light的優缺點

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

  • Regular Dynamic Shadows -Used throughout, very common
  • Per Object Shadows -Stationary Light shadows
  • Cascaded Shadow Maps (CSM)-Directional light shadowing
  • Distance Field Shadows -Use DF info instead of tracing geometry

在這里插入圖片描述

性能小結

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
Two more basic rule

  • Use static only if you need the highest possible performance
  • Use dynamic if you need to be freely or able to modify the lighting at any time

12. Fog and Transparency

Fog

Distance Fog

Distance Fog means the fog fades in the distance.They are also Height Fog - meaning fades towards the sky

  • Atmospheric Fog
  • Exponentional Fog

Local Volumetric Fog

Transparency

  • Deferred renderers have difficulties with transparency.
  • Therefore transparent surfaces are usually delayed until a late stage.
  • Or rendered separately in Forward then merged with the Deferred pipeline.

在這里插入圖片描述

在這里插入圖片描述

透明材質區域:紅色Shader Complexity過大的部分
在這里插入圖片描述

透明煙霧粒子充滿的場景
在這里插入圖片描述
如果可能的話

  • 將材質設為Unlit
  • 或者設為Forward Render

在這里插入圖片描述

13. Post Processing

常見的用Post Processing實現的效果

  • Light Bloom
  • Depth of Field/Blurring
  • Some types of lens flares
  • Light Shafts
  • Vignette
  • Tone mapping/Color correction
  • Exposure
  • Motion Blur

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82542.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82542.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82542.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux進程間信號

目錄 信號入門 生活角度中的信號 技術應用角度的信號 信號的發送與記錄 信號處理常見方式概述 產生信號 通過終端按鍵產生 通過系統函數向進程發信號 由軟件條件產生信號 由硬件異常產生信號 阻塞信號 信號其他相關常見概念 在內核中的表示 sigset_t 信號集操作…

Git簡介和發展

Git 簡介 Git是一個開源的分布式版本控制系統,跨平臺,支持Windows、Linux、MacOS。主要是用于項目的版本管理,是由林納斯托瓦茲(Linux Torvalds)在2005年為Linux內核開發而創建。 起因 在2002年至2005年間,Linux內核開發團隊使…

Perspective,數據可視化的超級引擎!

Perspective 是一個強大的交互式數據分析和可視化庫,它允許你創建高度可配置的報告、儀表板、筆記本和應用程序。給用戶提供了一個新的視角來看待數據。 Stars 數9125Forks 數1217 主要特點 高效流式查詢引擎:Perspective使用C編寫,并編譯為…

MySQL COUNT(*) 查詢優化詳解!

目錄 前言1. COUNT(*) 為什么慢?—— InnoDB 的“計數煩惱” 🤔2. MySQL 執行 COUNT(*) 的方式 (InnoDB)3. COUNT(*) 優化策略:快!準!狠!策略一:利用索引優化帶 WHERE 子句的 COUNT(*) (最常見且…

如何在postman使用時間戳

1. 使用 Pre-request Script 動態轉換? 在發送請求前,將日期字符串轉為時間戳并存儲為環境變量/全局變量。 ?示例代碼? // 將日期字符串(如 "2023-10-01")轉為時間戳(毫秒) const dateString "2…

嵌入式學習筆記 - 運算放大器的共模抑制比

一 定義 共模抑制比(Common Mode Rejection Ratio, ?CMRR?)是衡量差分放大器(或差分電路)抑制共模信號能力的關鍵指標。它在電子工程中尤為重要,特別是在需要處理微弱信號或對抗環境噪聲的場景中。 核心概念 ?共…

成龍電影中的三菱汽車

帕杰羅、 Lancer Evolution、 3000GT Mitsubishi Lancer Evo ll 1995 附錄 Mercedes-Benz 280SL(W113),俗稱“Pagoda”(帕格達)

Spring 項目無法連接 MySQL:Nacos 配置誤區排查與解決

在開發過程中,我們使用 Nacos 來管理 Spring Boot 項目的配置,其中包括數據庫連接配置。然而,在實際操作中,由于一些概念的混淆,我們遇到了一些連接問題。本文將分享我的故障排查過程,幫助大家避免類似的錯…

LabVIEW與 IMAQ Vision 機器視覺應用

在工業生產及諸多領域,精確高效的檢測至關重要。基于 LabVIEW 與 IMAQ Vision 的機器視覺應用,深入剖析其原理、系統構成、軟件設計及優勢,為相關領域工程師提供全面技術參考。 ? 一、技術原理 (一)機器視覺技術基礎…

【STM32 學習筆記】USART串口

注意:在串口助手的接收模式中有文本模式和HEX模式兩種模式,那么它們有什么區別? ??文本模式和Hex模式是兩種不同的文件編輯或瀏覽模式,不是完全相同的概念。文本模式通常是指以ASCII編碼格式表示文本文件的編輯或瀏覽模式。在文…

【WPS】怎么解決“word的復制表格”粘貼到“excel的單元格”變多行單元格的問題

把 word文檔復制表格到這個excel表格上面的話,會出現由單個單元格變成多行單元格的情況。 現在,就這個問題怎么解決,提出了一個方案,就是先查找是什么導致了這個換行,然后再將換行的這個字符進行一個整體的替換&#x…

嵌入式開發面試題詳解:STM32 與嵌入式開發核心知識全面解析

一、STM32 共有幾種基本時鐘信號? 題目 STM32 共有幾種基本時鐘信號? 解答 STM32 包含 4 種基本時鐘信號,分別為 HSI(內部高速時鐘)、HSE(外部高速時鐘)、LSI(內部低速時鐘&…

華為策略路由

路由策略:是對路由條目進行控制,通告控制路由條目影響報文的轉發路徑。路由策略為控制平面。 策略路由:是根據報文特征,認為的控制報文從某個即可轉發出去,不修改路由表。即策略路由為在轉發平面。 路由策略 策略路由…

# YOLOv3:深度學習中的目標檢測利器

YOLOv3:深度學習中的目標檢測利器 引言 在計算機視覺領域,目標檢測是一項核心任務,它涉及到識別圖像或視頻中的物體,并確定它們的位置。隨著深度學習技術的快速發展,目標檢測算法也在不斷進步。YOLO(You …

紅黑樹刪除的實現與四種情況的證明

🧭 學習重點 刪除節點的三種情況紅黑樹如何恢復性質四種修復情況完整可運行的 C 實現 一、紅黑樹刪除的基礎理解 紅黑樹刪除比插入復雜得多,因為: 刪除的是黑節點可能會破壞“從根到葉子黑節點數相等”的性質。刪除紅節點無需修復&#xf…

vue配置代理解決前端跨域的問題

文章目錄 一、概述二、報錯現象三、通過配置代理來解決修改request.js中的baseURL為/api在vite.config.js中增加代理配置 四、參考資料 一、概述 跨域是指由于瀏覽器的同源策略限制,向不同源(不同協議、不同域名、不同端口)發送ajax請求會失敗 二、報錯現象 三、…

T-SQL在SQL Server中判斷表、字段、索引、視圖、觸發器、Synonym等是否存在

SQL Server創建或者刪除表、字段、索引、視圖、觸發器前判斷是否存在。 目錄 1. SQL Server創建表之前判斷表是否存在 2. SQL Server新增字段之前判斷是否存在 3. SQL Server刪除字段之前判斷是否存在 4. SQL Server新增索引之前判斷是否存在 5. SQL Server判斷視圖是否存…

金融企業如何借力運維監控強化合規性建設?

日前,國家金融監督管理總局網站公布行政處罰信息,認定某銀行存在多項違規并對其進行罰款。其中,國家金融監督管理總局認定該銀行主要違規內容包括: 一、部分重要信息系統識別不全面,災備建設和災難恢復能力不符合監管要…

leetcode hot100 技巧

如有缺漏謬誤&#xff0c;還請批評指正。 1.只出現一次的數字 利用異或運算相同得0的特點。所有出現過兩次的數字都會在異或運算累加過程中被抵消。 class Solution { public:int singleNumber(vector<int>& nums) {int res0;for(int i0;i<nums.size();i) res^n…

git做commit信息時的校驗

親測可用&#xff01;不行你來打我&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 1. 文件基本信息 屬性說明文件名commit-msg&#xff08;必須無擴展名&#xff0c;如 .sh 或 .txt 會導致失效&#xff09;位置倉庫的 .git/hooks/ 目錄下&#xff08;或全局模…