本发明涉及一种3d模型的临摹渲染方法,属于图像处理技术领域。
背景技术:
3d模型也可以说是用三维软件建造的立体模型,包括各种建筑、人物、植被、机械等等,比如一个大楼的3d模型图。
如今网络广告形式也多种多样,文字广告、图片广告、视频广告等等,其目的就是给用户提供更好的浏览方式、展示效果、吸引用户,提高用户的关注、互动、参与,以最终实现转化率。二维展示方式在不远的将来被三维立体方式所代替,这是一个必然趋势,但这必须以一种操作简便、成本低、真实感强的3d建模技术为基础。
现有3d建模工具进行模型建模完成之后,会形成一个模型文件,以3dmax为例,模型文件fbx,文件中描述的是大量的三角面(或四角面)、uv、材质等信息,数据复杂;数据量极大;需要专业的3d渲染引擎才能进行图形渲染;硬件配置要求高。而且,现在的互联网技术盛行,这样的文件描述信息已经脱离了互联网的发展轨道,数据扩展使用(比如说算法分析使用)难度较大,版本的维护比较麻烦,无法进行数据的结构化存储。而且,不同3d模型的模型特征无法通过机器学习进行转述,发挥更大的作用。
技术实现要素:
本发明的目的是:解决现有技术中3d渲染需要引擎对图形渲染、硬件配置要求高的问题,提出了一种新颖的3d建模方法。
技术方案是:
一种3d模型的临摹渲染方法,包括如下步骤:
第1步,针对需要建模的3d模型,构建出其包围盒;
第2步,将包围盒沿其长宽高三个方向拆分成子长方体;
第3步,将每个子长方体与原3d模型进行碰撞检测,将未发生碰撞的子长方体删除;
第4步,将剩下的子长方体在空间特征向量构建为新的3d模型。
在一个实施方式中,还包括以下步骤:根据所需要的3d模型的精度来确定第2步中拆分子长方体的个数。
在一个实施方式中,每个子长方体的大小都相等。
在一个实施方式中,在第3步中进行碰撞检测中,将相互碰撞的打上标签1,不相互碰撞的打上标签0。
在一个实施方式中,在第3步中进行碰撞检测后,构建以下向量:
[
[[a111,a121,……,a1n1],[a211,a221,……,a2n1],……,[am11,am21,……,amn1]],
[[a112,a122,……,a1y2],[a212,a222,……,a2y2],……,[am12,am22,……,amy2]],
………………
………………
[[a11p,a12p,……,a1yp],[a21p,a22p,……,a2yp],……,[ax1p,ax2p,……,axyp]],
];
其中,m、n、p分别为在包围盒的长、宽、高方向上的子长方体的个数。
有益效果
1、简化了3d模型的空间结构数据。
2、3d模型数据系统结构化存储,摆脱传统的文件存储。
3、3d模型渲染脱离了3d引擎,更轻量化,促进了3d模型的移动化展示需求,降低了模型设计到模型展示的门槛。
4、3d图形的空间计算更加简单,可以很方便的解决模型的碰撞问题,模型的位置问题
5、其他算法更加易于使用分析。
6、可以通过机器学习进行不同模型特征分析,有更大的应用空间。
附图说明
图1是拟进行重新建模的圆柱体。
图2是构建的包围盒。
图3是包围盒进行拆分成子长方体。
图4是重新构建的3d模型。
图5是本方法的流程图。
具体实施方式
在实际图像处理中,需要对3d模型进行构建和渲染,而采用常规的3d引擎渲染时,导致计算量巨大、数据处理难度高、硬件配置要求高。
本发明的总体方法是:针对3d模型,可以获取到模型的包围盒(一个三维空间长方体坐标点集合,包围3d模型的最小长方体),根据实际的精度要求,可以将包围盒拆分成若干个小长方体,借用3d引擎分别针对原始3d模型和若干个小长方体进行碰撞检测,对每个小长方体进行空间标记,那么3d模型的外围轮廓的曲面会与某个/某些长方体发生了碰撞,因此,可以利用现有的3d碰撞检测技术区别出发生了碰撞,因此挑选出那些发生了碰撞的长方体,就可以获得曲面的轮廓,进而通过这些长方体的空间坐标位置构建出新的3d模型,也就使得整体3d模型得到了简化。
以下实施例是用一个圆柱体作为例子进行对该方法的说明:
现有特殊的3d模型就是一个圆柱体,如图1,取左下脚一个点作为三维坐标系的原点,取圆柱的底面圆半径为r,底面圆的直径为d=2r,圆柱的高为h。
借用3d引擎的计算包围盒,那么它的包围核就是图2,包围盒的三维空间坐标为
(0,0,0)(d,0,0)(0,d,0)(d,d,0)
(0,0,h)(d,0,h)(0,d,h)(d,d,h)
图2经过4×4×4的拆分(即x、y、z轴各个方向都是4等份拆分)之后得到图3,形成一个由64个小长方体组成的大的长方体,我们称这64个小长方体分别为b1,b2,b3,…,b64,那么每个小长方体的长l=r/4,宽w=r/4,高h=r/4。
假定p(x,y,z)表示三维空间(x,y,z)位置上小长方体的八个坐标点
(0,0,0),(rx/4,0,0),(rx/4,ry/4,0),(0,ry/4,0)
(0,0,hz/4),(rx/4,0,hz/4),(rx/4,ry/4,hz/4),(0,ry/4,hz/4)
将得到的各个小长方体的三维空间坐标p(x,y,z)分别利用3d引擎进行自动建模,形成空间模型m(x,y,z)。
借助于3d渲染引擎或者其他3d碰撞检测的工具,我们可以分别将m(x,y,z)与原始3d模进行碰撞检测,当m(x,y,z)与原始模型相互碰撞的则打上碰撞标签1,不相互碰撞的打上碰撞标签0。这样,可以得到一个碰撞矩阵v。这样,可以得到一个碰撞矩阵v。
碰撞矩阵v如下:
碰撞矩阵v(x,y,z)x,y,z∈(1,2,3,4)如下:
v(x,y,z)=[
[[0,1,1,0],[1,1,1,1],[1,1,1,1],[0,1,1,0]],
[[0,1,1,0],[1,1,1,1],[1,1,1,1],[0,1,1,0]],
[[0,1,1,0],[1,1,1,1],[1,1,1,1],[0,1,1,0]],
[[0,1,1,0],[1,1,1,1],[1,1,1,1],[0,1,1,0]],
]
v(x,y,z)与p(x,y,z)是一一对应的。
重绘3d模型时,碰撞矩阵v中,碰撞标签为0的,则不绘制该小长方体;碰撞标签为1的,则绘制该小长方体。由上述碰撞矩阵v(x,y,z)以及p(x,y,z),可以重绘3d模型如图4所示。
那么,当拆分的小长方体足够多的时候,重绘的3d模型无限接近于原始3d模型,至于拆分多少个小长方体由具体的模型精度决定。
此时,3d模型已经变成矩阵v和p(x,y,z)组成的描述,不需要3d引擎也可以进行模型重绘、模型表示。