@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 渲染模块 渲染流程的更多相关文章

  1. (原)Unreal Shader模块(一): 着色创建

    一.着色加载 这里说的Shader是编译后的文件或内存     源码说明 --------------------------------------------------------------- ...

  2. (原)Unreal渲染模块 管线 - 着色器(1)

    @author: 白袍小道 转载悄悄说明下 随缘查看,施主开心就好 说明: 本篇继续Unreal搬山部分的渲染模块的Shader部分, 主要牵扯模块RenderCore, ShaderCore, RH ...

  3. (原)Unreal渲染模块 源码和实例分析说明

    @author:白袍小道 说明 1.由于小道就三境武夫而已,而UE渲染部分不仅管理挺大,而且牵扯技术和内容驳杂,所以才有这篇梳理. 2.尽量会按书籍和资料,源码,小模块的调试和搬山(就是敲键盘)..等 ...

  4. (原)Unreal 渲染模块引言Temp

            @author:白袍小道     引言 本文只在对Unreal渲染模块做一些详细的理解,务求能分析出个大概. 其中框架的思想和实现的过程,是非常值得学习和推敲一二的. 涉及资源系统,材 ...

  5. (原)Unreal渲染模块 管线 - 程序和场景查询

    @author: 白袍小道 查看随意,转载随缘     第一部分: 这里主要关心加速算法,和该阶段相关的UE模块的结构和组件的处理. What-HOW-Why-HOW-What(嘿嘿,老规矩) 1.渲 ...

  6. (整)Unreal渲染模块 框总览

    @author: 黑袍小道 随缘查看     说明 由于搬山的渲染这部分担心自己理解错误,故而搬移官方下,后面整个完成再反过来更新 (这当且仅当做Unreal的帮助文档).     图形编程 模块 渲 ...

  7. DRF框架(一)——restful接口规范、基于规范下使用原生django接口查询和增加、原生Django CBV请求生命周期源码分析、drf请求生命周期源码分析、请求模块request、渲染模块render

    DRF框架    全称:django-rest framework 知识点 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码 - 基于restful规范下的CBV接口 3.请求组件 ...

  8. drf框架概况-resful接口规范-请求模块-渲染模块-Postman-drf请求生命周期

    drf框架 全称:django-rest- framework 知识点: """ 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码-基于restful ...

  9. Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基础文件配置,Web框架的本质,服务器程序和应用程序(wsgiref服务端模块,jinja2模板渲染模块)的使用

    Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基 ...

随机推荐

  1. [pytorch] Pytorch入门

    Pytorch入门 简单容易上手,感觉比keras好理解多了,和mxnet很像(似乎mxnet有点借鉴pytorch),记一记. 直接从例子开始学,基础知识咱已经看了很多论文了... import t ...

  2. 【转】关于Eclipse创建Android项目时,会多出一个appcompat_v7的问题

    问题描述: 使用eclipse创建一个Android项目时,发现project列表中会多创建出一个appcompat_v7项目,再创建一个Android项目时,又会再多出一个appcompat_v7_ ...

  3. leanote开源云笔记

    下载链接 http://yunpan.cn/cZ42hEEQcYMMz (提取码:16a1)

  4. 关于Java的反射机制,你需要理解这些..

    转载请标明出处: http://blog.csdn.net/forezp/article/details/53730429 本文出自方志朋的博客 反射机制是在运行状态中,对于任意一个类,都能够知道这个 ...

  5. 【复杂度分析】loj#6043. 「雅礼集训 2017 Day7」蛐蛐国的修墙方案

    感觉有点假 题目大意 数据范围:$n<=100$ 题目分析 由于题目给出的是 置换,所以相当于只需枚举每个环的两个状态. 主要是复杂度分析这里: 一元环:不存在 二元环:特判保平安 三元环:不存 ...

  6. java.lang.UnsupportedOperationException: Exception occurred during processing request: null

    1.Action有问题,Struts2注解拼写错误,注解包版本不匹配! 2.今天还有一个错误,Tomcat服务器异常,无法启动,Remove/clean后还是无法启动 :极大可能是web.xml 写错 ...

  7. django+xadmin在线教育平台(十二)

    6-4 用form实现登录-1 上面我们的用户登录的方法是基于函数来做的.本节我们做一个基于类方法的版本. 要求对类的继承有了解. 基础教程中基本上都是基于函数来做的,其实更推荐基于类来做.基于类可以 ...

  8. Docker自学纪实(二)Docker基本操作

    安装docker 以CentOS7为例: 安装:yum -y install docker 启动:systemctl start docker 设置开机自启:systemctl enable dock ...

  9. LEA指令与MOV指令区别

    Tips: LEA指令与MOV指令的区别: ① MOV指令是 数据        传送指令-------传送数据 LEA指令是   有效地址 传送指令-------取偏移地址 ② MOV OPRD1 ...

  10. 传输控制协议(TCP)

    传输控制协议(TCP)[来自Unix网络编程(卷一)第2章] 1.TCP是一个面向连接.可靠性的传输协议: 2.TCP含有用于动态估算客户与服务器之间往返时间(RTT)的算法,以便它知道等待一个确认需 ...