找回密码
 立即注册
查看: 166|回复: 0

Unity 轻量级衬着管线LWRP/URP详解

[复制链接]
发表于 2024-7-15 17:56 | 显示全部楼层 |阅读模式
Unity 可编程衬着管线, LWRP轻量级衬着管线(Light Weight Render Pipeline)出来有一段时间了, 今天写一遍文章,详细的介绍一下可编程衬着管线与LWRP轻量级衬着管线相关内容,辅佐大师搞懂这些概念,并成立起一个学习可编程衬着管线/轻量级衬着管线的思维。整个文章我将会分成4个部门来个大师讲解:


对啦!这里有个游戏开发交流小组里面堆积了一帮热爱学习unity的零基础小白,也有一些正在从事unity开发的技术大佬,欢迎你来交流学习。
每个Unity版本,实现的轻量级衬着管线LWRP的代码可能都纷歧样,但是思路道理基本都差不多。
1: 什么是衬着管线与向前衬着
   我本人非常否决高大上的概念包装,唯独游戏中的”衬着”是例外之一。通俗点说衬着就是衬托出相应的环境(光照,暗影,遮挡,反射,折射等),把物体在特定的环境中绘制出来。Unity引擎里把引擎中完成整个游戏场景,人物, 环境,光照等游戏画面绘制相关,最终把画面绘制到屏幕上的整套逻辑与相关代码(普通代码与Shader代码)称为衬着管线。


  早期的Unity引擎,把整个衬着管线都内置在引擎里面,没有开放给开发者,只有少数的一些大厂,获得了Unity引擎源码授权,能改削和定制里面的衬着管线相关代码。Unity内置的衬着管线有: 向前衬着,延时衬着等,目前这两种用的斗劲多。Unity引擎默认使用”向前衬着”。接下来我说一下向前衬着管线中的一个衬着策略,为了后面对比轻量级衬着管线做好铺垫。向前衬着管线可以措置任意多的光源,措置多光源的时候,每个重要光源,城市调用一次Shader里面的Pass来完成衬着,有几个重要光源就会衬着几次,这样大大降低了多光源时候的绘制效率。所以之前我们很多手机游戏上面都用静态光照来衬着场景,获得传神的光照效果,因为向前衬着管线多光源的实时计算开销实在太大。静态光照有一个问题就是无法获得实时光照的效果。
2: 什么是可编程衬着管线


3: 轻量级衬着管线与它的基本使用
  内置的衬着管线是针对通用情况,比如撑持任意数目的光源等,所以很多策略并不是特定的环境下,针对特定应用场景而得到的最佳的策略,此刻手机游戏非常的广泛,还有很多其它的游戏平台,需要好的衬着效果的同时,需要一个好的性能。比如我就但愿有多光源的实时光照,我的角色到了光源附近能衬着出光的效果出来,而不是使用静态光照那样。同时我们又不需要任意多的光源,只要限定一个光源数目即可,比如4个。这样就可以通过定制衬着管线,提升性能,比如我们最多撑持4个光源,我把所有光源的计算一起放到一个Pass里面,这样提升性能的同时,又获得实时的光照,虽然对光源的数目做了一些限制(轻量化),却获得了效果和性能的一个灵活的平衡。Unity 针对手游等应用范围,开发了轻量级衬着管线(LWRP),后来基于轻量级衬着管线又衍生出来此外一个衬着管线Universal Render Pipeline(URP,这边文章我们用的是URP的代码)。
  衬着管线的衬着策略被定制了,衬着的时候需要Shader来配合最终绘制物体出来,所以分歧的衬着管线Shader会纷歧样,我们之前学习的Shader开发都是针对向前衬着管线的,比如轻量级衬着管线所有光照计算都在一个Pass,那么之前向前衬着的Shader必定就不能直接使用了。所以当我们定制了新的衬着管线以后,还要基于新的衬着管线的策略从头开发一个Shader包(PBR Shader, 粒子, 雾,天空盒等),这个Shader包能满足大部门的3D游戏开发的需求,同时我们也可以基于新的衬着管线的策略来开发本身的Shader。
   总结一下定制衬着管线的主要的3个点:


完全从头至尾定制一个衬着管线并不容易,幸运的是Unity引擎为我们做好了轻量级的衬着管线,满足我们做手机游戏的绝大部门的需求。我们只要使用就可以了,如何使用轻量级衬着管线,这里我们已URP为例:

  • 安装URP的相关的Unity Package, 分歧的Unity的版本可能URP的代码版本纷歧样。
(2) 使用URP衬着管线来代替内置的衬着管线。先创建一个衬着管线的Asset文件,配置好相关数据,创建成功后,在Grpahics下面的Scriptable Render Pipeline选择这个Asset文件,切换衬着管线成功。系统会按照Asset文件的描述来创建出衬着管线出来。如图:


   (3) 创建角色,场景,创建材质的时候,使用衬着URP衬着管线相关的Shader;
   4: 轻量级衬着管线Shader 模板布局




仍然是基于ShaderLab, 和普通的Shader布局,没有区别。
我们来看几个重要的Pass, 体会一下和向前衬着管线的分歧。先来看主要的绘制Pass,措置光照计算的,正如红线标注的一样,所有的光源在一个Pass里面计算完成。


看下暗影投射的Pass:


看下HLSL代码,和Cg差不多,所以学习的时候不用由心里承担, 打开LitForwardPass.hlsl,这个文件就是URP里面PBR Shader具体实现的代码。截图如下,数据布局这些和Cg没有太大的分歧,如图:


由于篇幅有限,没有法子把Shader详细代码的讲解一遍,为此我还提供了本文对应的代码与视频讲解(里面详细讲解了Shader布局),需要的可以进入学习小组,答复”LWRP”,来学习免费学习视频教程,并获取课程源码。 URP衬着管线效果截图如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-23 16:13 , Processed in 0.100340 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表