Q&A——图形渲染(三)

来源:互联网 发布:诺基亚n9deb的软件 编辑:程序博客网 时间:2024/06/06 03:41

图形渲染

Q1:我们的游戏中有一些静止的建筑,会和整个场景一起烘焙(包括了每个建筑在地表的阴影)。现在希望这些建筑是逐步开放的,比如玩家1级的时候只有建筑A开放,2级的时候建筑B开放,现在的问题是当建筑未开放时(SetActive(false))地表的相关阴影还在。这种问题一般是怎么处理的?

这种问题是因为研发团队将整个场景烘焙成一张Lightmap所致。如果地图中的建筑是固定的,且游戏中并没有动态改变方向光的需求(比如Time Of Day模拟),那么可以尝试以下方法来实现需求:

(1)如果建筑物是根据等级而批量出现的,那么可以尝试根据等级不同而烘焙相应建筑群的Lightmap,然后在游戏中根据需求动态替换Lightmap;

(2)如果是逐个出现且建筑之间相距较为紧密的话,那么建议尝试通过Dynamic Projector(Asset Store插件)或Shadow Map(Unity自带阴影)来进行处理,因为Lightmap方法已无法支持这种需求。同时,可配合Fast Shadow Receiver(Asset Store 插件)来尽可能降低上述实时阴影带来的性能开销。


图形渲染

Q2:请问“Dynamic Batching”这个选项开关与否对于性能影响大么?
请输入图片描述

一般情况下,如果可以我们还是建议开启该选项。下图是我们做的一个实验,即在红米2设备上渲染将近100个动态Cube。Profiler面板左侧为开启Dynamic Batching的CPU耗时(不透明渲染耗时0.5ms左右),右侧为关闭Dynamic Batching的CPU耗时(不透明渲染耗时1.5ms左右)。可以看出,两者耗时相差将近1ms。当然,不同项目、不同模型,其耗时差距是有一定不同的。因此,建议研发团队可以根据自身情况关闭和开启该选项来进行测试。

测试用例:
请输入图片描述

关闭Dynamic Batching的CPU耗时:
请输入图片描述

开启Dynamic Batching的CPU耗时:
请输入图片描述

图形渲染

Q3:编辑器模式下,Prefab用Select Dependencies选项找依赖资源的时候,会把以前旧Shader引用的贴图也给关联上,怎么刷新这种引用关系?

在切换Material所使用的Shader时,其上的纹理引用确实是不会自动清除的(除非被覆盖)。因此,我们的建议是,在编辑Material时,如果要切换Shader,那么在切换好之后,进行一次Reset的操作(如下图所示,该操作会重置所有使用中的属性,同时去掉未使用的属性),然后再开始编辑其属性。
请输入图片描述
如果希望在不改变当前使用属性的前提下,去掉未使用的属性,那么据我们所知,只能启用Editor的Force Text模式,打开对应的.mat文件进行手动去除。


0 0