Shader Variants 打包遇到的问题

摘要:
1.遇到的问题最常见的是打包到手机后效果与PC上不一致,具体情况比如:光照贴图失效雾失效透明或者cutoff失效以上首先需要检查的地方是Shader变体的编译设置2.超级着色器编译成N个变体如果需要多吧功能类似的shader,比把透明,Cutoff和不透明等多个功能集合到一个Shader上,通常把这样的Shader称之为"超级着色器(ubershader)"实际上这种集合是对shader代码的分支

1. 遇到的问题

最常见的是打包到手机后效果与PC上不一致,具体情况比如:

  • 光照贴图失效
  • 雾失效
  • 透明或者cutoff失效
    以上首先需要检查的地方是Shader变体的编译设置

2. 超级着色器编译成N个变体

如果需要多吧功能类似的shader, 比把透明,Cutoff和不透明等多个功能集合到一个Shader上,通常把这样的Shader称之为"超级着色器(uber shader)"

实际上这种集合是对shader代码的分支管理, 通过开关不同的宏代码实现功能的切换, 所以在Unity打包时,需要预编译所有可能出现的分支版本.

变体的数量可能非常恐怖, Unity blog有一篇详提到过变体的编译: Stripping scriptable shader variants

3. 在Unity中管理shader变体编译

3.1 Shader Stripping

菜单位置: Edit - Graphic Setting - Shader Stripping
Shader Variants 打包遇到的问题第1张

Shader Stripping设置总结

  1. Shader Stripping包括以下几个方面:
    • 光照模式
    • 雾模式
    • GPU Instance
    • 预加载变体
  2. 按实际使用勾选,如果全勾选, 打包shader几个小时都编不完
  3. 如果选择Auto, 结果可能不受控制

3.2 Shader Variant Collection

手动创建

Shader Variants 打包遇到的问题第2张

手动修改

选中存出来的Shader Variants Collection文件, 直接在Inspector面板中点击+ -号添加或删除:
Shader Variants 打包遇到的问题第3张

自动生成

Edit - Project Settings - Graphics
Shader Variants 打包遇到的问题第4张
运行游戏, 让游戏跑一会, 按下"Save to asset" 按钮, 可以把自动搜集打开过场景的shader变体,存到一个文件中:
Shader Variants 打包遇到的问题第5张
通过这个变体集合文件进行依赖打AssetBundle包的方式可以实现shader变体的预加载.

注意

自动搜集的功能不够可靠, 做完还是要打包验证,查缺补漏去除冗余是必须的.

<wiz_tmp_tag contenteditable="false" style="display: none;">

免责声明:文章转载自《Shader Variants 打包遇到的问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇boostrap弹框之BootstrapDialogAndroid 手动显示和隐藏软键盘下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【Unity】伪线框渲染Shader的实现

线框Shader的渲染在游戏应用上还是有一定的需求,这次分享一个伪的线框渲染Shader。之所以称之为伪线框,是因为真正的线框应该渲染的是线,这在常规上是使用几何体着色器输出线段图元来实现。但是几何体着色器是DirectX 10的特性,所以针对移动平台,如果有少量线框渲染需求的,这个实现方法的门槛更低。 先说一下实现的原理:通过模型UV的边界来实现线框的渲...

【Unity3D入门教程】Unity着色器基本使用方法

前言 “Shader即着色器,是一款运行在GPU上的程序,用来对三维物体进行着色处理、光与影的计算、纹理颜色的呈现等,从而将游戏引擎中的一个个作为抽象的几何数据存在的模型、场景和特效,以和真实世界类似的光与影的形式呈现于玩家的眼中。”这段话出自郭浩瑜老师所著《Unity3D ShaderLab开发实战详解(第2版)》。可见着色器是服务于显示阶段的,因此要想...

(转载)Cocos2dx-OpenGL ES2.0教程:初识MVP(3)

在上一篇文章中,我在介绍vertex shader的时候挖了一个坑:CC_MVPMatrix。它其实是一个uniform,每一个cocos2d-x预定义的shader都包含有这个uniform, 但是如果你在shader里面不使用这个变量的话,OpenGL底层会把它优化掉。 但是,CC_MVPMatrix是在什么时候设置进来的呢?我在shader里面明...

【Unity】Compute Shader粒子效果模拟

在UE4引擎中,已经实现了GPU的粒子系统,可以快速计算数百万的粒子及其碰撞。在Unity中,可以简单的使用Compute Shader,来尝试实现GPU粒子的效果。 实现一个简单的立方体粒子效果,图片压缩的很厉害……粒子数量在6w+ 第一步,我们实现一个脚本,挂在在摄像机组件上,这个脚本我们用来控制粒子的渲染。 1 usingSystem.Colle...

【Unity游戏开发】马三的游戏性能优化自留地

一、简介   很久没有更新博客了,最近马三比较忙,一直在处理游戏中优化相关的事务。我们的游戏自从开发以来一直没有做过比较系统的性能优化,最近因为各种原因需要对游戏进行优化,其他同事都有开发任务,因此性能优化的任务就落在了马三身上,说实话马三在性能优化方面也没有太多的经验,都是不断地咨询前辈并且结合网上的资料摸着石头过河。本篇博客中马三就和大家分享一些优化过...

一个简单的GLSL Shader例子

本例子选自OpenGL Shading Language中的第一个Shader例子,使用颜色平滑地表示一个表面的温度。温度及其颜色的范围在应用程序中进行设置。//先看顶点着色器temp.vert:uniform float CoolestTemp;uniform float TempRange;attribute float VertexTemp;//每个...