首页 > 编程知识 正文

unity shader优化,unity shader 属性

时间:2023-05-03 18:13:56 阅读:181899 作者:483

1.Shader变体shader是在GPU中操作的程序,但是使用GPU的工作模式动态分支(if else )的开销很大,静态分支) #if #else。 静态分支在编译时执行。 生成了新的代码段。

shader_feature和multi_compile的相同和不同

#pragma shader_feature是#pragma multi_compile的子集,#pragma shader_feature将生成两个变体。 一个不包含keyword,两个包含keyword 3360 enable _ # pragma multi _ compile也可以获得相同的效果。 但是,只有下降线的keyword必须表示不包含keyword。 在接下来的两行中,两种备选方案效果相似

# pragma shader _ feature enable _ gray # pragma multi _ compile _ enable _ grayui的shader中常见此代码。 __表示不含keyword的备选方案

# pragma multi _ compile _ unity _ ui _ alphaclipmulti _ compile生成所有变体,而shader_feature仅生成材质中使用的变体

以下代码取决于材质中使用了多少组合

# pragma shader _ feature _ enable _ FX # pragma shader _ feature _ FX _ mask _ r _ FX _ mask _ g _ FX _ mask _ b以下的

# pragma multi _ compile _ FX _ enable _ FX # pragma multi _ compile _ FX _ mask _ FX _ mask _ g _ FX _ mask _ mask 我们都要控制shader变体的数量。

在android手机上,第一次使用该变体时,请输入手机目录 phoneAndroiddatacom.baa oo.sgyxcacheunityshadercache

2 .为什么要加热

Shader.WarmupAllShaders用于预热内存中的所有着色器。 不推荐。

ShaderVariantCollection.WarmUp (; (推荐)

调用WarmUp将生成这些文件,以便在以后使用shader时减少CPU开销。

在Unity Profiler下查看这些变体的生成。 如下图所示

第一次启动时,可以看到开销很大,为20.37ms

之后,如果不在内存中,则需要加载此shader时也会显示Shader.CreateGPUProgram,但开销很小,为:2.11ms。 (请参阅

典型的shader可以缓存以避免Shader.Parse和Shader.CreateGPUProgram的性能开销。

Shader.Parse和Shader.CreateGpuProgram分别在做什么事呢?

在加载Shader时会分析Shader.Parse。 (加载时执行)

Shader.CreateGpuProgram是将Shader传递给GPU的提交,GPU驱动程序对其进行编译以适应特定的设备或平台。 在第一次渲染时执行。 (active==false,不在照相机的视锥外等执行。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。