自动减面

在做游戏时,通常会有高模转低模的需求,比如生成不同层级的lod模型。但是这种操作一般会由美术人员手工完成,比较费时,且每个层级的模型都需要打包,造成包体过大。


这里,我提供了一种运行时根据算法将高模转为指定顶点数低模的方式,不需要人工干预,且可在运行时才生成低模,打包时只要打包高模即可。


下面是我的实现,这里我假设顶点在顶点数组里是唯一的,并未考虑各种情况,所以出现了缺面的情况。




下面是论文作者的实现。



下面简单介绍一下算法

对顶点和面进行预处理,生成如下结构。







生成之后,根据这些信息计算每个顶点向他的每个邻居顶点坍缩的代价,a向b坍缩即消去a,将a的每个邻居边里的a替换为b。


下式为u向v坍缩的cost。



Tu是包含顶点u的三角形的集合,Tuv是同时包含顶点u和顶点v的三角形的集合。


两个面的法线相乘越接近1,则说明两个面是接近平行的,消去影响不大,这里用1-x/2将范围从 -1,1映射到0,1,值越小消去的影响越小。


在最里层,找到影响的最小值,对于包含顶点u和顶点v的三角形,消去意味着这些面消失了,影响值为。


在外层,找到影响的最大值,即找到包含u但不会消失的面对视觉的最大影响。


最后乘以距离,距离越大,越不易消去。


消去代价最小的节点,此时注意要即时更新第一步生成的结构

不断消去,直到顶点数小于某值。


工程源码:https://github.com/Ymiku/Automic-LOD


现在的工程只提供了核心代码,虽然可以用,但是效果不好,因为一般模型会出现一个顶点在数组里出现多次的情况,不过也好解决,只要预处理一下,保证顶点唯一性就行了。


参考:http://dev.gameres.com/Program/Visual/3D/PolygonReduction.htm

转载于:https://www.cnblogs.com/nafio/p/9137103.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值