头图

多个相机分别实现各自屏幕后处理的问题

1)多个相机分别实现各自屏幕后处理的问题
​2)怎么查看子线程中的GC Alloc
3)Mesh组件的世界坐标
4)绘制的Mesh丢失了Unity自带的Keywords
5)AssetDatabase V2和V1的核心区别


这是第235篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。

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

Rendering

Q:游戏中有多个相机,每个相机有自己的后处理效果。但是发现Depth越大的相机OnRenderImage传过来的图像越小于这个Depth所有相机的叠加图像,这样就没法实现各自的后处理效果,有什么方法可以解决吗?

A:经过测试,给Camera赋值RenderTarget,那这个相机上的OnRenderImage就只会对这个RT起作用。

使用这种方式,对不同的Camera加不同的OnRenderImage。最后需要一个额外的相机将这些RT合在一起,在这个额外的相机里面,可以渲染一个Canvas,里面用多个RawImage来将之前的RT叠在一起。

下图中,球和天空盒是场景相机渲染的,相机渲染到RT1,文本是UI相机渲染的,相机渲染到RT2。

第一个相机OnRenderImage里面颜色反一下,第二个相机的OnRenderImage里面变成灰度图。从下图可以看到这两个效果是相互独立的。

最后用CombineCamera画一个Canvas,里面有2个RawImage,RawImage里面的Texture分别使用那两个RT就可以了,如下图:

感谢Xuan@UWA问答社区提供了回答

Mono

Q:我把一些大计算量的东西放到了子线程中,现在想看下有没有GC Alloc,但是没找到像Profiler.BeginSample/Profiler.EndSample这样的方法,看不到子线程中的GC Alloc,只能看到时间开销。请问要怎么才能看到子线程中的GC Alloc呢?

A:目前新版本的GOT2.3版本已经支持了。
《多线程统计 | GOT Online新功能上线》

感谢Xuan@UWA问答社区提供了回答

UGUI

Q:Mask组件的世界坐标传给了Shader,然后要把模型空间的Vertex转到世界空间进行对比。

把Mask的四个角的坐标通过GetWorldCorners这个接口获取到传给Shader,

然后将特效的Vertex转换到世界空间中作比较。但是效果看起来这个转换的值好像不太对,我的渲染模式是Overlay。

A:我把Render Mode改成Camera就行了,应该是在Overlay下GetWorldCorners获取到的值不正确。

感谢题主方星@UWA问答社区提供了回答

Rendering

Q:使用CommandBuffer.DrawRenderer绘制的Mesh会丢失Unity自带的Keywords,导致ShadeSH9计算的结果不对。(版本:Unity 2019.2.0f1)

正常渲染:

CommandBuffer.DrawRenderer:

A1:光照处理阶段,CommandBuffer的内容还未产生,所以也就不会有球谐和屏幕空间阴影的内容了。

感谢李星@UWA问答社区提供了回答

A2:测试后发现,可以使用EnableKeyword来强行开启Keyword。但是会遇到环境光渲染不出来的问题。

正常的渲染如下:

环境光渲染不出来,如下:

虽然Keywords是完整的,但是环境光还是没渲染出来,原因是SH的系数出问题了,具体解决方案可以参考:
https://github.com/keijiro/LightProbeUtility

使用如下的代码可以让这个Cube和普通的渲染方式产生相同的渲染结果,但是需要使用CommandBuffer.DrawMesh的方式。

public class TestCommand : MonoBehaviour
{
   public MeshRenderer rend;
   public Mesh mesh;
   CommandBuffer cb;
   MaterialPropertyBlock block;
   Material mat;

   void Start()
   {
       block = new MaterialPropertyBlock();
       LightProbeUtility.SetSHCoefficients(rend.transform.position, block);//来自git中的脚本
       cb = new CommandBuffer();
       cb.name = "DrawCube";
       mat = new Material(rend.sharedMaterial);
       mat.EnableKeyword("SHADOWS_SCREEN");
       mat.EnableKeyword("LIGHTPROBE_SH");
       cb.DrawMesh(mesh, rend.localToWorldMatrix, mat, 0, 0, block);
       Camera.main.AddCommandBuffer(CameraEvent.AfterSkybox, cb);
   }   
} 

感谢Xuan@UWA问答社区提供了回答

Editor

Q:AssetDatabaseV2和V1的核心区别是什么?切换到V2对项目有哪些好处?

A1:做个搬运工:

《资产导入新管线:加速资源导入的坚实基础》

《Asset Pipeline Version 2(Asset Database v2)内部细节》

《The new Asset Import Pipeline: Solid foundation for speeding up asset imports》

AssetDatabase.Refresh() refresher - Unite Copenhagen(需要梯子)

Speed up your asset imports for big projects - Unite Copenhagen(需要梯子)

【三思Unity】深入浅出资源管理之:Asset Import Pipeline v2(上)

感谢黄程@UWA问答社区提供了回答

A2:就是在编辑器加速导入的功能,本身也不收费。加速幅度还比较大,对多个小文件导入提速比较明显,但是导入ASTC图片依然很慢,可能因为主要耗时是在图片转换这边。总的来说,切换到V2没遇到什么问题。

感谢邹彬@UWA问答社区提供了回答

封面图来自网络


今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

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

UWA官网:[链接]

27 声望
12 粉丝
0 条评论
推荐阅读
MeshRenderer如何使用GPU Instancing的材质球正常合批
1)MeshRenderer如何使用GPU Instancing的材质球正常合批​2)关于AssetBundle加密,如何重新实现LoadFromFile接口3)移动端开放世界类型游戏中选择动态阴影技术以及优化方案组合4)Unity导出Gradle工程,如何防止...

侑虎科技

封面图
Monaco Editor 光标定位问题及解决
2、存在font相关样式变化 比如,font-size、font-family等。这时需要保证编辑器初始化前后字体相关样式保持一致就可以了(可能需要与上面的方法一起使用)。

checkitout阅读 357

封面图
纹理开启Mipmap导致压缩失败的问题
1)纹理开启Mipmap导致压缩失败的问题​2)使用TextMeshPro能否避免使用Resources文件夹3)用透视摄像机去分层管理UI的优势和好处4)Houdini中切线空间向量怎么在Unity Shader还原出原向量

侑虎科技阅读 269

封面图
URP自带的Tone mapping性能开销问题
1)URP自带的Tone mapping性能开销问题​2)图集中未使用到Sprite也会被加载到内存中的问题3)GPU带宽:从纹理出发优化带宽①4)GPU带宽:从纹理出发优化带宽②5)GPU带宽:从纹理出发优化带宽③

侑虎科技阅读 233

封面图
在Runtime下,IL2CPP与Mono打包对应的PSS内存占用问题
1)在Runtime下,IL2CPP与Mono打包对应的PSS内存占用问题​2)获得AssetBundle内部依赖关系的方法3)Unity 2019 Streaming Mipmap在某些情况下采样等级错误4)根据RenderDoc的数据,计算渲染量

侑虎科技阅读 226

封面图
TMP耗时较高的优化问题
1)TMP耗时较高的优化问题​2)Unity重载Object后,如何判定物体是否为空3)SRP Batch在添加unity_SpecCube后的问题4)堆内存会持续上升,如何用UWA报告来分析

侑虎科技阅读 180

封面图
fabric.js开发图片编辑器的细节实现
当时的版本比较粗糙,只能说是一个基础版的Demo,很多细节不够完善,参考了稿定设计和创客贴的设计编辑器,优化了很多必要的细节,也算是fabric.js的进阶用法,整理成笔记分享出来。

nihaojob阅读 179

封面图

UWA官网:[链接]

27 声望
12 粉丝
宣传栏