UE4渲染的整体流程(可视性、GBuffer、反射、动态光照阴影、后期处理)
个人博客完整原文:https://alvincr.com/2021/02/ue4-1-rendering/
评价渲染工具的好坏参考:渲染质量、渲染功能及性能。
1 整体流程
AlvinCR认为渲染并不是一个具体步骤,而是与其相关的多个流程。
与渲染有关的一切都是使用r.rendering函数。
渲染的准备工作:
可视性(包括遮蔽)——>渲染——>基础通道(属于渲染过程,基础通道材质包含:几何体、绘制和调用、预计算光照)——>GBuffer(是一条基础通道,需要GBuffer是因为基础通道采用延迟渲染器)——>动态光照和阴影——>反射——>后期处理——>可拓展性及性能
2 具体过程
2.1 可视性
在渲染的之前,需要使用CPU进行计算,然后将需要渲染的帧提供给GPU,因此CPU必须在渲染前一帧之前完成相关计算,因为使用CPU可以明确物体的存在方式、位置及是否需要渲染。
功能:
距离剔除。超出距离限制的物品将会禁用,默认开启
视锥剔除。用于识别镜头内外需要渲染的对象
预计算可视性。适用于移动设备、低端设备
可视化剔除。核心单元,上面三项都是为可视化剔除工作,能够实现的基础在于:每个网格体都能准确隐藏和包含它背后的对象,因此能够使大部分遮蔽准确地识别。
2.2 渲染
渲染包括:Z通道和基础通道。Z通道作用:渲染景深;基础通道作用:渲染几何体的所有部分,会在渲染时逐一处理每个绘制调用。因此渲染的重点在于基础通道。
基础通道最主要的实现在于:绘制调用、基础通道材质(包括光照贴图)、动态实例化。
GBuffer
GBuffer是基础通道的一部分,下面简称GB,GB能够将自己渲染成同一画面的不同版本,通过GB的渲染可以得到:世界法线(缓冲A)、高光度和粗糙度以及金属度(缓冲B)、底色及光照(缓冲C)、其它Buffer(缓冲D、E等等)
这些缓存是由各个图像保存后得到的,可以设置其他延迟渲染。中间显示的图片是由四周的各个缓存整合得到的最终效果图,因此可以对已渲染的版本进行其它渲染操作。
2.3 动态光照阴影
通过动态光照阴影组合可以实现渲染阴影的效果,由于室内和室外的阴影渲染很难采用同一种方案进行,因此需要根据情况来采用不同的解决方法
直接光照。间接光照、介于光照与阴影、光照和阴影
www.alvincr.com
2.3.1 影响光照的因素
直接影响
- IES纹理用于得到更加逼真得光照效果,详情看附录
- 光照函数。支持使用材质与光照混合,可以用于生成水火的效果,还能实现云在地上的阴影效果。
间接影响
- 光照传播系统。过时程序,用于提供实时全局光照。
- 光追GI,目前并不常用
2.3.2 影响阴影的因素
直接影响:
- 法线动态阴影,默认使用缓存生成阴影缓存
- 级联阴影贴图,是三种不同的阴影贴图采用级联方式进行合并,将阴影分成低、中、高三种质量,能够在不同距离进行显示,因此专用于室外环境,
- 距离场阴影。由于阴影渲染必须考虑阴影的几何体贴图,因此会占用大量的资源,但是如果不考虑几何体本身,而是通过对阴影进行预测,那么渲染的速度会大幅提升。通过Mesh DistanceFiled函数可以视点与物体之间的距离,将网格体距离场信息存储在内存中,因此可以提升长时间运行的效率。虽然距离并不是很准确,但是用于远距离阴影足矣,这样就可以设置非常远的阴影了,不过不能用于骨骼网格体。
- 光追阴影。既可以单独使用,也可以混合使用。
- 嵌入式阴影。用于提升角色展示效果。
- 各对象本身阴影。用于提升角色展示效果。
- 接触阴影。用于产生细小的阴影。
间接影响:
- 胶囊体阴影。属于大幅简化的阴影,适用于所有骨骼网格体,因此对于生成大量单位的阴影并且阴影要求不高的时候,具有很好的效果。
- 距离场环境光遮蔽DFAO。适用于非常大并且非常重要的对象,对于精细的对象效果并不好,主要适用于天空光照等室外环境。它使用世界场景中的距离场网格体来给环境光遮蔽着色。
- 光追AO。
2.4 反射
采用堆叠设置方式,从而最大限度减少开销最高的效果。
反射捕获-》平面反射-》
- 反射捕获,性能开销最低,捕获的信息存储在硬盘中,因此可以在世界场景中放置大量的反射捕获。
- 平面反射。精度偏低,性能开销较大,只适用于完全平整的表面,例如地板。墙壁、金属表面并不适合。
- 屏幕空间反射。可以随时调整质量。
- 光追反射。
2.5 其它设置
可以设置天空和大气、指数高度雾和大气雾。
雾:
- 高度雾。用于设置远处和高处雾的淡出效果。
- 大气雾。
- 远距离雾。
- 指数高度雾。可以用来处理体积雾,会读取光照贴图及其设置,用于渲染
- 体积材质。
半透明:
- 材质:设置混合模式和着色模型。
- 半透明度:可以设置屏幕空间反射、光照模式、。其中光照模式主要使用:体积无方向、逐顶点体积无方向、表面向前着色(效果最好,开销最大)。
2.6 后期处理
- 标准色调映射器。执行色调映射实现颜色校正、色调校正、对比度校正。
- 泛光。包括:标准反光、卷积设置(游戏中默认不用,因为性能开销较大)
- 屏幕空间AO,SSAO。
- SSSSS,屏幕空间次表面散射。通常用于皮肤的屏幕空间特效,主要适用于人,树叶也可以。
- SSGI,屏幕空间GI。在整个屏幕空间内实现近似全局光照的效果。
- 景深。包括:高斯景深(用于游戏,效果较差,性能较好)、散射景深、圆形或过场动画景深。
- 曝光度。
- 可混合物。可以使用材质编辑器来进行后期处理,以此来实现各种特效效果。属于内置特效,因此包含在引擎之中,通过可混合物可以启用:粒子、晕映、镜头炫光、尘土遮罩、色差
2.7 性能
主要设置CVar
三:其它
- 统计数据面板。可以合并网格体
- 细节模式。
- 远阴影。类似于远处消退的级联影影贴图。
- 光照范围。可以设置最大绘制距离,还可以生成蓝图去检测距离。
- 材质开销。
- 半透明度。半透明材质的指数十分影响性能,因此在设置材质时应尽可能的关注。使用体积无方向进行测试的速度最快,但是显示的阴影十分模糊。
- 烘焙光照。
UE4渲染的整体流程(可视性、GBuffer、反射、动态光照阴影、后期处理)相关推荐
- 【逆向】UE4 渲染流程分析
UE4作为当今商业引擎界的大佬,渲染和图形质量一直是首屈一指的水准,但是相对于unity来说UE4基本上是一套完整方案提供,不通过源码修改对渲染进行定制的可能性比较小,而且同时UE4这方面的文档很少, ...
- ue4 改变枢轴位置_UE4渲染模块概述(四)---反射
在前一文中介绍了像素着色器与material,大概知道了UE4材质的生产管线: Jerry:UE4渲染模块概述(三)---Pixel Shader & Material Renderingz ...
- Nicholas谈UE4高级渲染:动态光照迭代快
GameLook报道/6月5日,2015年第三期GameLook开放日‧虚幻引擎专场活动在上海正式举行,此次活动由Epic Games与GameLook联合主办. 如何用好UE4引擎,发挥其强大的画面 ...
- ue4渲染速度太慢_UE4 渲染性能设置
LightingAllow Static Lighting : 是否开启静态光照, 开启后将生成 lightmap, shadow map之类的可在静态光照下使用的贴图,否则仅使用动态光照, 修改此项 ...
- 二、Netty服务端/客户端启动整体流程
一.综述 Netty 的整体流程相对来说还是比较复杂的,初学者往往会被绕晕.所以这里总结了一下整体的流程,从而对 Netty 的整体服务流程有一个大致的了解.从功能上,流程可以分为服务启动.建立连接. ...
- 《图解UE4渲染体系》Part 0 引擎基础
在介绍UE4渲染体系前,我们有必要来先看一下UE4是用什么样的方式来构建游戏场景数据的. 1 Object 在UE4中当我们说Object,通常是指代引擎代码中的UObject类,它是引擎里管理绝大部 ...
- 深入浅出Vue.js阅读——整体流程——实例方法与全局API的实现原理
深入浅出Vue.js阅读--整体流程--实例方法与全局API的实现原理 1. 数据相关的实例方法 2. 事件相关的实例方法 1. vm.$on 2. vm.$off 3. vm.$once 4. vm ...
- 机器学习入门(14)— 神经网络学习整体流程、误差反向传播代码实现、误差反向传播梯度确认、误差反向传播使用示例
1. 神经网络学习整体流程 神经网络学习的步骤如下所示. 前提 神经网络中有合适的权重和偏置,调整权重和偏置以便拟合训练数据的过程称为学习.神经网络的学习分为下面 4 个步骤. 步骤1(mini-ba ...
- html页面渲染vue组件,Vue组件页面渲染的基本流程
html: 组件页面渲染的基本流程 main.js: import Vue from "vue"; import Home from "./home.vue"; ...
最新文章
- (推荐)叮当——中文语音对话机器人
- 在linux中输入locate出现locate: can not stat ()的错误
- SQLite数据库Java驱动下载及连接示例(sqlite-jdbc-3.30.1.jar)
- 对Java单例模式 volatile关键字作用的理解
- go消息服务器吗,Go语言聊天服务器
- Acwing第 20 场周赛【未完结】
- OS- -文件系统(四)
- 【bzoj3994】[SDOI2015]约数个数和 莫比乌斯反演
- [bash] printf使用范例
- 将Win10包含中文的用户名改为英文的,解决Anaconda navigator无法运行jupyter的问题
- C++面试常见问题一
- JS:ES6-12 模块化
- 能够生成动态图片的R模块:rCharts
- 俄罗斯方块的那些事:1.概要
- 常用ajax调用方法,web前端之4种常用的Ajax请求方式
- 友善的小精灵 Casper
- 如何使用Dart的Stream(一)
- 左声道,右声道和立体声
- DDR3 SPEC
- Java开发必学:Java翻译器软件下载手机版
热门文章
- DIV+CSS的问题,DIV被挤到下面去了?如何解决?
- 单片机毕业设计 STM32自动泊车系统 - 智能小车 自动停车
- 深入理解C++11 读书笔记(三) 通用与专用
- python request timeout是什么意思_requesttimeout是什么意思
- leetcode 力扣每日一题系列详解——总目录
- vue中plain=true是什么意思
- SAP帐龄分析与计算
- 在Mac上安装Wine
- 资料(http://blog.csdn.net/bogues/archive/2005/11/22/534982.aspx)
- Java学习笔记day05