乐趣区

关于rendering:URP下与Builtin的Light-Color不一致

1)URP 下与 Built-in 的 Light Color 不统一
​2)开启 MSAA 的 RenderTarget 会对没开启 MSAA 的 RenderTarget 造成影响
3)角色 Mesh 合并的长处与毛病
4)NGUI 渲染层级的原理
5)Unity 上 App 图标装置到设施上图标含糊,设置上的留神点


这是第 234 篇 UWA 技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫 10 分钟,认真读完必有播种。

UWA 问答社区:answer.uwa4d.com
UWA QQ 群 2:793972859(原群已满员)

Rendering

Q:发现 Light 的 Intensity 在不为 1 的状况下,光照的色彩在 URP 下滑 Built-in 管线下不统一。附件里有 2 个工程,应用 Unity 2019.4.11f1,别离是 URP 和 Built-in 管线的(都是线性空间)。(附件可戳原问答下载)

再现办法:
1. 关上 2 边工程的 Scene1,这个场景的方向光 Intensity 值设置为 1。察看 2 个工程里球的光照色彩,是统一的,通过 FrameDebugger 也能够确认这一点。

2. 关上 2 边工程的 Scene2,这个场景的方向光 Intensity 值设置为 0.65。察看 2 个工程里球的光照色彩,Built-in 管线的更暗,通过 FrameDebugger 也能够看到 Built-in 管线的工程光照色彩数值小一点。

URP 色彩:

Built-in 色彩:

URP FrameDebugger:

Built-in FrameDebugger:

A:用楼主 Demo 外面的 Light 的色彩做了一下计算,在 Light 设置项外面,Light Color 为(0,202,255),202.0/255 = 0.792。

SRP:
Green 通道:
Mathf.GammaToLinearSpace(0.792) 0.65=0.5906189 0.65= 0.383902285

Blue 通道:
Mathf.GammaToLinearSpace(1) 0.65=1 0.65=0.65

Built-in:
Green 通道:
Mathf.GammaToLinearSpace(0.792*0.65)=0.2280943

Blue 通道:
Mathf.GammaToLinearSpace(0.65)=0.3800563

应该是上面两段数值的计算区别:
GammaToLinearSpace(m_ColorFilter * m_Intensity);
GammaToLinearSpace(m_ColorFilter) * m_Intensity;

查问发现是因为 GraphicsSettings.lightsUseLinearIntensity 这个数值不一样导致的。在 SRP 外面这个数值是 True,在 Built-in 外面是 False。

感激 Xuan@UWA 问答社区提供了答复

Rendering

Q:在同一帧中,我有用于渲染的 RenderTarget 开启了 MSAA,和用于热扭曲成果的扭曲 Buff,是一张没有开启 MSAA 的 RenderTarget,在后处理中这张扭曲 Buff 会用来偏移 UV,以实现扭曲成果。在 PC 上和 iOS 上一切正常,然而在 Android 真机上出现异常。在高通 GPU 上,这张扭曲 Buff 会导致屏幕呈现网格状的景象,在 Mali GPU 上会呈现各种细碎的小黑方块,应该是一个未知起因导致扭曲 Buff 上的数据被解决成我不冀望的状态。

如果我把其余的 RenderTarget 的 MSAA 敞开,这种景象就会隐没,也就说开启 MSAA 的 RenderTarget 会对没开启 MSAA 的 RenderTarget 造成影响,且仅仅是在 Android 真机上呈现,不同的 GPU 体现还不一样。有遇到相似问题的吗?求解。

A:该问题曾经解决了。我所遇到的问题的最终状况,不是开启 MSAA 的 RenderTarget 会对没开启 MSAA 的 RenderTarget 造成影响。在开启 MSAA 后,主相机的 RenderTexture(MSAA)绑定到 Shader 上,会有相似如下操作:

texture(_Main_Tex, UV + Offset) 

不晓得是 Unity 的 Bug 还是其余起因,导致在 Android 真机上,绑定到 Shader 上的 RenderTexture 肯定不是通过无效 ResolveAA 的版本,所以在如上操作的时候就出现异常体现,相似细碎方块或者网格等等景象,如果 Offset 是 0,不会有异样体现,这些应该和 Mobile GPU 上的 TBR 有关系。

那么我须要在 Android 真机上传入一张通过无效 ResolveAA 的 RenderTexture 即可。通过验证,应用如下形式能够解决:

RenderTexture.Blit(Rt_msaa, Rt_no_msaa); 

这样我就失去一张通过无效 ResolveAA 的 Rt。

感激题主 yangkang@UWA 问答社区提供了答复

Rendering

Q:为了让身材各部件合并,所有部件都要开启 Readable/Writable 属性,合并也创立新的 Mesh 来合并,多个部件合并成一个 Mesh 有什么益处吗?

游戏类型是 MMOARPG,比方能够换头发、脸、衣服等,资源量很大,如果不合并,走挂点的形式与合并成一个 Mesh 会怎么样呢?

A:第一个问题的益处应该就是不便合批,害处除了你说的几点,还有贴图的合并,这些点都会造成内存的额定开销。是否利用还是应该看具体的我的项目类型。

第二个问题其实就是内存换 Draw Call,看你们我的项目这两块哪一部分是瓶颈了。另外还须要留神材质,如果各部位材质差异很大也是无奈合批的。

感激范君 @UWA 问答社区提供了答复

NGUI

Q:Unity Shader 判断层级关系的唯一标准是否是深度测试?我看 NGUI 的 Shader 并没有 ZTest 配置并且敞开了深度写入,那应该是依据渲染的先后顺序来管制层级?也就是说 sortOrder sortLayerName renderQ camera depth 都只是 Unity 在管制不同组件进入渲染流水线的程序吗?

A:深度测试在传统的渲染管线里,是产生在 Fragment Shader 之后(不思考 Early Z 等优化技术),用来剔除那些被遮挡的像素。自身和 Draw Call 提交的程序没有关系。

Unity 引擎中,有很多参数能决定渲染程序,也就是 Draw Call 提交程序。

首先最高优先级的是 Camera,引擎中的渲染是由 Camera 发动的,在 Built-in 管线中,次要依附 Camera 的 Depth 来决定哪个 Camera 看到的物体先渲染。最常见的构造,比方 Depth= 0 的相机画场景,另一个 Depth= 1 的相机画 UI。然而,当初 URP 里的相机的 Camera Stack 也是相似的构造,用来管制 Camera 的渲染先后顺序。

而后是 RenderQueue,这个用来决定物体的渲染程序。例如,内置的 Opaque 和 Transparent 等等,具体能够看 Unity 的文档,这个值就是越小的物体越先画。同一个 RenderQueue 里,不同类型的物体渲染程序也是有肯定规定。比方,引擎默认的排序规定下 Opaque 的物体个别是从返回后渲染,而 Transparent 的物体为了保障渲染的正确性,是须要从后往前渲染的。

SortingLayer 和 OrderInLayer 之类的次要用在 UGUI Canvas 上,能影响 UI 的渲染程序。

另外,问题中有提到 UI 的 Shader 中没有配置 ZTest,敞开 ZWrite,这也是失常的,具体开什么关什么,是要依据渲染的物体的类型决定的。因为 UI 排序个别由 UI 零碎外部的一些参数决定,是和深度无关的。惯例的一些通明物体也是会敞开 ZWrite,只保留 ZTest 的。

感激范君 @UWA 问答社区提供了答复

Editor

Q:Unity 上 App 图标装置到设施上图标含糊,设置上有什么特地留神的吗?

A1:请题主查下 Unity 的 Import Settings,这个是对打在包里的图标文件也有作用的,能够将这些图标的 Import Settings 中的压缩去掉。

感激芭妮妮 @UWA 问答社区提供了答复

A2:补充一下,也须要留神自身图标的设置。咱们因为是导出工程,所以应用的图标资源其实是跟安卓版本统一有多个分辨率版本。

感激 ZeaLotSean@UWA 问答社区提供了答复

图片来源于网络


明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在 UWA 问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官网技术博客:blog.uwa4d.com
官网问答社区:answer.uwa4d.com
UWA 学堂:edu.uwa4d.com
官网技术 QQ 群:793972859(原群已满员)

退出移动版