IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> AlphaTest烘焙的阴影不正确 -> 正文阅读

[游戏开发]AlphaTest烘焙的阴影不正确

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问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/6114f56b8f8c83424169b1b6


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提供,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/6113b4848f8c83424167eb5c


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问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/611773158f8c8342416d1af7


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问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/61133b258f8c83424167271d

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(原群已满员)

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-08-19 12:23:28  更:2021-08-19 12:24:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 3:02:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码