unity_LODFade使用总结

来源:互联网 发布:mac 画流程图的软件 编辑:程序博客网 时间:2024/06/06 07:43

关于草的不同lod晃动效果实现调查

UserStory

想要达到一个效果,草距离近的时候能正常晃动,而当相机离得远了,草越来越小,抖动效果也越来越不明显。调研能否用LodGroup组件和unity_LODFade.x实现。

分析与调查

  • 带LodGroup组件的object创建
     建立一个空的GameObject,点击该GameObject,在它的Inspector窗口中点击“Add Component”按钮,在出现的面板中选择Rendering,点击右侧的三角形,出现右侧面板,里面选择LOD Group;即添加LOD Group组件;
     点击上面GameObject右侧Inspector窗口中的Lod Group组件,将Fade Mode选择“Cross Fade”如图所示:
     点击Lod 0,即上图中蓝色框的内容,则出现下面的“Fade Transition Width”和“Renderers”,这里如图所示将width设为0.5,点击“Renderers”下面的Add按钮,选择草的mesh。
     点击culled进行同样的设置

  • unity_LODFade.x值的研究
     我们从左向右拖动lod上面的相机滑块,则scene中的相机也相应的越来越远。
     我们查看不同远近下,unity_LODFade.x 的变化,用该值来设置草的环境光,如下,o.Albedo = unity_LODFade.x;
     如下图所示

  •  上图,在lod0时,unity_LODFade.x一直是0;
     在滑到culled时,一开始unity_LODFade.x为0;然后随着滑块向右滑动,该值从0变化到1,然后再从1变化到0,最后草会消失。
    两种应用场景 Blend模式  lodGroup组件的Object创建:如图所示,  lod0时,只有球。
     lod1过程中,一开始是球,后来是方块和球不同阿尔法混合,再是方块。

这里会有中间的不同透明度的混合,是由于加个这些代码:

Tags { "RenderType"="Transparent" "Queue"="Transparent" }        LOD 200#pragma surface surf Standard alpha fade#pragma multi_compile _ LOD_FADE_CROSSFADE

还有阿尔法的设置代码

#ifdef LOD_FADE_CROSSFADE            o.Alpha = c.a * unity_LODFade.x;            //o.Albedo = o.Alpha;#else            o.Alpha = c.a;#endif

 culled里向右滑动的过程中,方块透明度越来越低,逐渐消失。

Dither模式
 lodGroup组件的Object创建:如图所示,
 lod0时,只有球。
 lod1过程中,一开始是球,后来是方块和球不同阿尔法混合,再是方块。

这里会有中间的不同透明度的混合,是由于加个这些代码:

#pragma multi_compile _ LOD_FADE_CROSSFADE        #pragma surface surf Standard vertex:vert        #pragma target 3.0        sampler2D _MainTex;        struct Input        {            float2 uv_MainTex;            UNITY_DITHER_CROSSFADE_COORDS        };void vert(inout appdata_full v, out Input o)        {            UNITY_INITIALIZE_OUTPUT(Input, o);            UNITY_TRANSFER_DITHER_CROSSFADE(o, v.vertex);        }

Surf函数里:

#ifdef LOD_FADE_CROSSFADE            UNITY_APPLY_DITHER_CROSSFADE(IN);#endif

 culled里向右滑动的过程中,方块透明度越来越低,逐渐消失。

原创粉丝点击