文章著作权归作者所有。转载请联系作者,并在文中注明出处,给出原文链接。
本系列原更新于作者的github博客,这里给出链接

这一节主要是为上一节中没有提到的一些概念作补充。

上一节提到了Unity中渲染路径的概念,为了更好地理解并使用Unity,我们有必要了解有关渲染路径的详细信息。

Unity Render Pipeline

Unity作为引擎,为我们处理了许多渲染有关的行为细节,最终留下了Built-in Renderer(内置渲染),以及配置度更高的SRP(Scriptable Render Pipeline,可编程渲染管线)

Built-in Renderer

Built-in Renderer是Unity的默认渲染设置,也是一直以来使用的渲染方式。Built-in Renderer为我们处理了绝大多数的细节。Built-in Renderer可以分为Forward(前向) Shading、Deferred(延迟) Shading和Built-in。

Built-in

这是Unity的默认渲染路径。

Forward Shading

在前向渲染中,每个作用于物体的Per-Pixel Light都会单独计算一次,Draw Call数量跟物体数量和光照数量的乘积成正比。它不受硬件限制,可以使用Multi-Sampling Anti-Aliasing(多重采样抗锯齿)等。但在这个模式下,除了Main Directional Light之外,一个物体最多接受4个Per-Pixel Light,超过的部分都会转换为Per-Vertex Light。

Deferred Shading

延迟渲染是通过G-Buffer(几何缓冲)实现的。G-Buffer储存了物体的颜色,法线,材质信息。这个渲染路径没有光照数量的限制,每一个光源都会被视为Per-Pixel Light,都会拥有cookie和shadow。在这个模式下,光照处理的性能消耗和被光照影响的像素数成正比。也就是说,我们可以通过减弱光源强度,缩小光源影响范围,进而提升性能。由于真正的渲染操作被延迟,这个模式不支持多采样抗锯齿和半透明物体的渲染,也不支持Mesh Renderer组件的Receive Shadows设置,剔除选项的受支持度也很有限。

Scriptable Render Pipeline

Unity引擎的内核是C++编写的,外壳是C#脚本构建的,脚本实现各模块之间的交互,编辑器界面等,许多行为都在内核进行了处理,作为游戏开发者只能接触到界面以及API,无法定制化渲染。随着硬件的升级,游戏体量的增加以及游戏玩家对游戏画面的要求逐渐升高,这种配置式的设置就显现出了不足之处。为了适应游戏开发者的需要,Unity决定实现一种新的架构,只在C++端保留渲染的核心功能,把更多的选择交给C#脚本,把控制权移交给开发者,并在2018中加入了SRP。

SRP是一系列C#的API,用于配置各个渲染设置。SRP有三种形式:LWRP(Lightweight Render Pipeline,轻量级渲染管线,这在目前已经得到了官方较好的支持)、HDRP(Hight Definition Render Pipeline,高清渲染管线,目前仍在试验阶段)、自定义渲染管线。LWRP和HDRP都是SRP的一套Asset,LWRP性能较好,HDRP需要更好的硬件支持,当然渲染效果也会更加真实,自定义渲染管线则是基于SRP的接口自定义的一套适用于自己工程的渲染管线配置。

1.5:Unity Render Pipeline的更多相关文章

  1. unity render pipeline

    post process v2 GUI temp8->TaregtPool0->temp8       tem8                      temp8->backbu ...

  2. 1.3:Render Pipeline and GPU Pipeline

    文章著作权归作者所有.转载请联系作者,并在文中注明出处,给出原文链接. 本系列原更新于作者的github博客,这里给出链接. 在学习SubShader之前,我们有必要对 Render Pipeline ...

  3. [Unity] Shader Graph Error 当前渲染管道与此主节点不兼容(The current render pipeline is not compatible with this master node)

    Shader Graph Error  : The current render pipeline is not compatible with this master node 问题产生环境: Un ...

  4. Lightweight Render Pipeline

    (翻译) Lightweight Render Pipeline (LWRP),轻量级渲染管线,是一个Unity预制的Scriptable Render Pipeline (SRP).LWRP可以为移 ...

  5. Scriptable Render Pipeline

    Scriptable Render Pipeline SRP的核心是一堆API集合,使得整个渲染过程及相关配置暴露给用户,使得用户可以精确地控制项目的渲染流程. SRP API为原有的Unity构件提 ...

  6. 【Unity Shaders】使用Unity Render Textures实现画面特效——建立画面特效脚本系统

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  7. WebGPU学习(十一):学习两个优化:“reuse render command buffer”和“dynamic uniform buffer offset”

    大家好,本文介绍了"reuse render command buffer"和"dynamic uniform buffer offset"这两个优化,以及Ch ...

  8. 使用Microsoft的IoC框架:Unity来对.NET应用进行解耦

    1.IoC/DI简介 IoC 即 Inversion of Control,DI 即 Dependency Injection,前一个中文含义为控制反转,后一个译为依赖注入,可以理解成一种编程模式,详 ...

  9. Cesium原理篇:6 Render模块(4: FBO)

    Cesium不仅仅提供了FBO,也就是Framebuffer类,而且整个渲染过程都是在FBO中进行的.FBO,中文就是帧缓冲区,通常都属于高级用法,但其实,如果你了解了它的基本原理后,用起来还是很简单 ...

随机推荐

  1. Python基础之语句2

    一.if条件语句 1.语法: 2.if语句的真值表达式和条件表达式: 例题1:真值表达式判断奇偶数 num = int(input('请输入一个整数:')) if num % 2 : print('该 ...

  2. Error creating bean with name 'dataSource' defined in class path resource 报错解决办法

    在学习spring boot 的数据库操作的时候,报了一串错误

  3. 【Python基础】lpthw - Exercise 37 复习各种符号

    本节需要熟悉python的符号和关键字的功能. 一.关键字 1. and 逻辑与,如 True and False == False的值为True 2. as with...as...的功能类似try ...

  4. Flask(python)异步(ajax)返回json格式数据

    主要讨论两个问题,第一个是关于json.dumps 与jsonify区别,第二个是几种异步的区别(见jQuery中的$.getJSON.$.ajax.$.get.$.post的区别). json.du ...

  5. API认证&SDK&RESTful

    python API的安全认证   我们根据pid加客户端的时间戳进行加密md5(pid|时间戳)得到的单向加密串,与时间戳,或者其它字段的串的url给服务端. 服务端接收到请求的url进行分析 客户 ...

  6. 召回率(Recall),精确率(Precision),平均正确率

    https://blog.csdn.net/yanhx1204/article/details/81017134 摘要 在训练YOLO v2的过程中,系统会显示出一些评价训练效果的值,如Recall, ...

  7. sudo: java 找不到命令

    解决方法: :~$ sudo visudo 在secure_path后加上JDK工具的路径,如: :/jdk安装路径/jdk1..0_144/bin 之后就可以使用"sudo java *. ...

  8. 常用的 jQuery 事件

    $(document).ready(): $(document).ready() 方法允许我们在文档完全加载完后执行函数. click(): click() 方法是当按钮点击事件被触发时会调用一个函数 ...

  9. python中字符串的拼接

    1.+ 号 2.format() 3.f"{username}登录成功" 4.%s 5.列表中的 join 6.逗号 http://www.cnblogs.com/gengcx/p ...

  10. fastjson JSONObject遍历

    private static String getDesc(String jsonStr, String key) { JSONObject jsonObject = JSONObject.parse ...