当前位置:   article > 正文

Unity LOD多细节层次---两种使用方式_unity lod加载机制

unity lod加载机制

前言:LOD在unity优化中是很重要的一个技术,这里根据自己的学习做一个简单总结。

一、什么是LOD

细节层次,level of detail,它就是一个数值,随着物体或者模型远离观察者而逐步降低。它能够通过减少多边形的数目从而提升渲染的效率,但是恰恰又由于物体距离很远,所以理论上观察者不会感觉到模型和物体的视觉质量会有所下降。

至于为什么一个简单的数值它能够减少多边形的数目呢,它其实就是通过该数值与一组阙值坐比较,物体距离摄像机越近,也就是它的LOD值越大时,就会选用面数多细节高的模型,反之亦然。

这就意味着我们要准备更多的层次细节的模型,就会增加了内存的占用以及CPU的使用,但是提高了渲染效率,所以LOD技术本质上就是一个典型的用空间换时间的优化方法。

纹理中的MipMap所运用的思想也是LOD,根据对象与摄像机的距离来判定使用不同分辨率的纹理,以加快渲染速度和减少图像锯齿;

二、GPU中的LOD

上一小节讲述的是在CPU中使用LOD技术,它是通过根据物体的LOD值切换不同精度的模型

这一节主要是总结一下在GPU中的使用,也就是在着色器中的应用;

Unity Shader中的LOD原理:Shader中的每个SubShader有一个LOD值,而Shader也会有一个LOD值,当SubShader的LOD值小于此Shader的LOD值时,SubShader才能工作;默认情况下一个Shader允许的LOD层级是无限大的,也就是只要硬件支持的Shader就可以工作,但是有时候即使硬件能够支持,我们也希望抛弃掉一些Shader的细节表现从而提升游戏的性能;

Shader的LOD可以使用Shader.maximumLOD来控制单独的Shader,也可以使用Shader.globalMaximumLOD控制全局所有的Shader;

具体使用:首先我们要在subshader中使用LOD命令为其指定不同的LOD属性,然后就可以在脚本代码中来修改某个Shader的LOD,从而决定使用Shader中相应的SubShader(当在游戏运行时修改了shader的LOD以后,结果会在游戏结束后保存到shader资源的LOD中,因为我们在游戏中修改的就是引用的实际shader资源,另外当shader的代码被修改重新编译后,其LOD值会重置)。

思考:在cpu中,设置不同的LOD值将会加载不同的模型,而在GPU中就是要加载不同的subshader,如果是物理距离相机较远,就可以选择更轻便的计算方式,而不必浪费过多的GPU性能来计算并不重要的表现效果;

三、参考资料

LOD-维基百科:https://zh.wikipedia.org/wiki/%E7%BB%86%E8%8A%82%E5%B1%82%E6%AC%A1

Unity中的LOD:https://blog.csdn.net/wwanrong/article/details/74784481

Unity Shader中的LOD技术:https://zhuanlan.zhihu.com/p/21316674

MipMap-维基百科:https://zh.wikipedia.org/wiki/Mipmap

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/编程先知/article/detail/60272
推荐阅读
相关标签
  

闽ICP备14008679号