GPUInstancing在真机上失效问题

问题

场景草使用了GPUInstancing批处理技术,但是发现草原场景帧数比较低,真机调试后发现DC已经高达7千,GPUInstancing失效了

原因

官方文档有相关说明:

Unity strips instancing variants if GPU Instancing is not enabled on any GameObject in the Scene. To override the stripping behaviour, open the Graphics settings (menu: Edit > Project Settings, then select the Graphics category), navigate to the Shader stripping section and change the Instancing Variants.

 

如果场景中没有任何启用 GPU instancing 的物体,Unity会剔除掉 instancing variants 。

关于instancing variants 

multi_compile_instancing generates a Shader with two variants: one with built-in keyword INSTANCING_ON defined (allowing instancing), the other with nothing defined. This allows the Shader to fall back to a non-instanced version if instancing isn’t supported on the GPU.

 

 

使用multi_compile_instancing的shader,会产生两个变体,一个变体使用了INSTANCING_ON关键字,另一个则没有。没有INSTANCING_ON关键字的变体是为了instancing失效fallback使用的。

而真机调试时,我们发现草的shader就没有INSTANCING_ON关键字,设备是支持GPUInstancing的,那么还有一个原因就是我们shader是单独打包,Unity在打包shader时,无法知道有场景在使用GPUInstancing,将instancing变体剔除了,所以只能fallback回无GPUInstancing的变体。

解决方法

在Edit > Project Settings > Graphics中,将Instancing Variants设置为KeepAll

 

你可能感兴趣的:(unity3d)