zoukankan      html  css  js  c++  java
  • Unity中的Lod

    http://blog.csdn.net/bigpaolee/article/details/48521371


    LOD是( Level of Detail)的缩写,表示细节级别。


    这里注意下,Lodgroup的百分比是这个对象占用视图的百分比(猜测跟相机张开角度,相机远近移动的缩放比例有关)

    LODGroup

    • 使用这个技术,一般是在解决运行时流畅度的问题,采用的是空间换时间的方式
    • 根据摄像机离对象的远近,切换不同细节级别的对象,达到一种目的:近处的对象细节丰富,远处的对象忽略很多细节,从而减少渲染计算,提高流畅度。
    • 流畅度的提高,是靠切换不同级别的对象,这就使的原来一个对象,现在需要几种不同级别的对象,这增加了运行时内存的使用,也增加了美术的工作量
    • 使用方法:mfc11的专栏 Unity3D LOD Group

    LOD Bias 
    - 执行unity编辑器菜单:Edit > Project Settings > Quality,会打开Quality Setting窗口 
    - 参考 : 官方文档 Quality Setting 
    - LOD Bias主要控制根据物体才屏幕中的百分比来控制LOD的变化,表现用大白话描述即是:如果该值小那么,摄像机离物体距离稍微有些变化,不同细节物体即会切换,该值大,那么摄像机需要与物体有很大的距离才会切换。 
    - 目的:就是控制整个场景的细节。当应用运行的平台比较好,会倾向使用较高级别的画质,这时就把离摄像机虽然很远(相对来说)的物体也让他以好的级别渲染,这样整体画质更好;反之,设备较差,那么,会希望离摄像机最近时才展示最好级别的物体对象,具体稍微远(相对来说)立马切换成稍差级别的物体。这样在整体画质级别不变的情况下,保持流畅。

    Shader LOD 
    - 这个是另外一种控制细节级别的技术 
    - 在一个Shader当中,可以给不同的subshader指定不同的LOD属性,例如:

        SubShader {
            LOD 200
            Pass {
    //insert shader pass here
            }
        }
        SubShader {
                    LOD 100
            Pass {
    //insert shader pass here
            }
        SubShader {
                    LOD 0
            Pass {
    //insert shader pass here
            }
        }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 然后,就可以在脚本代码中指定一次全局Shader.globalMaximumLOD值,该值是LOD所执行的最大值,也就是说所有shader中的subshader的LOD值小于该全局值,该subshader才被执行。当然,也可以单独设置Shader.maximumLOD控制个别shader(??这里有疑问)
    • 参考:Unity Technologies - jonas echterhoff
    Shader LOD 就是让我们设置一个数值,这个数值决定了我们能用什么样的Shader。可以通过Shader.maximumLOD或者Shader.globalMaximumLOD 设定允许的最大LOD,当设定的LOD小于SubShader所指定的LOD时,这个SubShader将不可用。通过LOD,我们就可以为某个材质写一组SubShader,指定不同的LOD,LOD越大则渲染效果越好,当然对硬件的要求也可能越高,然后根据不同的终端硬件配置来设置 globalMaximumLOD来达到兼顾性能的最佳显示效果。

    Built-in shaders in Unity have their LODs set up this way:
    VertexLit kind of shaders = 100
    Decal, Reflective VertexLit = 150
    Diffuse = 200
    Diffuse Detail, Reflective Bumped Unlit, Reflective Bumped VertexLit = 250
    Bumped, Specular = 300
    Bumped Specular = 400
    Parallax = 500
    Parallax Specular = 600


    在Unity3D->Project Setting->QualitySettings中的Maximum LODLevel可以设置最大LOD等级,Shader的LOD值是小于所设定的LOD值,才会被编译使用。Maximum LODLevel的等级可以设置7个级别,例如设置为1,则表示把最大LOD值设置为100,等级2,则最大LOD值为200,以此类推,若设置为0,则表示不进行LOD判断,任何LOD值的Shader都会被使用。



  • 相关阅读:
    System.currentTimeMillis();
    Spark Core源代码分析: Spark任务模型
    CocoaPods on Xcode 6 and Yosemite
    leetcode第一刷_Binary Tree Inorder Traversal
    struts2讲义----建立一个struts2工程
    Java实现 蓝桥杯VIP 算法提高 班级排名
    Java实现 蓝桥杯VIP 算法提高 种树
    Java实现 蓝桥杯VIP 算法提高 种树
    Java实现 蓝桥杯VIP 算法提高 种树
    Java实现 蓝桥杯VIP 算法提高 种树
  • 原文地址:https://www.cnblogs.com/nafio/p/9137221.html
Copyright © 2011-2022 走看看