# mars-unity **Repository Path**: hou-chenfeng/mars-unity ## Basic Information - **Project Name**: mars-unity - **Description**: 科研课堂和冯如杯 从天问和nasa的DEM数据生成unity3d模型,使用c#编程进行可交互平台开发 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-12-29 - **Last Updated**: 2023-02-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mars-unity ## 简介 使用天问数据和HIRSE数据,在uinty中重建火星地表3d模型,并使用C#编写数据生成代码,并进一步开发可交互系统以供论文研究。 ## 数据 ### 天问数据 天问的数据 包括高分辨率相机2021年6月2日前获取的祝融号火星车着陆区地形数据。以及5月15日着陆火星后,多光谱相机在第21和43个火星日获取的影像数据、导航地形相机在第5、31和45个火星日获取的影像数据。该数据用于分析着陆区地貌背景和关注的科学问题。该数据包中包含32个数据文件,总数据量为10.8GB. 来源:https://moon.bao.ac.cn/web/zhmanager/zygj 度盘链接:https://pan.baidu.com/s/1JiQ1xxOhFco_VHWWN7abww?pwd=yyds ### nasa数据 HIRSE数据:图像、立体成像对制作的DEM数据 https://www.uahirise.org/dtm/ https://www.uahirise.org/dtm/PSP_007951_2220 (2m精度DEM) CTX数据:图像 https://pds-imaging.jpl.nasa.gov/volumes/mro.html MOLA数据:激光雷达 https://astrogeology.usgs.gov/search/map/Mars/GlobalSurveyor/MOLA/Mars_MGS_MOLA_ClrShade_merge_global_463m GAN数据集: The dataset is composed of 250k patches where each patch is a 3-channels 512 x 512 raster. The first two channels are respectively left and right images of the stereo pair while the third channel is the DTM. Because DTMs are saved with absolute values you have to preprocess in case you want to predict relative values. In this project I use a monocular depth estimation model, thus, in the dataloader I converted the absolute heights to relative depths. The Dataset size is 800 GB. https://www.kaggle.com/datasets/mattiagatti/uahirise-mars-dtm-estimation ### 仿真数据 仿真的火星地表数据 网上购买 度盘链接1:Blender https://pan.baidu.com/s/1uPIM7QdJBTOpYZ3dmLBlPQ?pwd=yyds 度盘链接2:unity https://pan.baidu.com/s/1NvID_fUmhCadZ5MKB9La_Q?pwd=clc7 ### 月表数据: 嫦娥工程数据: https://moon.bao.ac.cn/ce5web/searchOrder_pdsData.search ## unity三维模型制作 - 基本思路: - globalmapping软件切割DEM数据,使用PS处理,导入Unity **参看refer_kykt** - 已完成: - 天问一个dem数据的unity模型,中间数据,**待上传** - TODO: - 天问其他数据制作模型 - HIRSE数据制作模型 - 天问数据基本参数(经纬度、范围、尺寸) ## 数据生成 - 使用c#脚本,在unity中控制摄像机生成数据 - CameraControl.cs控制摄像机移动,Photo.cs控制摄像机拍照记录数据 - 数据生成之后,使用depth.py进一步处理数据 - 已完成 - 仿真数据采集的下降图像若干组,待上传 - TODO: - 不同着陆轨迹的C#脚本 - 轨道器的数据采集脚本 - 可互动、可展示的系统 ## 未来方向 - 光照 - 可使用golabmapping的功能,对三维模型不同方向光照直接生成图像 参考refer - 使用unity仿真 - 可用来SFS算法恢复地表深度的算法研究 [文献链接]( https://pan.baidu.com/s/1BTAvWkt5CKgkZyKq8BbTuA?pwd=yyds ) - 可用来NERF不同方向光照,恢复三维模型的研究 - S3-NeRF: Neural Reflectance Field from Shading and Shadow under a Single Viewpoint - 可交互平台 - 对轨道器和着陆器的拍摄方式进行仿真,做到可交互(轨迹参数)的数据采集,实时展示在unity中 - 界面设置参数,运行看降落过程的动画,保存数据 - 为了做算法研究 着陆器深度学习的轨迹恢复和地形恢复 ## 进度管理 ### 时间计划 ### 周报 *自2022.12.30起,每七天更新至少一次* ### 第一周 *由于可交互平台需要利用Unity3D进行制作,本质上可以类比成一种游戏,需要使用Unity3D软件和C#语言* - 学习Unity - 游戏引擎的基本概念 - Unity3D引擎的优势 - 管理编辑器版本,配置本地环境 - 游戏物体创建和常用操作 - 全局及局部坐标系 - 学习C# - 环境配置 可以直接借助Unity3D引擎安装Visual Studio 2019,也可以手动配置环境 - 程序结构 一个C#程序需要有:命名空间声明,一个Class类,Class方法,Class属性,一个Main方法,语句,注释…… ### 第二周 完成了**天问**所有`DEM`数据的模型处理。 由于天问包含一个比较大的数据,不得不分割成多份**2048×2048**的小块地形才可以导入Unity。经过测算和综合考量,最终将其分割成九份以导入Unity。 但是又考虑到之后需要处理的**NASA**数据更加庞大,如采用这种方法,将手动分割**60**到**70**张图像,费时费力,遂尝试寻求一种更加高效的方法。 学习Unity 每周写周报,代码上传,重要数据使用北航云盘or百度云上传备份 # 代码说明 ### CameraControl 用于控制摄像机移动,按下`WASDQE`即可控制摄像机在三条直线六个方向上移动 按住`LeftShift`可以加快速度 ### P2 用于控制摄像机拍照,按下空格开始。 ### Capture 由P2控制,协助P2完成拍照任务 # 重大更新说明 优化了代码逻辑,删除了原有的`Photo.cs`,扩展成了三个脚本,分别为`GetPath` `P2` `Capture` ### 数据存储逻辑修改 之前尝试调用windows提供的可以用于`C#`的`.dll`文件以实现`Using System.Windows.Forms`,进而实现打开对话框由用户自定义选择保存数据位置 经过多次尝试之后,发现这种实现方式在`Unity Editor`中经常发生闪退问题,具体表现在修改任意`C#`代码之后的编译过程中,甚至在没有任何任务执行时都会崩溃闪退并弹出`Unity Bug Report`窗口 为了解决此问题,特此增加更加专门化的脚本`GetPath.cs` 实现效果:每次进入新场景,在`Application.StreamingAssetsPath`,即项目中`./Assets/StreamingAssets`文件夹下创建根文件夹,根据当前时间进行命名确保不会重复且易于区分 ### 连续拍照方式修改 原有脚本使用`for`循环方式实现连续拍照并写入数据,使得在下降过程中无法即时渲染出摄像机移动后拍摄的画面,只能显示出拍摄结束后摄像机所在位置,过程期间程序为**无响应**状态 本次创建新脚本`Capture.cs`,在`Update`方法中实现计时,即相邻两次拍照之间存在间隔,用这种方式给摄像机提供移动和渲染时间,每次拍照存储数据之后都会有一定时间的间隔,具体数值将会实现可以由用户自定义 每次按下拍照(空格)之后,在`P2.cs`中进行第一次拍照,在`Capture.cs`中进行后续拍照.`Capture.cs`脚本一经激活便会开始拍照进程,所以我们使用`P2.cs`控制其激活,并在每帧都检测是否达到拍照目标数量或者穿模,控制其停止. ### 存在的问题 图片拍摄的大小为1024*1024,实际上相当于剪切.由其引发的相机内参的问题仍需要处理 写入`depth`文件夹的`.txt`深度数据的个数仍然是`1920*1080`,还并未改成`1024*1024`,等待解决内参问题后再处理 # 往次更新说明 上次更新的新脚本之间的执行顺序存在一定问题,本次进行修复,经过测试可以正常运行 # 本次更新说明 自动获取`Getpath`游戏物体,进而自动获取`GetPath`脚本组件.考虑到后期场景比较多,为了避免每个场景都手动拖拽指定游戏物体及其组件,直接由代码在`Awake`函数中实现自动获取游戏物体和组件. # Todo 1. 解决相机内参问题 2. 计算第三人称视角相机位置,以同时呈现出拍摄机器和拍摄区域 3. 置入可输入文本框,实现自定义相机移动速度 4. 优化ui,对每个场景做出说明 5. 三种拍摄方式 6. 呈现出相机当前的位置