南阳专业网站制作费用,wordpress 快站,免费咨询病情,品牌推广的方式本发明涉及虚拟现实领域#xff0c;特别涉及一种基于Unity3D的虚拟陶瓷设计方法。背景技术#xff1a;陶艺工艺制作环境要求严格#xff1a;不仅在拉坯成型需要利用旋转机器#xff0c;在烧制过程则需要窑炉锻造#xff0c;如何将陶瓷制作工艺与虚拟现实开发完美结合在一起…本发明涉及虚拟现实领域特别涉及一种基于Unity3D的虚拟陶瓷设计方法。背景技术陶艺工艺制作环境要求严格不仅在拉坯成型需要利用旋转机器在烧制过程则需要窑炉锻造如何将陶瓷制作工艺与虚拟现实开发完美结合在一起就成为了一个值得探讨的问题。虚拟现实技术是仿真技术的一个重要方向。它利用电脑模拟产生一个三维空间的虚拟世界为用户提供关于视觉等感官模拟令其产生身临其境的感觉和体验可以及时、没有限制地观察三维空间内的事物。将陶瓷制作虚拟化最重要的三点就是陶瓷的结构设计、陶瓷的形态变换以及手势识别。目前国内外已经有许多针对陶瓷制作手势识别的进展其中普渡大学的Vinayak和Karthik Ramani就针对多种手势动作与陶瓷形态曲线的敛合进行了深入的研究并实现了很好的效果。纵观整个市场完整的虚拟现实陶瓷制作体验游戏仍未出现也不曾有体验游戏将虚拟现实和Leap Motion相结合同时运用在陶瓷制作上。技术实现要素本发明提供一种基于Unity3D的虚拟陶瓷设计方法将陶瓷制作工艺与虚拟现实开发完美结合在一起使用户能在虚拟现实环境中通过Leap Motion体感交互设计动态化的陶瓷网格模型并实现自定义网格模型的动态保存和加载。一种基于Unity3D的虚拟陶瓷设计方法包括以下步骤步骤1在Unity中集成VR、Leap Motion的开发环境步骤2将虚拟现实场景分成远景和近景两个部分步骤3设计动态变化的陶瓷结构步骤4定义陶瓷网格属性的计算方法步骤5定义高斯函数参数通过该函数控制陶瓷网格半径和高度变化实现在虚拟环境中的动态变化步骤6对陶瓷材质进行渲染步骤7实现对陶瓷网格数据的动态保存和加载步骤8功能集成。作为优选步骤2中所述的远景采用实拍照片合成所述的近景采用3D建模软件进行模型构建。作为优选步骤3中所述的陶瓷结构定义为Pn,m{(hi,Ri,ri)|RiR(hi),rir(hi),h1…hn∈R}其中hi表示圆环截面Ci的高度hi∈[h1,hn](h1,hn∈R)R表示实数集合Ri表示圆环截面外半径ri表示圆环截面内半径内外半径被连续闭区间[h1,hn]中的光滑函数ri:R→RRi:R→R定义n为陶瓷的圆形截面环个数m为每个圆形截面环上的顶点数vi,j表示圆环截面Ci内环的第j个顶点Vi,j表示圆环截面Ci外环的第j个顶点。步骤4的具体过程为将自定义网格顶点分布形式分为内外侧面、顶部内外侧面交接处和内外底面根据这三种情况对网格的顶点、三角形序列、顶点的法向量、UV坐标进行重新计算定义。计算时对网格的内外侧面和内外侧面衔接处做统一处理将内外侧面、内外侧面衔接处网格整体展开作为普通的长方形网格面(圆柱体展开为长方形)。其中每个顶点的法向量值为顶点周边不同的三角形面片的法向量的平均值。计算UV坐标时将网格内外侧面以及内外侧面衔接处的贴图在U方向上进行水平镜像使贴图在首尾相连时不会出现分割线。步骤5中所述定义高斯函数参数具体为用高斯分布与陶瓷轮廓的形变曲线拟合计算出符合物理情境的参数公式为其中参数μ始终为0。步骤6的具体过程为将可动态变化的陶瓷网格加入到实现的虚拟场景之中通过不断的贴图调整和参数调制最终确定陶瓷贴图渲染方案。步骤7进一步包括首先将自定义网格结构以“.obj”形式保存然后序列化自定义网格将对象转换为字节流保存到PersistentDataPath路径下最后反序列化字节流将字节流转化为自定义网格动态加载到场景之中。本发明通过在Unity3D引擎上结合VR和Leap Motion创建流畅真实的虚拟环境设计可动态化的陶瓷网格模型实现利用感应式交互对陶瓷网格的动态修改、动态保存以及动态加载大大增加了可玩性使体验者有身临其境的感觉。附图说明图1为本发明的流程图图2为在Hierachy下Leap Motion的组成图3为Hand Pool属性的修改图图4为合成后的Stereographic模式照片图5为陶瓷层级环状网格结构图图6为陶瓷结构的内外侧面和内外侧面衔接处网格展开图图7为网格的三角形序列样例图8为计算顶点在展开面顶部时法向量的情况图9为计算顶点在展开面中部时法向量的情况图10为计算顶点在展开面底部时法向量的情况图11为材质渲染结果图图12为本实施例的交互逻辑图图13为本实施例的制作陶瓷的启动页面图14为本实施例制作陶瓷时陶瓷半径变化图图15为本实施例制作陶瓷时陶瓷高度变化图。具体实施方式下面结合附图对本发明的技术方案进行详细讲解。如图1所示一种基于Unity3D的虚拟陶瓷设计方法包括以下步骤步骤1集成VR、Leap Motion的开发环境。从Leap Motion官网下载并安装Leap Motion SDK同时下载Leap Motion Unity Core Assets并导入已经创建好的项目中。导入成功之后在Hierachy中创建空对象取名为LeapMotionControl。从Leap Motion/Prefabs文件中取出预制体LeapHandController放到LeapMotionControl下方即成为其子对象。同时为LeapMotion Control创建新的空对象命名为HandModels。从LeapMotion/Prefabs/HandModelsNonHouman和LeapMotion/Prefabs/HandModels Physical中依次提取手预制体最终得到的层级关系如图2所示。最后修改Hierachy中LeapHandController的HandPool属性修改如图3。从HTC Vive官网上下载VIVE软件并安装再到Unity3D资源库下载SteamVR Plugin资源包并导入项目资源文件中勾选EditProject SettingsPlayer里的Virtual Reality Supported。创建的空物体命名为CameraVR从SteamVR/Prefabs中获取[CameraRig]的预制体相机作为其子物体。这样即便不能直接改变[CameraRig]的位置也可以通过修改CameraVR的Transform来操作它。步骤2构建高性能的虚拟场景。虚拟场景采用了“近景网格远景图片”的形式即用户所在点周围场景通过导入场景网格进行渲染而远离用户所在点的场景只需要使用经过特殊处理的照片进行天空盒贴图。远景图片采用现场实拍合成的方法。首先先通过摄像机在选定的拍摄点进行现场360度无缝连拍。为了保证拼接效果良好相邻图片之间至少要有30的重合得到照片集。紧接着通过合成软件Image Composite Editor将照片拼接图片导出模式选为stereographic如图4所示。将拼接成功的照片导入Unity3D制作天空盒。选中照片将Texture Type类型修改为Advanced将Mapping类型修改为Latitude-Longitude Layout(Cylindrical)最后根据图片质量选择适当的Max Size。步骤3设计可动态变化的陶瓷结构。如图5所示将陶瓷结构描述为包含一组在高度处内外半径被连续闭区间[h1,hn]中的光滑函数定义的圆形截面环扫成的柱体。将陶瓷结构定义为Pn,m∶{(hi,Ri,ri)|RiR(hi),rir(hi),h1…hn∈R}其中hi表示圆环截面Ci的高度hi∈[h1,hn](h1,hn∈R)R表示实数集合Ri表示圆环截面外半径ri表示圆环截面内半径内外半径被连续闭区间[h1,hn]中的光滑函数ri:R→RRi:R→R定义n为陶瓷的圆形截面环个数m为每个圆形截面环上的顶点数vi,j表示圆环截面Ci内环的第j个顶点Vi,j表示圆环截面Ci外环的第j个顶点。步骤4定义四个网格属性的计算方法。观察陶瓷网格结构将其结构分布分为如下三种情况(a)内外侧面(b)内外侧面衔接处(c)内外底面。计算顶点时三种情况顶点计算方法都不同因而需要定义三种计算方法。之后将内外侧面、内外侧面衔接处沿着某一垂直线切开整体展开效果如图6所示。灰色部分为内外侧面衔接处上下白色部分网格分别为内外侧面。在计算三角形序列时将(a)、(b)两种情况合为一种情况以顺时针的方式进行计算。如图7所示在展开网格面里由定点1、2、3、4构成的长方形面片其由两个三角形序列组成分别是(1,2,3)和(1,3,4)。情况(c)中每个三角形面片共用一个圆心因而只需一次计算每个三角形面片即可。在计算法向量时在(a)、(b)两种情况合为一种情况顶点法向量计算在图6上的展开面片上分为顶部、中部、底部。这三种情况在计算上均为求面片法向量的平均值只是对面片的选择和数量不同。当顶点如图8在顶部时只需计算面片1和2的法向量平均值当顶点如图9在中部时可以选择计算面片1、2、3、4的法向量平均值当顶点如图10在底部时可以选择面片1、2的法向量平均值。情况(c)中设置内外底面的法向量分别为物体坐标Y轴朝上和Y轴朝下。在计算UV坐标时将(a)、(b)两种情况合为一种情况。将对应的贴图水平镜像一张对应于展开网格图的左半边一张衔接左半边贴图并对应于展开网格图的右半边使最后网格形成圆环结构时贴图不会出现分割线。情况(c)中同样将贴图镜像只是在处理映射关系时将贴图的上边缘坐标都映射到圆心坐标下边缘映射到圆环顶点坐标。步骤5定义控制陶瓷网格半径和高度变化的方法。通过Leap Motion SDK获取每帧手的位置、运动速度等相关信息计算手的运动向量和手相对于陶瓷轴心位置向量的夹角来判断半径是变大、变小还是不变。当某一层级的圆周被触发变化其邻边圆周半径会随之进行平滑变化。为了保持变化的流畅和平滑用高斯分布与陶瓷轮廓的形变曲线拟合计算出合适的符合物理情境的参数过程中保证参数μ始终为0。根据触发点的高度可将变化情况分为三种触发点在陶瓷顶部及以上、触发点在陶瓷中部、触发点在陶瓷底部。第一、三种情况只需要用高斯分布改变临近触发点一边的半径而第二种情况需要改变触发点两边半径。步骤6材质渲染。将可动态变化的陶瓷网格加入到实现的虚拟场景之中。通过不断的贴图调整和参数调制最终确定陶瓷贴图渲染方案为用normal map增加黏土本身的凹凸质感并调整材质平滑度和光泽实现如图11的水润效果。步骤7实现对动态变化的陶瓷结构数据动态保存和加载。将自定义网格结构以”.obj”形式保存。动态保存时序列化自定义网格将对象转换为字节流保存到PersistentDataPath路径下。动态载入时反序列化字节流将字节流转化为自定义网格动态加载到场景之中。步骤8功能集成。将实现功能通过如图12的交互逻辑进行集成。最后实现的启动界面如图13所示在设计动态化的陶瓷网格模型的过程中陶瓷的半径变化如图14所示陶瓷的高度变化如图15所示。陶瓷自定义结构可以实现动态保存和导入。