撰写了文章 发布于 2020-03-10 09:35:33
【奇幻地图程序生成(二)】手绘风格的山
在上一篇中,我们生成了地图基本轮廓,现在到了为光秃秃的陆地画一些山脉的时候了。我们的目标最终是生成下面这种手绘风格的山。
先从简单的开始,一个三角形代表山的形状,直线作为阴影。
恕我直言,这些代表阴影的直线太没想象力了,我们来把分立的直线变成下图这样连续的曲线
有时候简单的方法的也有惊人的效果。我们可以用一根斜率稍微不相同的线的向下切,并在垂直边和水平边选择几个采样点。
然后在这些有序的点之间连接曲线,比如贝塞尔曲线或Catmull-Rom曲线。
实现算法时需要的注意是,这个多边形如果不是凸多边形,就有可能变成下图左的结果,线出现在了多边形外面。而下图右才是正确的结果。
生成曲线时,如果是标准的曲线,那么肯定太规则了不好看。那么再加控制点,再加噪音弄得更随机一点。
效果如下,最左边是标准的曲线。
这些阴影的边界是三角形,还是太规则,于是把这些边界也多弄些控制点多弄些噪音。
再把阴影线条的粗细变成随机形式,以及表示山的形状的直线变成多段折线,最终效果如下。记得阴影和有光照的地方需要描边。
现在山的受到光照的地方太秃了,那么再来加上一些变换。第一种如下图,下图左加了一道小山沟,下图中为小山沟加上一些阴影,最后效果如下图右。
第二种变换如下图,直接加阴影。为了让阴影的方向正确,从山顶投射一条直线到山脚,然后扰动这条直线形成独立的阴影。
似乎还是有些不自然...山的边缘真的只是首尾相连的折线嘛?我们可以把这些折线稍微延长一些
然后再加上第二座山。
另外,用半圆代替三角形的效果也很不错,或许更像石头一些?
给这些阴影加上颜色渐变
如果绘制阴影什么的太复杂,或者山本来就很小不好表现,干脆就用简笔画吧
目前只是绘出了单座山,如何确定连片的山脉的位置呢?一种容易想到的方法是让山都生成在一根直线附近
另一种方法是生成首尾相连的折线段,用这些折线段作为山的轮廓
或是两种方法一起使用
以及先用多边形限制山的生成范围,然后在多边形内放置线段,用于生成山脉
有了山,也就有了地形,接下来该在陆地上放置更多东西,比如森林,沙漠了。
星星 1年前
发布