New: Nature Shaders

Interaction, Wind, Dynamic Masking, and Better Shading for your vegetation.

Learn more
This page may not work correctly inside the Unity editor. Open in browser

在运行时间编辑地形細節

需要 Nature Renderer 1.1.8 或更高版本

如果您想要为您的地形作永久性修改,可以在运行时间编辑地形细节。

如何编辑地形

    1. 使用TerrainData.SetDetailLayer编辑Unity的地形数据。

  1. 在Nature Renderer 元件呼叫RebuildBuffers 来使用TerrainChangedFlags.RemoveDirtyDetailsImmediately 参数。
  2. Nature Renderer 会自动找出您地形修改的部份,然后重建该范围的内部缓冲。重建过程会会在另外的工作线程进行,而且可能需要几个帧数去完成。这段时间会仍然显示本来的地形数据。

注意: 如果您修改地形的高度图,或者新加的细节之前并不存在的话,Nature Renderer就需要重建整个地形而不只是修改的范围。较大的地形来说需要1到两秒 时间。

Unity公用程式的修改范例

using UnityEngine;
using VisualDesignCafe.Rendering.Nature;

public class ExampleClass : MonoBehaviour { // Set all pixels in a detail map below a certain
// threshold to zero. void DetailMapCutoff(Terrain t, float threshold) { // Get all of layer zero. var map =
t.terrainData.GetDetailLayer(
0,
0,
t.terrainData.detailWidth,
t.terrainData.detailHeight,
0);

// For each pixel in the detail map... for (int y = 0; y < t.terrainData.detailHeight; y++) { for (int x = 0; x < t.terrainData.detailWidth; x++) { // If the pixel value is below the threshold then // set it to zero. if (map[x, y] < threshold) { map[x, y] = 0; } } }

// Assign the modified map back. t.terrainData.SetDetailLayer(0, 0, 0, map);

// Update Nature Renderer's buffers.
t.GetComponent<NatureRenderer>().RebuildBuffers(
TerrainChangedFlags.RemoveDirtyDetailsImmediately ); } }

 

 

这篇文章有帮助吗?
2 人中有 1 人觉得有帮助