unity_LODFade使用总结

关于草的不同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里向右滑动的过程中,方块透明度越来越低,逐渐消失。

你可能感兴趣的:(Unity)