LOD为Levels of Detail的简称,简单来说即为多细节层次,不少朋友经常听到这个名称,但是并不知道如何把这个技术运用在游戏里面,如果用百度查到的说法是:LOD技术指根据物体模型的节点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。
以上的解释可能很多人看了是一头雾水,还是不了解LOD的实际运用,以下让我们通过一个简单的案例来说明LOD的巧妙之处。
我们使用了 3dsmax 来说明LOD模型的制作,下载附件后打开场景文件,里面是三个面数不同的油桶造型,由左到右分别代表了高模,一般与低模的模型结构。
选择左边的油桶模型,如图所示,这个模型的数据为三角面712,顶点数358。
选择右边的模型,这个低模的数据很符合我们的要求,一般来说,用三个模型来制作LOD的效果就很足够了,例如建筑场景里面,最远端的房子只能看到类似盒子的效果,而镜头前面的楼房则是可以清楚的看到里面的许多细节,但是镜头推进到远处的楼房时,原来的盒子立即换成另一个可以战胜细节的模型,这个就是LOD的运作原理。
将模型保存为FBX后,导入Unity进行测试,命名的方式建议是在物件的后面加上LOD的层级代号,这样比较方便我们直接用名称来选择高模与低模。
在制作LOD之前,我们需要注意一个事情,那就是将不同面数的模型放在同一个位置,否则会发生模型位置错乱的情况,如图所示,使用Reset方式将中间的模型与低模移到与高模相同的位置。
接着建立一个空的Game Object,将其命名为prop_Barrell,我们准备用在这个空组件上面添加LOD的属性。
选择Component > Rendering > LODGroup,然后就可以对LOD开始进行设置的工作。
在LODGroup的设置里面列出了LOD的层级,底下的Add用来添加LOD所对应的模型,操作方法是先选择LOD : 0,按下Add,选择场景里面的prop_barell_LOD0模型。
系统弹出一个提示,询问是否将这个选择的模型设置子物体,选择Yes,Reparent即可。
如图所示,在选择Reparent后,LOD0的模型自动的设置为prop_Barell的子物件。
设置完成LOD:0的层级后,选择LOD:1,按下Add,选择场景内的prop_barell_LOD1,接着选择LOD:2,按下Add,选择prop_barell_LOD2后即可完成整个LOD的设置。
现在滑动LODGroup上方的相机图标来测试LOD的效果,模型在近处时使用的是LOD0所设置的高模,移到LOD1时则是显示为一般进度的模型,而在LOD3的层级时,模型就换为低模,移到最后的Culled插件,模型已经完全的消失了。
此外,我们还可以任意的修改每一个层级的作用范围,只要拖动LOD分隔的线段即可,然后再根据相机的预览来调整出最合适的LOD效果。
以上的解释可能很多人看了是一头雾水,还是不了解LOD的实际运用,以下让我们通过一个简单的案例来说明LOD的巧妙之处。
我们使用了 3dsmax 来说明LOD模型的制作,下载附件后打开场景文件,里面是三个面数不同的油桶造型,由左到右分别代表了高模,一般与低模的模型结构。
![1.png 1.png](http://www.narkii.com/club/data/attachment/forum/201404/24/223948rd84734mu8budy2o.png)
选择左边的油桶模型,如图所示,这个模型的数据为三角面712,顶点数358。
![2.png 2.png](http://www.narkii.com/club/data/attachment/forum/201404/24/223951moy3ul5j4j3jo33x.png)
选择右边的模型,这个低模的数据很符合我们的要求,一般来说,用三个模型来制作LOD的效果就很足够了,例如建筑场景里面,最远端的房子只能看到类似盒子的效果,而镜头前面的楼房则是可以清楚的看到里面的许多细节,但是镜头推进到远处的楼房时,原来的盒子立即换成另一个可以战胜细节的模型,这个就是LOD的运作原理。
![3.png 3.png](http://www.narkii.com/club/data/attachment/forum/201404/24/223958u625pgcpzdg421x1.png)
将模型保存为FBX后,导入Unity进行测试,命名的方式建议是在物件的后面加上LOD的层级代号,这样比较方便我们直接用名称来选择高模与低模。
![4.png 4.png](http://www.narkii.com/club/data/attachment/forum/201404/24/224000oro82j9jkd6fxdx1.png)
在制作LOD之前,我们需要注意一个事情,那就是将不同面数的模型放在同一个位置,否则会发生模型位置错乱的情况,如图所示,使用Reset方式将中间的模型与低模移到与高模相同的位置。
![5.png 5.png](http://www.narkii.com/club/data/attachment/forum/201404/24/224002ymrk00o9gv99rk48.png)
![6.png 6.png](http://www.narkii.com/club/data/attachment/forum/201404/24/224005gk8n8f07mbw0mybb.png)
接着建立一个空的Game Object,将其命名为prop_Barrell,我们准备用在这个空组件上面添加LOD的属性。
![7.png 7.png](http://www.narkii.com/club/data/attachment/forum/201404/24/224006ag24gg8kea0m4e6b.png)
选择Component > Rendering > LODGroup,然后就可以对LOD开始进行设置的工作。
![8.png 8.png](http://www.narkii.com/club/data/attachment/forum/201404/24/224009rmkvmu4onsm6350q.png)
在LODGroup的设置里面列出了LOD的层级,底下的Add用来添加LOD所对应的模型,操作方法是先选择LOD : 0,按下Add,选择场景里面的prop_barell_LOD0模型。
![9.png 9.png](http://www.narkii.com/club/data/attachment/forum/201404/24/224011pygawmmevo1y7b12.png)
系统弹出一个提示,询问是否将这个选择的模型设置子物体,选择Yes,Reparent即可。
![10.png 10.png](http://www.narkii.com/club/data/attachment/forum/201404/24/224015r6ap9n47fajd6fa5.png)
如图所示,在选择Reparent后,LOD0的模型自动的设置为prop_Barell的子物件。
![11.png 11.png](http://www.narkii.com/club/data/attachment/forum/201404/24/224016wfdo2zhhhhxalh2x.png)
设置完成LOD:0的层级后,选择LOD:1,按下Add,选择场景内的prop_barell_LOD1,接着选择LOD:2,按下Add,选择prop_barell_LOD2后即可完成整个LOD的设置。
![12.png 12.png](http://www.narkii.com/club/data/attachment/forum/201404/24/224018qjgjaqsaq4x1rxaa.png)
现在滑动LODGroup上方的相机图标来测试LOD的效果,模型在近处时使用的是LOD0所设置的高模,移到LOD1时则是显示为一般进度的模型,而在LOD3的层级时,模型就换为低模,移到最后的Culled插件,模型已经完全的消失了。
![13.png 13.png](http://www.narkii.com/club/data/attachment/forum/201404/24/224023lazxbwxrsu33c4da.png)
![14.png 14.png](http://www.narkii.com/club/data/attachment/forum/201404/24/224026f1n22z1nnflz0nvn.png)
![15.png 15.png](http://www.narkii.com/club/data/attachment/forum/201404/24/224028lmwzz2c44kzzbjp9.png)
此外,我们还可以任意的修改每一个层级的作用范围,只要拖动LOD分隔的线段即可,然后再根据相机的预览来调整出最合适的LOD效果。
![16.png 16.png](http://www.narkii.com/club/data/attachment/forum/201404/24/224030tphahsqmkc5n7qff.png)
最后附自己修改的写的代码,用代码实现LOD功能
随着镜头距离的拉远,模型三角面和顶点数量减少