使用Perlin Noise

时间:2019-03-22 23:13:20

标签: python procedural-generation perlin-noise noise-generator

我正在尝试了解Perlin Noise和程序生成。我正在阅读有关生成带有噪声的景观的在线教程,但是我不理解作者对制作高海拔区域的解释的一部分。

在“ {island””部分的this webpage上有文字

  

设计一个形状,使其与岛上的形状相匹配。使用下部形状将地图向上推动,使用上部形状将地图向下推动。这些形状是从距离d到高程0-1的函数。设置e =较低的(d)+ e *(较高的(d)-较低的(d))。

我想这样做,但是我不确定作者在谈论上下形状时是什么意思。

“使用下部形状将地图向上推动而使用上部形状将地图向下推动”是什么意思?

代码示例:

from __future__ import division
import numpy as np
import math
import noise


def __noise(noise_x, noise_y, octaves=1, persistence=0.5, lacunarity=2):
    """
    Generates and returns a noise value.

    :param noise_x: The noise value of x
    :param noise_y: The noise value of y
    :return: numpy.float32
    """

    value = noise.pnoise2(noise_x, noise_y,
                          octaves, persistence, lacunarity)

    return np.float32(value)


def __elevation_map():
    elevation_map = np.zeros([900, 1600], np.float32)

    for y in range(900):

        for x in range(1600):

            noise_x = x / 1600 - 0.5
            noise_y = y / 900 - 0.5

            # find distance from center of map
            distance = math.sqrt((x - 800)**2 + (y - 450)**2)
            distance = distance / 450

            value = __noise(noise_x, noise_y,  8, 0.9, 2)
            value = (1 + value - distance) / 2

            elevation_map[y][x] = value

    return elevation_map

1 个答案:

答案 0 :(得分:3)

作者的意思是,您应根据其与中心fe的距离以及初始位置来描述点的最终高度d高度e,大概是由噪声产生的。

例如,如果您希望地图看起来像碗形,但又要保持原始生成的地形的嘈杂特征,则可以使用以下功能:

def lower(d):
    # the lower elevation is 0 no matter how near you are to the centre
    return 0

def upper(d):
    # the upper elevation varies quadratically with distance from the centre
    return d ** 2

def modify(d, initial_e):
    return lower(d) + initial_e * (upper(d) - lower(d))

请特别注意以“这是如何工作的”开头的段落,我发现它很有启发性。