# 前言
最近在场景中使用了unity自带的global fog时出现了真机上不生效的问题。这篇博客主要是记录这个问题的解决过程。
# 正文
## 问题描述
在Editor模式下模型能够与雾效融合实现雾效效果,但是到了真机出现了模型不能跟雾效融合,导致模型感觉在雾效上面。
## 问题原因
先说下原因,是因为之前使用的模型shader使用的surface shader,在shader中设置了Emission自发光参数导致,但是我看到编译后的shader(如下图)也使用了UNITY_APPLY_FOG来与雾效融合。这里我猜测出现问题的原因还是很多,没有一一验证,可能这条指令在手机上由于机型限制无法生效,或者是没有针对指定类型(我项目中使用的Liner类型)雾效处理。
## 解决方法
### 开启多类型编译宏
//在shader中添加一条编译指令即可
#pragma multi_compile_fog
文档说明:https://docs.unity3d.com/Manual/SL-MultipleProgramVariants.html
添加这条指令,可以应对处理不同雾效类型。
### 暴力删除Emission自发光
如果你这个对象是不需要自发光,那可以再surf函数中删除对于Emission的赋值,这样也可以正确得到雾效效果。
文档说明:https://docs.unity3d.com/540/Documentation/Manual/StandardShaderMaterialParameterEmission.html
关于这个问题的内容就算完了,下面列几个关于雾效的几个设置问题。
# 后记更多问题记录
## 雾效设置
window->Rendering->Lighting Setting->Other Setttings
开启fog,设置雾效类型即可
## shader关闭雾效
添加指令即可关闭
#pragma nofog