将来,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 等技能。