这两天搞定了瓷砖(tilemap)和智能瓷砖的差异化,再也不是千篇一律的纯色了,增加了不少质感。虽然这项功能在一年半前已经实现,但画面效果一直在瓶颈期。最近下定决心着手这个问题,想不到两天就解决了。
瓷砖(Tiling)方面一直以来困扰我的有两个问题:瓷砖智能化和单一瓷砖的多样性。
第一个问题在于,在这样的2d游戏中,存在多种瓷砖拼缀的场合,但是想要拼得好看、拼出自动化的边界,是个相当麻烦的事情。以一个正方形瓷砖为例,中间的白色是其本身,周围的红色是“必不相邻”,蓝色是“必定相邻”,白色是“无所谓”。这样算下来可支持比较精细的拼接模式共有46种。
根据这样的规则,如果不是有非常极限的场合,可以说,完美的智能地砖诞生了,只需要选取一个笔刷,就可以自由地画出连贯的、自动匹配内容的智能地砖。
这个问题已经解决了近两年了。为什么今天要重新拿出来讲呢?因为它涉及到第二个问题:
多样性。
虽然有46种高频率模式,但从本质上来说,对于地砖只有两种是出现频率最高的:
其中后者是最常出现的。而对于墙面来说,又加上了两个:
在制作这种地砖时,除去第一种独体,后面三种常常出现大量连续排列的情况。该模式存在的任何“独一无二”的花纹/划痕/肌理都会被不断重复以至于美感丧失。所以需要随机图案。
就像3d游戏中相同一棵树的建模需要至少四种形态以最低程度地避免重复感的产生一样,相似却又不同地砖也需要至少四种。因此我为某些常用地砖的常用部分绘制了大量的变体。以当前的草坪版本为例,一块纯绿色为基本地砖+120种纹理变体。
同时,为草坪的生成引入了柏林噪声(Perlin Noise)。柏林噪声的特点在于:乱中有序。这意味着可控的随机——让我欲罢不能的观念。
地形、墙面、地面都是同理;这仅仅是一个开始。后期还会加入更大的、有环境区别的、可交互的地表资源,如身体经过会晃动的草、滚来滚去的小石子、忽明忽暗的蜡烛等等。
为了庆祝这个问题的完美解决和工作流的建立,我画了一个树篱墙,并放进了游戏。这让我想起来小时候天天在课桌底下画迷宫和冒险游戏地图的时光,那时候真是爱编故事啊~!
现在也爱。
試試看波塌縮函數?
好思路