基于Unity3D的三维海底地形建模
- 格式:pdf
- 大小:489.60 KB
- 文档页数:7
【摘要】本文运用虚拟现实技术,以Unity3D为建模工具,介绍了三维海底地形地貌建模的建模步骤以及最终的建模效果,实现了三维海底地形地貌建模,为三维可视化海底管道集成系统的建立创造条件。
【关键词】海底地形;输油管;风险评估;三维模型;Unity3D
0 引言
海底管道是海洋油气开发的重要设施,近年来全球海底管道泄漏事件时有发生,造成了巨大的经济损失与生态环保破坏,世界各国对于海底管道的检测和风险评估日益重视。海底管道三维动态信息系统集成,旨在建立适合集成数据支持体系和基于该体系的网络三维可视化集成系统。
郝燕铃和路辉提出了基于OpenGL的具有真实感的三维海底地形显示的方法[1]。申浩、田峰敏和赵玉新提出了一种利用电子海图已有的水深数据生成三维数字高程模型的方法[2]。邱秋香提出了将IFS分形插值曲面算法应用于海底离散的水深高程数据插值过程,在Creator建模工具中使用Delaunay转换算法生成三维海底地形模型[3]。作为一个三维虚拟现实的开发平台,Unity3D具有兼容操作系统可跨平台发布并部署、开发效率高、人机交互功能强大、三维效果逼真、内置网络功能的特点,被广泛地运用于游戏开发和虚拟现实。Unity3D支持所有主要文件格式的资源,并能和大部分相关应用程序协同工作,其内置的地形引擎可以实现广阔复杂的地形场景在低端硬件上流畅运行。
本文以Unity3D为建模工具,结合Photoshop图像处理技术,构建一个基于Unity3D的三维海底地形地貌模型。模型具有真实的三维立体感,以虚拟海底环境为目标,用于作为三维可视化海底管道集成系统建立的基础。
1 总体地形建模方案
本文建模的总体方案是通过Unity3D地形引擎创建一个基础地形模型,在这个基础地形上添加各种场景效果,实现各种功能,最终形成一个三维海底地形地貌的模型。建模大的具体流程如图1所示。
图1 三维海底地形地貌建模流程图
2 基础地形建模
打开Unity3D创建一个新的Project,将建模所需的所有资源导入新建的Project中。在Project中新建一个Scene,本文建模的所有操作都在这个Scene中进行,对于过于庞大的地形,可以创建多个Scene,用切换的方法将分块的地形连接起来。
(1)Heightmap生成真实地貌
Heightmap是一种二维用明暗表示地形高低的图片[4]。在Photoshop中制作一张大小为2的幂的地形灰度图,保存成RAW文件,获得Heightmap。
在Unity3D菜单栏中,单击Terrain,选择Import Heightmap-raw选项,将制作好的Heightmap导入,调整对应的图像参数和电脑系统参数,对地形大小进行设置。完成后,添加一束平行光,在Scene视图中查看导入的地形,效果如图2、图3所示。
图2 地形俯视图图3地形起伏效果
(2)细节处理
将Heightmap导入地形后,选中Hierarchy中的Terrain,使用Inspector面板中的地形绘制工具,对导入的地形进行起伏处理和平滑处理的微调。
基础地形成型后,为地形绘制纹理。选择Inspector面板中,地形绘制工具栏的第四个工具Paint the terrain texture,单击Edit Textures,选择Add Textures,将用作地形基础纹理的岩石贴图导入。在Scene视图中查看贴图后的地形,在地势高耸和凹陷的地方出现纹理拉伸变形的情况。
在Project面板对岩石纹理贴图重命名,再次将贴图导入至Terrain Texture 中,并选中纹理单击Edit Textures,将Tile size X与Tile size Y调小。在Brushes 栏中选择一个羽化的笔刷,调节笔刷大小和透明度,在Scene视图中发生纹理拉伸的地方进行修正,完成基础纹理绘制。
参照上述方法将沙地、淤泥、青苔等贴图依次导入Terrain Texture中,设置不同的Brushes,调节的大小和透明度,在基础纹理的地形上依次绘制出沙地、淤泥地,以及作为修饰的青苔。通过反复的绘制,得到复杂的混合纹理地形,完成整个基础地形的建模。基础纹理地形与混合纹理地形效果如图4、图5所示。
图4 基础纹理地形效果图5 混合纹理地形效果
3 场景效果添加
3.1光源与天空盒添加
添加基础地形之后,模型中只有一束用于查看的平行光,整个画面的光照感不真实。调整地形上方那束平行光的方向和光照强度,使整个地形细节清晰,画面柔和。在需要看清的地形阴暗面添加点光源,调整点光源的发光角度、照射距离与亮度,使原本处在阴影下的细节可见。
基础地形模型悬浮在场景中,周围是黑色的背景,需要添加一个天空盒,将
地形背景改成现实世界的背景。天空盒相当于一个巨大的盒子,用六张无缝拼接的贴图组成六个面,将整个地形模型包裹起来,成为整个地形模型的背景。
在菜单来中单击Edit,选择Render Settings选项,打开场景渲染设置,对渲染设置中的天空盒材质设置为Sunny3 Sky,完成场景天空盒的添加。在Scene 视图查看天空盒的添加效果如图7所示。
图6 灯光效果图7 天空盒效果
3.4立体水效果添加
(1)平面水添加
为地形添加水,将Daylight Water水模型导入场景,设置网格过滤器为平面,调整模型的三维坐标与尺寸使水面模型平铺满整个地形模型。为了节省内存,水模型是单向平面模型,即模型的水面只能在模型上方可见,没有水下视觉效果。
(2)立体水效果实现
立体的水效果无法通过单一的模型来实现。现实中的水面在穿越的时候有一个视觉切换的过程,在水面上时是正常的视觉效果,当进入水下视觉切换成蓝色雾化的视觉。本文的模型通过安装碰撞触发,用脚本实现这样的视觉切换。
创建一个贴放在水面下一个无mesh Renderer的标签Tag为“Water Collide”的cube与摄像机做碰撞检测,设置cube的盒碰撞器,并激活它的触发器属性。模型中交互操作都需要通过脚本实现,是脚本让模型中的元素附有生命。编写一个触发雾化的脚本,脚本的功能方法如表1所示。
表1 WaterCollide脚本功能实现