【Nier·9】月之泪场景复刻(终)

最近在做机械纪元的同人游戏,作为名场面…月之泪花田必须有姓名→ω→

经过两天的缝合(不是),目前效果如下:

对比一下原版…awsl:

场景包含:

使用素材

  1. 草地摇曳和交互的效果来自Minionsart大佬的教程

  2. Bloom效果来自Catlike Coding的教程

草地摇曳效果

简单来说就是对使用该材质的模型的vertex进行移位处理(displacement)。

在shader的vertex函数中通过函数修改顶点位置,常用的有正余弦函数,这样处理后模型看起来就像在风中轻轻晃动一样。

草地交互

碰撞体进入草丛时,踩踏在草地会造成草被压倒的效果,同时落脚处正下方会有一些阴影,让角色与草丛的交互显得明显、更加有真实感。

Minionsart的教程中给出了原理解释(如下图):

给定交互碰撞体一个半径,以此半径构成的圆圈范围内草地模型会有x轴方向上的向径外偏移,z轴方向上的高度压低,以此营造草地被压倒的效果。此外该范围内叠加颜色,营造阴影效果。

月之泪模型制作

月之泪的模型是用Blender现撸的,模型只有花瓣和花茎两个部分。但是因为要对整朵花添加摇摆效果,必须将这两部分合并,否则上下会分开摇曳效果会很鬼畜…

合并的时候有点需要注意,之前做模型我都是直接ctrl+J合并mesh,这次才发现这样合并其实两个部分的顶点并没有拼合,只是单纯的组合到一起,可以被一起选中而已。要拼合两个mesh,即想要两个mesh交汇处顶点能连接起来,可以用modifier中的Boolean实现,这样分离的mesh才会组合成一个完整的mesh。

成品如下,做了直杆和偏头的两朵花,然后拼成不同数量的组合,用于生成花田。

添加Bloom效果

Unity是有自带的Bloom效果的,在PackageManager中下载post-processing包,内含Bloom着色器。平时搭配standard着色器效果就很不错。

不过刚好之前看过catlike coding的教程,他的bloom超方便(俩脚本),我就先用着了→_→

但新问题是,月之泪只有花瓣会发光,花茎是无光的,而花田的摇曳效果要对整朵花的模型一起生效,不能将花朵与花茎分成两部分。

解决方案是修改shader,在原本的摇曳交互shader中添加一张emission贴图,emission贴图中只保留发光的花瓣部分,不发光的花茎部分贴图删除成透明通道,这样就只有花瓣部分会发光了。

注意贴图保存成png格式,并且在U3D图片设置时选择包含透明通道的模式(RGBA),这样透明才会生效。

花田生成

接下来就是用两朵花生成一片花海了。

新建几块花田的预设,花朵从多到少以及各种角度,增加随机性让最终成品看起来自然点,然后把它们挂到花田生成脚本上,随机实例化,生成指定方形花田。

开销

我的电脑大概在生成25x25面积花田时候开始出现掉帧卡顿,不过生成20x20的时候还是很丝滑柔顺的,足够我需求的花田了。

工程文件

Sample场景(不含2B)可以在这里下载