噪声

噪声插件程序生成分形地形的基础上,一个perlin噪声发生器称为 libnoise . 我们将在这里解释它是如何工作的,但是您也可以参考libnoise文档了解以下属性的含义和应用。

有很多方法可以使用 noise 司机。在属性列表之后,有一些如何使用它的示例。

基本属性:

分辨率

产生一个周期噪声数据的线性距离(通常为米)。

规模

在一个周期内应用于噪声值的偏移量。默认值为1.0,这意味着您将获得介于 [-1...1] .

八度音阶

通过添加细节级别来优化噪声数据的次数,即噪声发生器在分辨率范围内重复出现的深度。当你放大的时候,一个更大的数字会产生更多的细节。默认值为4。

抵消

对于HeightFields,将其设置为true以生成偏移值,而不是绝对高程高度。它们将添加到另一个绝对高程层的高度。

高级属性:

频率

的倒数 分辨率 上面。(由于osgearth是一个mapping sdk,所以通常更直观地指定分辨率并将其保留为空。)

坚持不懈

利率 规模 随着噪声函数遍历每个更高的八度值而减小。比例(八度n+1)=比例(八度n)*持久性。

缺陷

利率 频率 随着噪波函数遍历每个高八度细节而增加。freq(八度n+1)=freq(八度n)*时隙。

种子

种子随机数生成器。噪声驱动程序是“一致的”,这意味着(除其他外)它在给定相同随机种子的情况下生成相同的值。改变这个以改变模式。

min_elevation

创建高度字段时要生成的最小高程值。这将夹住高度数据以创建“地板”。

max_elevation

创建高度字段时要生成的最大高程值。这将夹住高度数据以创建一个“天花板”。

normal_map

将此值设置为“真”(对于图像层),以创建可用于 NormalMap 地形效应。

另请参见:

noise.earthfractal_detail.earthnormalmap.earth 回购中的样本 tests 文件夹。

实例

创建一个全球程序立面图层:

<elevation driver="noise">
    <resolution>3185500</resolution>   <!-- 1/4 earth's diameter -->
    <scale>5000</scale>                <!-- vary heights by +/- 5000m over the resolution -->
    <octaves>12</octaves>              <!-- detail recursion level -->
</elevation>

通过调整递归属性使其更有趣:

<elevation driver="noise">
    <resolution>3185500</resolution>   <!-- 1/4 earth's diameter -->
    <scale>5000</scale>                <!-- vary heights by +/- 5000m over the resolution -->
    <octaves>12</octaves>              <!-- detail recursion level -->
    <persistence>0.49</persistence>    <!-- don't reduce the scale as quickly = noisier -->
    <lacunarity>3.0</lacunarity>       <!-- increase the frequency faster = lumpier -->
</elevation>

通过创建图像层来查看噪声本身。看起来像云:

<image driver="noise">
    <resolution>3185500</resolution>   <!-- 1/4 earth's diameter -->
    <octaves>12</octaves>              <!-- detail recursion level -->
</image>

使用 noise 要创建偏移图层以将细节添加到实际高程数据,请执行以下操作:

<!-- Real elevation data -->
<elevation name="readymap_elevation" driver="tms" enabled="true">
    <url>http://readymap.org/readymap/tiles/1.0.0/9/</url>
</elevation>

<elevation driver="noise" name="detail">
    <offset>true</offset>             <!-- treat this as offset data -->
    <tile_size>31</tile_size>         <!-- size of the tiles to create -->
    <resolution>250</resolution>      <!-- not far from the resolution of our real data -->
    <scale>20</scale>                 <!-- vary heights by 20m over 250m -->
    <octaves>4</octaves>              <!-- add some additional detail -->
</elevation>

不创建偏移高程数据,我们可以用 普通地图 . 法线贴图是一种不可见的纹理,它模拟使用真实高程数据时得到的法线向量:

<image name="normalmap" driver="noise">
    <shared>true</shared>             <!-- share this layer so our effect can find it -->
    <visible>false</visible>          <!-- we don't want to see the actual texture -->
    <normal_map>true</normal_map>     <!-- create a normal map please -->
    <tile_size>128</tile_size>        <!-- 128x128 texture -->
    <resolution>250</resolution>      <!-- resolution of the noise function -->
    <scale>20</scale>                 <!-- maximum height offset -->
    <octaves>4</octaves>              <!-- level of detail -->
</image>

...
<external>
   <normal_map layer="normalmap"/>    <!-- Install the terrain effect so we can see it -->
   <sky hours="17"/>                  <!-- Must have lighting as well -->
</external>