星期四报告:溅入着色器

在星期四,我写了一份关于我的发展和想法的简短报告,是否要做的事情不只是让自己负责。 请享用!

在不知道确切的关键功能如何发挥作用的情况下,很难决定如何将花园拼凑在一起。

没有水景,没有一个花园会是完整的;如果没有它们之间及其之间的池塘,河流,湖泊,自然世界就不会感觉合适。

自从有必要以来,水就一直是所有开发商的祸根。 坚实的地面至少需要能反射地面本身的纹理。 也许有一些不错的照明。 水带来了静态水无法解决的挑战-也许最重要的是因为它不是静态的。 它是半透明的,可以反射光,并且可以根据周围的环境做出动态反应。 我想说的是提供令人信服的水的关键。

“不要挨饿”采用一种风格化的方法,使用彼此之间平铺的2D波浪图像,以几乎伪造的方式移动。 对于2D风格的世界来说,这是一个引人注目的解决方案,并且与游戏的怪异,令人震惊的色调完美契合。

在换头场景中,我在“ Kingdom Ka”中模仿了这一点,因为人物需要从头上抽出少量水。 这是一个古怪的解决方案,非常适合场景的荒谬性质。 尽管与实际用水几乎没有共同之处,但仍可立即识别。

虽然这种方法适合这两种情况,但我在想这是否是寨花园的前进道路时犹豫不决。

尽管仍然是一款风格化的游戏,但目标却有所不同。 我想参观池塘或河流来唤起我们坐在森林安静的水边时的感受。 它带来一定的平静,并邀请您停下来思考。 不要挨饿的波浪说“危险!” 在一个脚步不断的世界中。 在继续前进之前,您无法观看超过2D的积水。

那时我知道我需要深入着色器世界,以实现既与世界风格一致的感觉,又使感觉像真实,平静的水一样的东西。

事实证明,编写脚本着色器是我之前所做的工作的另外一大锅鱼。 由于水将是游戏中的主要着色器(并且可能是唯一的着色器),所以我认为学习一门全新的语言并不值得-有人致力于这种工作。 因此,我研究了一些简短的教程,找到了几段开源代码,将它们拼接在一起,将值稍作更改并随机插入乘法,似乎很可能会看到所有结果。

嘿,有点奏效 。 进行更改并查看代码如何响应会触发我的孩子气,因此这是度过一些下午的好方法。

第一个突破是进行反思。 图像的简单翻转部分看起来很像水。 要点是,游戏会从着色器正上方的屏幕捕获像素,并将其水平反转,所有这些都是实时的。

看到角色反射突然出现在水中绝对是一件神奇的事。 这种解决方案的麻烦在于,由于它依赖于屏幕上的实际像素,因此当事情与预期不符时,它会翻转并断裂。

例如,如果摄像机移动以至于“水”距离屏幕太远,则着色器将无法反映要反射的信息,因为它将无法拍摄。 结果是着色器拉伸了可用的几个像素,从而导致了最终游戏中无法通过的视觉故障。

这很有道理。 我基于该代码的源代码是用于侧面滚动游戏的,其中水位保持恒定。 当放大和缩小相机时,着色器还会以夸张的方式拉伸事物,这可能是因为引入或删除了很多新信息。

因此,也许反思可以等待另一天。 我确定解决方案是让游戏反映场景而不是屏幕上的像素,而这是我需要研究的。

因此,我着眼于水本身的表面。 随着水的流动,​​它会倾斜并塑造周围的光线。 着色器对话中的“位移映射”是使用纹理指示着色器应如何操作其下方像素的位置。 例如,您可以说纹理应使纹理中的红色和绿色反应。 然后,传递该纹理使其在下面的精灵上缓慢移动。

可以将其想像成狂欢节上的那些小屋镜子,通过上下移动自己,以不同的方式拉伸或扭曲面部或身体。 只是在这里,镜子一直在移动。

因此,我迅速绘制出一种池塘状的精灵,石头位于底部,然后绘制了一个多边形以匹配其着色器将占据的形状。

经过一些价值调整后,看起来不错! 像水一样满意。 它甚至掩盖了我下面的丑陋石头质地。 麻烦的是,它也像糖霜一样令人不满意。 纹理的怪异性使它具有这种光滑的,老式的3D外观,在游戏的其余部分中感觉完全不合适。

经过一些进一步的调整,我得到了看起来更脆脆,更合适的东西。

我认为更清晰的外观更适合游戏的2D风格,尽管我认为这并不是最终产品。 我敢肯定,我会回去做一些进一步的修补,以获得更好的效果。

现在,我很高兴终于有了一些功能强大且适应性强的东西。 我可以画出河流和池塘,在上面放一个着色器,很快就能得到一些有效的水。

毫无疑问,您已经准备好进行自我反省和无数的钓鱼时间。


下一份报告将在15日发布,因为我将在下周重点关注一些委员会。 回头见!

在推特上关注我。