Unity采样器过多导致URP默认的Lit.Shader报错(shader error in ‘universal render pipeline/lit’: maximum ps_4_0 samp)

这段时间在用Unity2021开发一个项目,项目比较庞大,场景很多,有好几十个,上周突然在编译热更资源和脚本,准备出包,出包后发现场景中基本上所有的材质都是紫色,于是我第一时间怀疑是热更资源的问题,仔细检查了shaderAB包,检查了服务器在AB资源包,且shader材质也被正确加载了,因为我在Editor下重新赋值则又有材质,因为我们用的是URP默认的Lit,当时以为是shader变体收集的问题,捣鼓了半天,也只找回了部分材质,万般无奈之下,只好创建了一个新的工程,把原有工程进行了迁移,然后重新构建测试,没问题后我放心了。

没想到昨天晚上又发现了几个报错,突然想起来上次好像也是因为有这个报错后,材质就丢失了,我顿时就觉得很奇怪,网上搜索之后发现是DX11平台默认支持的采样器只能是16个,我当时就了解了一下什么是采样器。

在这里插入图片描述

纹理采样器(Texture Sampler) : 是显卡硬件(GPU)中专门用来读取和处理纹理数据的单元。它负责在着色器中从纹理中获取颜色值或其他数据,并执行一系列操作,如过滤、mipmapping、寻址模式等。

在Shader(着色器)中,你可以通过纹理采样器从2D、3D或立方体贴图等纹理中采集数据,并将这些数据应用到对象的材质上,比如用于计算颜色、光照、法线等效果。典型的纹理采样器节点就是 Sample Texture 2D。

于是我检查了我报错Physical3DsMax的Shader Graph,发现的确存在多个Simple Texture2D的节点,但是我依旧觉得很奇怪,这些都是Unity URP Package包中的默认材质,为什么会有问题? 以及为什么超过所谓的16个采样器的限制就会报错,以及我因为什么原因导致纹理采样器超出?

在这里插入图片描述

一.为什么纹理采样器超出16个Shader就会报错?

是因为每种Shader Model和GPU都有一个对纹理采样器数量的限制,是因为每个采样器都需要在显卡占用一个独立的寄存器,而寄存器的数量是有限的,当超过限制,显卡无法分配更多的寄存器给新的采样器,因此会导致编译错误

二.什么原因导致纹理采样器超出16个?

Shader中多个Sample Texture2D,Sample Texture3D或者类似节点的使用,该类节点都需要一个采样器,如果Shader使用超过了16个纹理采样器,如多个Base Color,Normal Map等,就容易超出。

1.Subgraph或复杂的Shader Graph结构:
使用了多个Subgraph,尤其是Subgraph中包含了额外的纹理采样器。Subgraph是Shader Graph的一种复用机制,它可能在内部进行了多个纹理采样。
复杂的Shader Graph可能在不同路径上使用了很多纹理采样节点,导致总数超出限制。

2.重复的纹理采样操作:

如果在同一个Shader中多次采样相同的纹理(例如,在不同的材质属性或通道中使用),这会消耗额外的纹理采样器寄存器,尽管它们都指向同一纹理。
某些纹理可能被不必要地多次采样,例如在不同的光照模型或效果中反复使用同一张纹理,但没有共享其采样结果。

3.高精度多Pass着色:

在复杂的Shader中,为了计算不同的光照、反射、折射等效果,可能需要从多种不同的纹理中采集数据。这会导致采样器数量增长。

虽然了解了报错产生的原因,但是依旧没有解决问题,最终是找到了答案,原因就是Unity URP团队留下的坑,其实就是Light Cookie的问题
在这里插入图片描述
于是我将UPR的包从Library/PackageCache/[email protected]拷贝到Package文件夹下,先对Lit.shader代码进行修改,注释掉了LightCookie
在这里插入图片描述
在这里插入图片描述
其次对PhysicalMaterial3DsMax进行处理,在URP/Editor/ShaderGraph/Targets/UniversalLitSubTarget.cs
禁用Cookie
在这里插入图片描述

报错等待Unity重新编译, 两个Shader的报错没了,因为注释掉了multicompile 关键字,这会让我们包体和Shader变体减少,从而构建时长得到了明显缩短,由于我的版本是Unity2021LTS只能通过这种方式修复,如果是在Unity2023.2中有一个选项可以在URP的设置中禁用Light Cookies

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41884036/article/details/142584325