zoukankan      html  css  js  c++  java
  • 自动减面

    在做游戏时,通常会有高模转低模的需求,比如生成不同层级的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

  • 相关阅读:
    jenkins+tomcat+python+pytest的web自动化化部署
    windows的jenkins+tomcat工作目录配置(这个要安装前就提前确定好,这种方法会导致整个jenkins重置)
    pytest xunit2 in pytest6.0
    Jenkins基本配置一
    React生命周期函数的使用场景
    React中的生命周期函数(老版本V16.0之前)
    React中ref的使用
    React中setState注意事项
    React之虚拟DOM中的Diff算法
    React之深入了解虚拟DOM
  • 原文地址:https://www.cnblogs.com/nafio/p/9137103.html
Copyright © 2011-2022 走看看