TMP的阴影性能如何

Posted UWATech

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TMP的阴影性能如何相关的知识,希望对你有一定的参考价值。

1)TMP的阴影性能如何
​2)CommandBuffer.DrawMeshInstanced无法画阴影问题
3)Unity编辑器在Require大量加载Lua文件时,经常报出not enough memory
4)场景制作的时候,2D资源受后处理调色影响比较大


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

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

TextMeshPro

Q:请问TMP的阴影性能如何?TMP的描边没办法改成外描边吗?看起来Outline是内外都扩的,如果想要改成外扩只能改源码吗?

A1:UGUI的Outline会让对象多渲染n次,TMP的Outline并不会让对象的渲染次数增加,性能更好。

在这个Shader中把“+outline”删除,Outline就会只往外扩散了。

 

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

A2:TMP的阴影性能非常不错,因为它使用的是基于距离场的渲染技术,这种技术可以在保持高质量的情况下减少渲染时间。这意味着,即使在文本中使用多个阴影效果,也可以获得良好的性能表现。

至于TMP的描边效果,它是支持外描边的。默认情况下,TMP的描边是内外都扩的,但是你可以通过更改材质属性来将其改为外描边。

具体来说,你可以在使用TMP组件的对象上找到对应的材质,然后将材质的Outline Width属性设置为负数,这样就可以将描边扩展到文本的外部。

需要注意的是,TMP的材质是使用ShaderLab语言编写的,如果需要修改其内部逻辑,可能需要一定的编程知识。但是,对于简单的修改,例如更改描边效果,你可以尝试使用Shader Graph工具来简化修改过程。

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


Rendering

Q:想用CommandBuffer.DrawMeshInstanced画阴影,使用的是URP的Lit Shader,ForwardLit 是可以的,且可以AfterRenderingOpaques。但是阴影是画不出来,请问有什么解决方法吗?以下是代码(代码不是原创):
https://forum.unity.com/threads/commandbuffer-drawmeshinstanced-shadowcasting.1343306/

部分代码截图:

 

针对以上问题,有经验的朋友欢迎转至社区交流分享:
https://answer.uwa4d.com/question/6455c52f66cf0b727a3226f9


Rendering

Q:场景制作的时候,要不要开着后处理,遇到的问题是2D资源受后处理调色影响比较大?

我们的情况比较复杂:
1. 从性能角度考虑,低配机型是不开后处理的
2. 2D角色、2D建筑、3D场景混合渲染
3. 有半解锁的战争迷雾效果

在这些需求下,场景制作跟后处理要怎么协同呢?

思考了几个方案都不太行:
1. 在UI相机画2D,但无法完美处理深度问题,因为场景的RT是缩放过的,但UI采用全分辨率
2. 2D片写入Stencil,有一些半透的云可能遮住2D片,写入Stencil处理的话可能会有明显的边界问题,且UberPost最后是全屏的,由于场景RT跟界面RT尺寸不同,Stencil也不对应
3. 将后处理的调色放到Opaque之后进行,但这样其他的半透则无法参与调色,且这种方案带来更多的RT切换,在移动端并不明智

现在想着是在不开后期的情况下设计场景,然后后期调色只是进行微调,尽量不影响2D,如果效果甚微的话,就不开启后期调色了,不知这样处理如何?主要是2D与3D混合的场景,不是说UI,UI相机本身是不开后期的,不知大家有什么方案?

针对以上问题,有经验的朋友欢迎转至社区交流分享:
https://answer.uwa4d.com/question/643e255a4530066a5c277d8f


Lua

Q:在Unity 2018编辑器上跑时,启动Require大量加载Lua文件时,经常报出not enough memory,很频繁但非必现,在Windows/Android/iOS上都不会,用的是toLua。

A:可以在编辑器里面用System.IO.File的接口读Lua,避开TextAsset在编辑器不能卸载的问题。或者尝试升级Lua版本。

感谢欧月松@UWA问答社区提供了回答

封面图来源于网络


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

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

提高点光源的阴影贴图性能?

【中文标题】提高点光源的阴影贴图性能?【英文标题】:Improving shadow map performance of point lights? 【发布时间】:2013-06-02 07:11:44 【问题描述】:

我正在使用阴影贴图制作点光源,目前我使用六个深度贴图纹理完成了它,每个纹理都单独渲染并应用于光照贴图。这工作得很好,但性能成本很高。

现在,为了通过减少深度贴图着色器和光照贴图着色器之间的 FBO 更改和着色器交换来提高性能,我正在考虑几种方法。第一个涉及拥有一个比阴影贴图大六倍的纹理,并“一次”渲染所有点光深度图,然后使用此纹理在一次调用中布置光照贴图。是否可以只渲染部分纹理?

为了详细说明第一个示例,它会是这样的:

1. Set shadow map size to 128x128
2. Create a depth map texture of 384x256 (3 x 2 shadow map)
3. Render the first 'side' of a point light to the rectangle (0, 0, 128, 128)
4. Render the second 'side' to the rectangle (128, 0, 128, 128)
5. - 9. Render the other 'sides' in a similar manner
10. Swap to light map mode
11. Render the light map in a single call using the 'cube-map'-ish depth texture

我认为的第二种方法是使用 3D 纹理而不是部分渲染,但我仍然有一个类似的问题:我可以只渲染 3D 纹理的某个“层”而保留其他层吗?

【问题讨论】:

实际使用几何着色器进行分层渲染怎么样? opengl.org/wiki/Geometry_Shader#Layered_rendering @Grimmy 这可能行得通,但出于兼容性目的,我尽量不使用 GS。 我不知道你对阴影贴图了解多少,阴影应该有什么质量。所以我想提一些技术,如 Cascaded Shadow MapsVariance Shadow MapsPerspective Shadow Maps,您可能应该在尝试之前考虑这些技术进行优化。因为根据您使用的技术,您可以用来优化的技术有限 您可以同时支持(GS 和非 GS)版本。说到性能,很难说你会从中获得什么。过去我做了太多“明显的优化”,导致完全没有收获。也许你是对的,有一种更快的方法..谁知道.. :) 【参考方案1】:

为什么组合阴影贴图会有优势?

你必须渲染场景六次。

您可以渲染 6 次 128x128 FBO,然后创建 256x384 纹理并用之前渲染的纹理填充它。但是每个像素的带宽和采样率保持不变。

在保留其他部分的同时渲染一个部分可能会使用模板缓冲区完成,但在这种情况下,我看不到创建组合阴影贴图的任何意义。

希望这会有所帮助。任何反馈将不胜感激。

【讨论】:

以上是关于TMP的阴影性能如何的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Javers 中的阴影元素中获取版本

Unity5.0实时阴影的优化

MySQL数据库my.cnf性能参数如何调优

mysql性能呢个调优之tmp_table_size

图标阴影怎么弄

iOS:创建一侧的阴影