本文地址:https://blog.csdn.net/t163361/article/details/127530893
前段时间把产品从Unity2018升级到Unity2021,遇到了一些小问题,整体过程比较顺利。 最近升级到HDRP,过程就比较坎坷了。 Unity版本2021.3.0f1c1 下面是踩坑记录。
加载Assetbundle场景效果和原场景效果不一致
我们的场景是美术单独用Unity打包的,和程序工程相互独立,然后生成assetbundle,主工程加载,发现效果对不上。 解决方案:
- 解决效果不一致问题之前,一定要保证,使用相同的Unity版本,HDRP版本也要保持一致
- 使用相同的RenderPipelineAsset。
包括HDRenderPipelineAsset和HDRenderPipelineGlobalSettings两个文件,以及GlobalSettings中引用的VolumeProfiles和DiffusionProfileAssets文件。同时需要保证两个项目中的Graphics和Quality中设置的RenderPipelineAsset需要相同(Graphics和Quality可以设置不同的asset文件,但需要两个工程保持一致),其中GlobalSettings文件中的VolumeProfiles和DiffusionProfileAssets文件也需要保持一致。同时最关键的需要保证两个项目中以上所有文件对应的meta文件需要保持一致,不然会导致加载后索引不到对应的引用而产生画面差异。如果你发现场景光没啥大问题,但是某些场景物件有细微差别,那大概率是DiffusionProfileAssets文件不同导致的。 - Decal无法看到的问题
上面说所的文件不一致导致的,HDRenderPipelineAsset文件中有个开关Rendering->Decals.同时Unity2021.3.0f1c1对应的HDRP版本中有个Bug,Decal开关会影响到场景中物体的反射/金属度效果。 - 远处的纹理分级模糊
Quality中的Anisortopic Textures需要修改成Forced On - 场景中支持透明的纹理模糊闪烁
关闭HDRenderPipelineAsset文件中的Rendering->Low res Transparency - 给相机设置的RenderTexture纹理半透丢失
将HDRenderPipelineAsset文件中的Rendering->ColorBufferFormat设置为R16G16B16A16
功能失效
有一些功能在HDRP下面已经无法使用了
- 所有使用OnPostRender支持的功能都失效
此函数在HDRP中不支持,需要自己写CustomPass自己实现 - Graphics.DrawMeshNow无法渲染模型
此函数无法在HDRP中使用,需要自己写CustomPass,拿去pass中提供的CommandBuffer,然后调用DrawMesh函数渲染 - GL.Draw和GL.Vector3等无法使用
此函数无法在HDRP中使用,需要自己写CustomPass,拿去pass中提供的CommandBuffer,然后调用DrawMesh函数渲染。也有一些其他方案可以看这个贴子gl-draw-in-hdrp
功能异常
- UI显示异常
当UI使用Screen Space - Camera或者World Space时,UI也会被后处理所影响,需要把Enviroment中的VolumeMask和Probe Layer Mask关闭对应的后效 - UI相机和场景相机叠加异常
当UI相机和场景相机同时往一个Display输出时,UI相机会导致场景相机的效果异常,解决方案,把相机相机输出到RenderTexture作为UI的背景RawImage。官方文档里还有一些其他处理方案Working with UI in the High Definition Render Pipeline - ShaderGraph的半透混合支持不完整
ShaderGraph中的Blending Mode所支持Alpha,Additive,Premultiply都无法生成 SrcAlpha OneMinusSrcApha这种混合方式,需要写HLSL的Shader才行。貌似自己手动改Material可以支持这种混合方式。 - Shader中的Transparent有上限
之前一些shader里面设置RenderQueue会设置的比较高比如 Tags {“Queue”=“Transparent+800” “IgnoreProjector”=“True” “RenderType”=“Transparent”} 现在貌似最高支持到"Queue"=“Transparent+500” - 多相机半透出问题
当Shader中的混合使用Blend SrcAlpha OneMinusSrcAlpha,导致半透里面混合了其他相机的画面。解决方案在Shader里面添加ColorMask RGB(同事查出来的) - Assetbundle打包的场景内物体显示不全
当相机的Layer没有设置为Everything时,物体显示不全。 开始使用测试场景有问题,后来用正式场景没问题了。猜测和不同工程中的Layer设置不一致有关系。
AssetBundle打包问题
- AssetBundle中模型使用HDRP/Lit,关闭Decals选项失效
12.1.3版本的HDRP和12.1.6版本的HDRP中Decal对应的Keyword发生了变化,导致老版本打的assetbundle在新版本里不生效。统一版本就好了 - AssetBundle中模型的金属度贴图失效
当使用命令行导入模型,设置金属度贴图时,Unity并没有正确触发_MaskMap对应shader变体的生成。设置好贴图后,重新设置一次shader就好了 - 构建命令中包含-nographics导致报错
删掉就不会报错了,貌似也没啥问题。
|