URP是unity推出的,用于替代Unity原来传统build-in管线。
URP是Unity可编程渲染管线(SRP)的一种,所以了解URP之前需要先了解SRP是什么
SRP是什么?
SRP全称为Scriptable Render Pipeline(可编程渲染管线/脚本化渲染管线),是Unity提供的新渲染系统,可以在Unity通过C#脚本调用一系列API配置和执行渲染命令的方式来实现渲染流程,SRP将这些命令传递给Unity底层图形体系结构,然后再将指令发送给图形API。
说白了就是我们可以用SRP的API来创建自定义的渲染管线,可用来调整渲染流程或修改或增加功能。
它主要把渲染管线拆分成二层:
-
一层是比较底层的渲染API层,像OpenGL,D3D等相关的都封装起来。
-
另一层是渲染管线上层,上层代码使用C#来编写。在C#这层不需要关注底层在不同平台上渲染API的差别,也不需要关注具体如何做一个Draw Call
URP是什么?
它的全称为Universal Render Pipeline(通用渲染管线), 它是Unity官方基于SRP提供的模板,它的前身是LWRP(Lightweight RP即轻量级渲染管线), 在2019.3开始改名为URP,它涵盖了范围广泛的不同平台,是针对跨平台开发而构建的,性能比内置管线要好,另外可以进行自定义,实现不同风格的渲染,通用渲染管线未来将成为在Unity中进行渲染的基础 。
平台范围:可以在Unity当前支持的任何平台上使用
HDRP是什么?
它的全称为High Definition Render Pipeline(高清晰度渲染管线),它也是Unity官方基于SRP提供的模板,它更多是针对高端设备,如游戏主机和高端台式机,它更关注于真实感图形和渲染,该管线仅于以下平台兼容:
- Windows和Windows Store,带有DirectX 11或DirectX 12和Shader Model 5.0
- 现代游戏机(Sony PS4和Microsoft Xbox One)
- 使用金属图形的MacOS(最低版本10.13)
- 具有Vulkan的Linux和Windows平台
在此文章对HDRP不过多描述。
2. 为什么诞生SRP?
内置渲染管线的缺陷
- 定制性差:过去,Unity有一套内置渲染管线,渲染管线全部写在引擎的源码里。大家基本上不能改动,除非是买了Unity源码客户,当然大部分开发者是不会去改源码,所以过去的管线对开发者来说,很难进行定制。
- 代码脓肿,效果效率无法做到最佳:内置渲染管线在一个渲染管线里面支持所有的二十多个平台,包括非常高端的PC平台,也包括非常低端的平台,很老的手机也要支持,所以代码越来越浓肿,很难做到使效率和效果做到最佳。
目的:
- 为了解决仅有一个默认渲染管线,造成的可配置型、可发现性、灵活性等问题。决定在C++端保留一个非常小的渲染内核,让C#端可以通过API暴露出更多的选择性,也就是说,Unity会提供一系列的C# API以及内置渲染管线的C#实现;这样一来,一方面可以保证C++端的代码都能严格通过各种白盒测试,另一方面C#端代码就可以在实际项目中调整。
urp和build in 的区别就是,在传统管线中,这些过程是被封装起来的,想要在特定的步骤做其他事情会非常麻烦,但URP把全过程都暴露了出来,开发者可以定制自己想要的渲染流程,比如,是否需要m_MainLightShadowCasterPass,是用unity默认的shader渲染shadowmap,还是使用自己特殊的shader来支持半透明阴影等,输出的shadowmap格式也可以由自己控制,是8bit的灰度图还是32bit图亦或者其他,render texture的各个通道含义都可以由开发者来定义。
URP 和 内置渲染管线 性能对比
在看URP 和 内置渲染管线 性能对比之前最好先了解DrawCall,Batches,SetPassCalls分别是什么值。
DrawCall,Batches,SetPass calls文章:DrawCall,Batches,SetPass calls是什么?原理?【匠】_以笑对世~的博客-CSDN博客
URP渲染管线与Buildin管线的区别_林深藏却云门寺-CSDN博客_urp渲染管线的优势
Unity URP/SRP 渲染管线浅入深出【匠】_u011105442的专栏-CSDN博客