将来,URP管线将取代内置渲染管线,成为Unity中的默认渲染管线。Unity历经几年的专一开发,URP技术现已非常牢靠,能够投入生产。
本教程介绍了内置渲染管线到URP管线的迁徙,应用具体案例联合具体代码,详细分析如何在具体URP管线的我的项目中做渲染,从光照到暗影(通过批改源码来反对多光源暗影),再到后处理。渲染案例剖析之后又深刻性能优化局部具体介绍SRP Batcher、GPU Instancing如何在具体我的项目中做优化以及它们是如何给我的项目带来性能晋升的。
- 可编程渲染管线概念
- 探索SRP Batcher(失效,生效条件以及性能优化)
- URP 和 内置渲染管线的光照
- URP管线下的成果实现(应用Renderer Feature)
- URP管线下的GPU Instancing(失效,生效条件以及和SRP Batcher的关系)
作者于洋,Unity技术专家、引擎组组长。曾就任于人人网、Kabam、竞技世界。从事游戏开发十余年,经验了从Flash到Unity的游戏开发过程,长期从事游戏渲染和性能优化相干工作,对PBR、云、雾、地形、URP管线等有深入研究,曾参加过《Legacy of Zeus》、《荒岛求生》、《mythwar puzzle》等游戏的渲染和性能优化工作,乐于分享渲染和优化的相干技术。
目录
1|可编程渲染管线简介
2|如何将Built-in管线降级为URP管线
3|探索SRP Batcher
4|URP和内置渲染管线的光照
5|URP管线下的成果实现
6|URP管线下应用GPU Instancing(附demo下载)
本篇转载自《URP管线全解析》的第1节。
1|可编程渲染管线简介
1.1 SRP是什么?
Unity的渲染管线能够分为Built-in内置渲染管线和SRP可编程渲染管线,其中SRP可编程渲染管线又可分为HDRP和URP,如下图所示(图片来自网络):
SRP全称为Scriptable Render Pipeline(即可编程渲染管线/脚本化渲染管线),是Unity提供的新渲染零碎,是能够在Unity通过C#脚本调用一系列API配置和执行渲染命令的形式来实现的渲染流程,SRP将这些命令传递给Unity底层图形体系结构,而后再将指令发送给图形API。
简略来说,就是咱们能够用SRP的API来创立自定义的渲染管线,用来调整渲染流程或批改或减少性能。
它次要把渲染管线拆分成二层:一层是比拟底层的渲染API层,像OpenGL,D3D等相干的都封装起来;另一层是渲染管线下层,下层代码应用C#来编写。在C#这层不须要关注底层在不同平台上渲染API的差异,也不须要关注具体如何做一个DrawCall。
1.2 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平台
1.3 URP是什么?
它的全称为Universal Render Pipeline(通用渲染管线),也是Unity官网基于SRP提供的模板,它的前身是LWRP(Lightweight RP即轻量级渲染管线),在2019.3版本开始改名为URP,它涵盖了范畴宽泛的不同平台,是针对跨平台开发而构建的,性能比内置管线要好,另外能够进行自定义、实现不同格调的渲染,通用渲染管线将来将成为在Unity中进行渲染的根底 。
平台范畴:能够在Unity以后反对的任何平台上应用。
以上根本梳理了一些基本概念。
1.4 为什么诞生SRP?
内置渲染管线的缺点
定制性差:Unity的内置渲染管线,渲染管线全副写在引擎的源码里。大家基本上不能改变,当然大部分开发者是不会去改源码,所以过来的管线对开发者来说,很难进行定制。想要有非凡订制的Unity引擎,须要高额跟Unity购买服务,Unity的工作人员会依照客户的需要去批改管线,为客户量身定做一款引擎。
钻研过Unity源代码的同学应该会晓得,其代码极其臃肿,成果效率无奈做到最佳:内置渲染管线在一个渲染管线外面反对所有的平台,包含十分高端的PC平台,也包含十分低端的平台,很老的手机也要反对,所以代码越来越臃肿,很难做到使效率和成果都做到最佳。
为了解决仅有一个默认渲染管线,造成的可配置型、可发现性、灵活性等问题。决定在C++端保留一个十分小的渲染内核,让C#端能够通过API暴露出更多的选择性,也就是说,Unity会提供一系列的C# API以及内置渲染管线的C#实现;这样一来,一方面能够保障C++端的代码都能严格通过各种白盒测试,另一方面C#端代码就能够在理论我的项目中调整。(摘自网络)
以上就是《URP管线全解析》的第1节,此篇文章比拟适宜从事游戏开发的Unity客户端开发人员、心愿晋升渲染和性能优化能力的人以及对可编程渲染管线感兴趣的读者。
读完全篇后你会深刻理解URP管线的具体案例实操以及性能优化相干剖析;并把握如何将内置管线晋升为可编程渲染管线;如何在URP管线中做光照以及通过批改源码来反对多光源暗影及如何应用SRP Batcher以及 GPU Instancing等技能。