VR手游《HELLO MARS》工作室创始人分享游戏开发历程(5)

文章正文
发布时间:2024-07-24 03:56

  《HELLO MARS》虽然是一个小型项目,但里面用到了很多我们自己发明的黑科技。

  这里找几个有趣的点炫耀一下。

  游戏中最复杂的物件是“好奇号火星车”。

游侠网

  这是一个使用rocker bogie(摇臂转向架)悬挂系统的攀爬车。比普通的攀爬车更复杂的是,为了更好地稳定性,他的车身正上方还有一个横向的吊臂,这根横向的吊臂又被两边的摇臂所驱动。整辆车总共有20多个复杂的轴承结构。

  理清了轴承关系后,我们遇到了一个Unity的物理无法直接解决的轴承关系:“万向传动装置”。这个轴承出现在车身与大臂的连接处。

  这里我们用了两组关节互相约束,去模拟这个效果。

  另外,我们还根据阿克曼转向几何原理,以及火星车的轴距及前后轮位置等数据,设计了载具在转向时各车轮与车体旋转角度之间的关系函数,以保证火星车在转向时的真实性和稳定性。

游侠网

  因为没有任何实时光和投影,我们的火星车在地面上会显得很飘,而在这么复杂的场景中加上实时投影,显然是一件非常不划算的事情,效果也不会令人满意。于是我们做了一套模拟环境光照的动态贴图,并根据实时的光照方向混合这些贴图序列以实现足以以假乱真的实时软投影效果。

  为了给玩家提供最真实的火星环境,我们还提出了这样的需求:火星的地表材质大致可以分为沙地和岩石,我们希望火星车在碾压沙地的时候能留下让人信服的凹陷(能根据光照方向产生正确的明暗表现),而在岩石上则没有这样的效果。最开始,我们想过使用常规的贴片方法去模拟这样的效果,但是这个想法立刻被我们否定了,无论是不同地面材质交界处连贯的凹陷深度变化,还是对于光照方向正确的解释,都不是这个方案能够做到的。

  经过了很久的思考和尝试,我们最后终于想到了一个完美的方案:

  1.创建一个用于描述车轮运动轨迹的列表,载具每走出一段距离,将每个车轮的Transform 矩阵添加到这个列表中。

  2.每当轨迹列表更新时,遍历整个列表并在每个轨迹点绘制一个凹痕形状的Mesh,在Shader中设置它的颜色为“世界空间下的法线方向”,然后命令一个跟随载具的相机竖向拍摄这些Mesh,经过一些简单的调整后,我们就得到了一张凹陷后的地表法线图。

  3.将这张法线图连同载具世界坐标赋予地表材质,地表材质再根据“岩石还是沙地”决定以怎么样的程度将新的法线贴图覆盖原始法线。

  4.成功修改了地面的法线后,也就能很轻易的根据光照方向控制明暗表现了

游侠网

  另外,我们还通过类似上述的方法实现了降落模拟环节的“推进器火焰灼烧地面留下黑色痕迹”的效果。

游侠网

  关于HELLO MARS,暂时跟大家分享这些。