开启多线程渲染后出现大量的Crash信息

1)开启多线程渲染后出现大量的Crash信息
2)Unity是否有提供硬件接口将纹理从Gamma值转为Linear值
3)屏幕特效如何适配不同分辨率


这是第356篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。

UWA社区主页:community.uwa4d.com
UWA QQ群:465082844

Rendering

Q:我游戏的新版本开启了多线程渲染(Multithreaded Rendering),然后后台就出现了大量的Crash信息:

Eeup : Failed to get java thread with thread name: UnityGfxDeviceW

我搜索的部分解决方案是说关闭多线程渲染。

我的疑问是:
这个Crash是由于开启了多线程渲染新引进的,还是说原本的Crash因为开启了这个渲染模式而导致统计上体现在这里的?就是原本Crash应该统计到另外A位置,但是因为开启了这个模式,所以被统计到了B位置。

我旧版本也有大量的Crash信息,但是看调用桟都是很通用的,libc.so-> libunity.so无法直接定位的。

这个Multithreaded Rendering开启以后确实游戏整体性能有明显提升,所以不想关闭。

请问针对这个UnityGfxDeviceW Crash有优化策略么?

A:建议升级Unity版本,如果你是2020版本,应该在4.48是有处理的。

感谢司马老师@UWA问答社区提供了回答


Rendering

Q:开启线性空间,勾选纹理的sRGB会通过硬件接口将Gamma的纹理转为Linear值,以提升性能。

但后处理功能需要将纹理的Gamma和Linear互转,现在做法是通过Shader做的Pow,请问Unity是否有提供相应性能更好的接口?

A:纹理的sRGB自动转线性是调用图形驱动进行纹理贴图创建时的参数,这样后续采样器在获取纹理值时采样单元会直接做sRGBtoLinear的颜色空间变换,这个环节是不可介入做编程修改的。如果是RT的纹理值需要预先变换也可把RT指定为sRGB,但对于其他的颜色值做颜色空间变换,应该没有硬件功能可以利用加速。如果精度要求不高也可以做函数拟合来避免对于复杂算数指令的调用。

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


Rendering

Q:现在一些屏幕3D特效是跟随相机的,比如碎屏这种特效。他们要如何做到适配不同分辨率的机型?因为有些特效需要一些贴边处理,所以也不能把特效做的特别大,但是要单独一个正交相机处理的话,又多了一个相机的成本。请问屏幕特效如何适配不同分辨率?

A:这种特效一般适配的是场景相机的边缘而不是去适配最终的渲染目标的边缘。一般这种特效都是全屏Mesh,如果是,可以动态适配一下当前世界坐标位置下的裁剪面宽高,也可以做的更大超过相机裁剪面范围,最后在Shader里面用屏幕空间的UV处理边缘而不是模型上的UV,可以达到渲染时刚好贴住屏幕边缘的效果。

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

封面图来源于网络


今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。

UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:465082844

posted @ 2023-10-12 14:35  UWATech  阅读(49)  评论(0编辑  收藏  举报