噪声¶
噪声插件程序生成分形地形的基础上,一个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.earth
,fractal_detail.earth
和normalmap.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>