ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AlphaTest烘焙的阴影不正确

2021-08-18 12:04:20  阅读:309  来源: 互联网

标签:Shadowmap AlphaTest Shader 阴影 snippet Unity 烘焙 UWA com


1)AlphaTest烘焙的阴影不正确
​2)RawImage和Image的选择
3)Unity版本升级后Shaowmap异常
4)同一个Shader多次回调OnProcessShader


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

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

Rendering

Q:近期美术反馈场景中的树烘焙的时候阴影不正常,简单看了下,树用的是AlphaTest做的渲染,测试了一下确实有问题。

 

我记得Unity 4.x版本是没有问题的,目前的引擎版本是Unity 2018.4.35,去Unity官网查了下,说是Unity的Bug?有的人建议在Shader名字里添加Transparent,还有人建议“RenderType”改成“TransparentCutout”,两种我都试过了,还是不好用。

A:自答:美术出贴图的时候使用了一张不带Alpha通道的主贴图和一张控制Alpha的贴图,Unity在烘焙的时候是以主贴图MainTex的Alpha数值为依据进行处理的,所以需要在烘焙的时候主贴图带有a通道,这样处理以后阴影就正常了,烘焙完以后可以把主贴图压缩回不带a的贴图格式。

处理前:

 

处理后:

 

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


UGUI

Q:UI RawImage组件使用图片的Texture Type设置是Sprite,导致AssetBundle打包时造成冗余。产生原因已知:一张纹理被同时当成Sprite和Texture使用,Sprite那份就会把对应的Texture打包进来造成冗余。

相关问答:https://answer.uwa4d.com/question/5d939f0ea27d4e20a003aec9

解决方案:RawImage使用的都是大图,Image组件不会用到,现在有两种方案:
1. 继续使用RawImage,把散图的Texture Type都设置为Default;
2. 去掉游戏内的RawImage,都改为Image,Texture Type都设置为Sprite。

第一个方案,因为按以往项目经验,都是这样做的。而且,觉得散图不应该设置成Sprite类型, 怕有什么问题。
第二个方案,统一使用Image,以后使用就不用区分图片来自图集还是散图了,使用会更方便点。

请问大家还有什么建议吗?

A:一般RawImage是用在UI上显示RenderTexture,其它的一般是用Image。就算是散图,也用Image,即图片设置成Sprite2D类型,方便管理。

该回答由UWA提供


RenderTexture

Q:不同版本打出来的安卓包,在相同手机上真机连接到Unity查看Shadowmap内存。

具体信息:
2018.2.16f1:Shadowmap 8M 2048x2048 Format:D16
2018.4.32f1:Shadowmap 24M 2048x2048 Format:D16
2018.4.36f1:Shadowmap 24M 2048x2048 Format:D16

 

 

 

这是Unity的Bug还是什么情况导致的?

A1:应该是Unity的Bug,一个类似的问题:https://issuetracker.unity3d.com/issues/shadowmap-memory-size-is-reported-inconsistently-by-the-profiler-in-different-unity-versions

报告中提到2017.4.36f1, 2018.4.1f1没有复现。附一个同样的问答:https://answer.uwa4d.com/question/5d525dacc494b506d26739ae

 

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

A2:打包到真机上测试并且连接Profiler,查看Shadowmap大小。使用RenderDoc截取画面,查看Shadowmap大小。比较这两个Shadowmap的大小是否相同。

测试Unity版本:2020.3.16f1和2019.4.29f1
测试真机:小米8,OPPO A72和荣耀 Play 4T
测试步骤:新建场景,添加胶囊体和平面,设置阴影
测试结果:

 

测试结果表明2019和2020最新的LTS版本应该已经修复了Shadowmap在Profiler中的大小显示错误的问题。

感谢宗卉轩@UWA问答社区提供了回答


Shader

Q:Unity 2018.4.36f1在打安卓包时,发现OnProcessShader回调方法,同一个Shader会被回调多次。

A:简单地理解,OnProcessShader并不是一个“Shader资源”调用一次,而是一个 “shader snippet”调用一次。官网上的说法:Implement this interface to receive a callback before a shader snippet is compiled。

从这个函数的参数也可以看得出来,函数的一次调用,对应的是一个Shader的一个ShaderSnippetData。

OnProcessShader( Shader shader, ShaderSnippetData snippet, IList<ShaderCompilerData> data ) 

 

如果要理解清楚,这个问题本质就是概念的定义与理解问题了。而对于 “snippet” 的定义,Unity官网的定义其实也有点矛盾,官方文档的说法与OnProcessShader函数用的概念是不一致的。

比如官方文档表示:An HLSL snippet must contain at least a vertex program and a fragment program. 也就是说:一个snippet至少包含一个Vertex Program和一个Fragment Program。
https://docs.unity3d.com/Manual/SL-PragmaDirectives.html

而OnProcessShader函数的介绍文档中表示:Shader snippet:The HLSL input code with dependencies for a single shader stage. 也就是说:一个snippet对应的就是一stage(Vertex、Fragment等等)。
https://blog.unity.com/technology/stripping-scriptable-shader-variants

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

20210816
更多精彩问题等你回答~

1.Vulkan API的性能及兼容性
2.Unity TMP字体方案如何选择
3.如何实现AAB包的增量更新

封面图来源于网络


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

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

标签:Shadowmap,AlphaTest,Shader,阴影,snippet,Unity,烘焙,UWA,com
来源: https://www.cnblogs.com/uwatech/p/15156153.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有