(原)Unreal 渲染模块 渲染流程
@author:白袍小道
浏览分享随缘,评论不喷亦可。
扯淡部分:
在temp中,乱七八糟的说了下大致的UE过程。下面我们还是稍微别那么任性,一步步来吧。
UE渲染模块牵扯到场景遍历、查询、渲染的具体执行,而UE有是多平台,还在牵扯到上层View,ViewPort,Client等,其中肯定又牵扯到其他系统。(这里就值得我们学习和分析的,如何去管理如此多的模块,如何去平衡,内联下,还能保证有可扩展。此处就不具体扯淡了,后面会具体把相关图和说明在其他二级目录给到)
提前说包含的:
1、ModuleManager, World,
2、ViewClient, ViewFamily, SceneRender, viewInfo,
3、GlobalShader
4、Material
5、ShaderCore, Shader,ShaderParameters
6、RHI(DX,OPGL)
下面开始就直接跳到渲染执行部分了。
正文部分:
注:以下基本是在源码,RenderDoc, 调试堆栈下、其他作者分析,结合而来(怕看错)。
表格走走
|
Pass |
内容 |
备注 |
源码及其位置 |
|
PrePass |
利用DepthDrawingPolicy绘制Depth的深度缓存 |
减少后续中像素填充 |
|
|
BasePass_A |
绘制Opa和mask属性的集合体,将其Material属性填入G-Buffer 计算了光照填图和天光的贡献量(这个词来源于其他,挺好)给到SceneColorBuffer |
|
|
|
BasePass_B: Compute Light Grid |
灯光【点光源,聚光灯,反射截取按照屏幕空间划分空间格子(Gird), |
|
|
|
Occlusion Queries/Test |
遮挡查询和测试(这是物体级别),为NextFrame做好数据) 在根据深度计算query之后数据会传回cpu,就可以计算每个物体有多少像素可见。这样我们就能知道物体最终是否会被渲染。 在不透明物体的query pass之后。Unreal 还有一些其他的query pass,例如灯光(点光源)会有一个ShadowFrustumQUeries(一般是画一个球体)反射则有 PlanarReflection queries(一般是画一个 Cube)/
|
利用集合体的包围盒走z-depth测试(可以看龙书,游戏引擎架构对这部分理论说明) |
|
|
Hierarchical Z |
(这个那啥也不好扯,分层Zbuffer,大体是对Zbuffer做连续downSample.后续细说) https://www.nickdarnell.com/hierarchical-z-buffer-occlusion-culling/ |
|
|
|
ShaderMap
|
实时阴影的计算:按照灯光类型(静固动)做不同处理, 固:StaticMesh Bake到 Static ShadowMap, 动:所有物体投射Shadow 静:非实时 (注意: 对于移动的点光源,用了CubeMap ShadowMap,在CubeShadow Map的第一个Pass,直接Copy了静态物体的ShadowMap缓存,GeoShader来选择画)
|
|
|
|
G-prepass |
|
|
|
|
Velocity rendering |
|
|
|
|
Pre-Lighting |
AO走起 |
|
|
|
Lighting |
光照计算:预处理组合型光照(这个也有书嘿嘿),延时贴花,SSAO,RenderLights |
|
|
|
ImageBased lighting |
一些光照效果,SSR,ReflectionProbe等 |
|
|
|
Draw atmosphere
|
deferred shading 中需要的G-buffers: |
|
|
|
Draw Fog |
非透明表面逐像素的算 |
|
|
|
Draw Tanslucency |
透明(注意下切了底层DX 状态[DX的状态这里不扯],RHICmdList) |
|
|
|
Post |
后期 |
|
|

细细来说:
(。。。。。待续)
(原)Unreal 渲染模块 渲染流程的更多相关文章
- (原)Unreal Shader模块(一): 着色创建
一.着色加载 这里说的Shader是编译后的文件或内存 源码说明 --------------------------------------------------------------- ...
- (原)Unreal渲染模块 管线 - 着色器(1)
@author: 白袍小道 转载悄悄说明下 随缘查看,施主开心就好 说明: 本篇继续Unreal搬山部分的渲染模块的Shader部分, 主要牵扯模块RenderCore, ShaderCore, RH ...
- (原)Unreal渲染模块 源码和实例分析说明
@author:白袍小道 说明 1.由于小道就三境武夫而已,而UE渲染部分不仅管理挺大,而且牵扯技术和内容驳杂,所以才有这篇梳理. 2.尽量会按书籍和资料,源码,小模块的调试和搬山(就是敲键盘)..等 ...
- (原)Unreal 渲染模块引言Temp
@author:白袍小道 引言 本文只在对Unreal渲染模块做一些详细的理解,务求能分析出个大概. 其中框架的思想和实现的过程,是非常值得学习和推敲一二的. 涉及资源系统,材 ...
- (原)Unreal渲染模块 管线 - 程序和场景查询
@author: 白袍小道 查看随意,转载随缘 第一部分: 这里主要关心加速算法,和该阶段相关的UE模块的结构和组件的处理. What-HOW-Why-HOW-What(嘿嘿,老规矩) 1.渲 ...
- (整)Unreal渲染模块 框总览
@author: 黑袍小道 随缘查看 说明 由于搬山的渲染这部分担心自己理解错误,故而搬移官方下,后面整个完成再反过来更新 (这当且仅当做Unreal的帮助文档). 图形编程 模块 渲 ...
- DRF框架(一)——restful接口规范、基于规范下使用原生django接口查询和增加、原生Django CBV请求生命周期源码分析、drf请求生命周期源码分析、请求模块request、渲染模块render
DRF框架 全称:django-rest framework 知识点 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码 - 基于restful规范下的CBV接口 3.请求组件 ...
- drf框架概况-resful接口规范-请求模块-渲染模块-Postman-drf请求生命周期
drf框架 全称:django-rest- framework 知识点: """ 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码-基于restful ...
- Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基础文件配置,Web框架的本质,服务器程序和应用程序(wsgiref服务端模块,jinja2模板渲染模块)的使用
Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基 ...
随机推荐
- ubuntu 报错E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unav E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process us
1.配置xshell,查看虚拟机中ubuntu中网络ip ifconfig 报错 Command 'ifconfig' not found, but can be installed with: su ...
- 【Java-Method】读《重构》有感_Java方法到底是传值调用还是传引用调用(传钥匙调用)
今天读<重构>P279, Separate Query from Modifier,将查询函数和修改函数分离. 问题的产生 突然想到 Java 的传对象作为参数的方法到底是 传引用调用,还 ...
- ipython notebook超级好用
这个东西超级好用,以后要以c++和python为主要沟通语言了.
- AMD、CMD、CommonJs和ES6对比
一.AMD(异步模块定义) AMD(异步模块定义)是RequireJS在推广过程中对模块定义的规范化产出.AMD是一个概念,RequireJs是对这个概念的实现.比如javascript语言是对ECM ...
- Oracle 启动 停止JOB
转自:https://www.cnblogs.com/qianbing/p/6971633.html --查看job下次执行时间以及间隔时间 '; --启动job ); --停用job EXEC DB ...
- sqlite3基本操作
在移动设备上进行高性能高效率的大量数据存储,我们一般用得时sqlite这款轻巧型的数据库,这里介绍其增删改查基本功能 在ios开发中我们需要先导入"libsqlite3.dylib" ...
- 微信小程序日期选择器
/* JS代码部分 */ const date = new Date() const years = [] const months = [] const days = [] const hours ...
- Windows的cmd命令查询指定端口占用的进程并关闭
以端口8080为例: 1.查找对应的端口占用的进程:netstat -aon|findstr "8080" ,找到占用8080端口对应的程序的PID号: 2.根据PID号 ...
- Salt-ssh 自动安装salt-minion
作用:为了不手动去安装一台一台去salt-minion,并进重复的配置 一.环境 系统环境: #cat /etc/redhat-release CentOS Linux release 7.4.170 ...
- Nginx无法加载.woff .eot .svg .ttf等解决办法
在Nginx的配置文件,加上以下代码即可修复该问题 location ~ \.(eot|otf|ttf|woff|svg)$ { add_header Access-Control-Allow-Ori ...