抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

之前就一直想分享一下自己做Terraria的3d渲染图以及动画总结出来的一些方法(或者也可以说是体素?我不确定自己做的东西算不算是体素),但是想说的方面实在是有点多,不先打个草稿的话,做成视频怕自己说不清楚,所以干脆先写一篇文章

文章的内容分为两部分,第一部分是关于静态图片的,第二部分是关于动画的,这次主要是介绍一下整个流程,之后可能会再写一些具体点的内容

文章使用到的软件:

其中Asprite和Blender有Steam版本

@[toc]

一.静态图片

1.1 获取素材

这里的素材可以是Tr的贴图,游戏内的建筑,或者是自己画的像素画

获取游戏贴图的话可以使用TConvert(大部分家具和植物的贴图都是分裂开的,可以使用ASprite或者别的软件合到一起,或者参考下面对建筑的处理方法(特别是树))

游戏内的建筑的话可以直接在游戏内截图然后用ps抠出来,我一般是使用地图编辑器TEdit,关闭它的网格显示,背景就变成了纯色,抠图就容易多啦。但是呢,这种方法有一个缺点就是会损失很多游戏内的“特效”,比如玻璃和光照效果

至于自己画像素画,因为我并不怎么在行,就不多介绍啦

Tedit关闭网格后的效果

1.2 像素变体素

为了让我们的素材之后在3d场景里看起来更立体一点呢,我们需要给素材一点“厚度”,我这里用的是MagicaVoxel,这个软件本来是专门为体素艺术设计的,直到有一次我试着拖了一张图片进去,才打开了新世界的大门。

MV单个物体的最大尺寸是256x256x256,如果你的素材超过这个大小,导入后会变模糊或者无法导入

第一次打开软件应该是在跟我一样的界面,这是MV的物体编辑界面,先点击图中所指的箭头切换到MV的世界界面,按下退格或del可以删除默认的方块

如果现在直接拖入素材(可以同时拖入多个),素材可能会变成奇怪的颜色,这是因为窗口左边的调色盘内没有和我们素材对应的颜色

我们可以先把素材拖进调色盘区域,之后再重新拖入素材来解决颜色不正确的问题(如果你需要世界内同时存在多个素材,或者素材的分辨率比较大的话——直接拖入可能无法导入所有颜色,可以先把所有素材放到Asprite或者ps里然后导出png或者act格式的调色盘文件)

这时我们会发现素材已经有了一定的厚度,接下来可以选择在右上角保存文件,直接在右下角导出成其他格式的文件(例如我会直接导出为obj,之后导入blender)

MV导出obj时会生成xxx.obj,xxx.mtl和xxx.png,所以选择储存位置和文件名的时候要注意一下,以免直接覆盖了原本的.png素材文件

或者我们也可以选择对素材进行进一步的调整,例如对于篝火,我想让底部的木头比火焰更“厚”一点。进入物体编辑模式,在右上角把z尺寸改为3,选择面笔刷-增加-使用体素颜色-颜色,沿着火焰与木头的交界画一遍,之后再选择几何,并且让物体整体再z方向循环移动,
就差不多啦



MV是一款十分强大的软件,我们是可以用它来完成场景的搭建以及渲染的,而且可以做的很好看,但还是存在一些限制,(比如由于它是为体素设计的,如果旋转的角度不是90°的倍数的话,物体就会变形)所以我会用blender来做场景和渲染

1.3 场景

这部分我其实没什么好说的,对于Blender我只是到了会用的程度,大家可以去B站和油管上看看关于Blender的教程,然后发挥自己的想象力吧!

二.动画

大家应该知道,Tr里的动画其实是按照顺序,重复的加载贴图的每个部分,所以我们制作动画呢,就是要让模型按顺序,重复的出现又消失,在Blender里可以通过对物体可见性加上关键帧来实现,但是模型一多,手动这么做的话,工作量会很大,而且很容易出错,好在我们可以通过插件来完成这个步骤

2.1 准备模型

在这之前呢,我们需要获得贴图每个部分的模型,所以需要先把贴图的每个部分导出成独立的.png文件(ps的切片可以很方便的做到,做这步的时候可以顺便导出调色盘文件),调整好调色盘之后(导入调色盘文件,或者各个部分里颜色最多的图片),就可以全选直接拖入MV

导入后大家可能会发现一个问题,某些模型的边和其他模型不在同一个位置上,以下图的篝火为例,如果我们不做改变导入blender的话,加载到这个选中的模型的时候,物体位置会出现一个突变

出现位置突变的原因我大概解释一下,MV导出的.obj文件的原点是MV中世界的原点( 因此导出的时候请确保所有模型是“重叠的” ),所以图中选中的模型在Blender里也会比其他模型稍“高”一点点

对于篝火,我们只需要全选,-y方向对齐即可让模型的底边对齐

对于其它出现这种问题的情况,就需要大家自己分析该如何处理啦。有些贴图导入之后,无法通过“对齐”的方式来解决,例如鸟妖。这里我给大家提供另一种解决办法。

会出现这种问题,其实是因为MV会自动裁剪掉贴图中完全空白的“行和列”,然后再以剩下的部分的中心作为物体的中心,所以我们要做的就是让MV不要进行裁剪,目前我想到的办法是,在分割贴图之前在贴图的左右两边各加上一条边,这样切片之后再导入MV,然后在MV中通过缩小物体的x尺寸去掉多余的边(物体编辑模式下可以用指令 size x y z)



调整完成后,就可以导出啦,最好单独导出到一个文件夹,MV默认是导出世界内所有物体的,且顺序与我们导入的顺序相反(即导入图片A01,A02,A03,导出的是A03,A02,A01,可以通过在导入前重命名文件来解决这个问题)

2.2 模型导入

前面说到,我们要使用插件来完成模型的导入和可见性的变换,我使用的插件是Stop-motion-OBJv2.2.0 alpha4 (这个版本不支持Blender 2.92,支持2.91,使用alpha版本是因为它有一个关键帧的功能),启用插件后点击导入–Mesh Seaquence,在箭头出输入模型开头的几个字母,比如我要输入“harpy”(由于我是单独保存的,所以其实“h”就行),插件会自动的把模型导入到一个新的集合里

123


这时候播放动画,会发现动画很快的播放了一遍,我们可以在物体属性–Mesh Seaquence里进一步设置,起始帧设置动画开始的时间,速率设置每一帧持续的时间,然后是模式:

  • 空白:播放一遍后消失
  • 扩展:播放一遍后保持在最后一帧
  • 重复:重复播放
  • 弹跳:不理解,感觉是照一定规律乱变
  • 关键帧:关键帧动画

着重介绍一下关键帧模式,再此模式下我们可以通过输入数字(想显示第几个模型)后按下I打关键帧,来决定这个时间点要显示的模型(可以通过打关键帧的方式解决MV导出的顺序问题)

如果有需求,可以曲线编辑器内调整曲线插值模式为常值,不然它会加载一个个模型的加载过去(例如第一个关键帧为1,第二个为6,默认会1,2,,3,4,5,6而不是1,6)

评论