[虚幻官方教程学习笔记]深入理解实时渲染(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.mzph.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;或全局模…