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. Unityの地形データを、TerrainData.SetDetailLayerを用いて編集します。
  2. 「TerrainChangedFlags.RemoveDirtyDetailsImmediately」パラメータを用いて、Nature RendererコンポーネントにRebuild buffersを呼び出します。
  3. Nature Rendererが自動的に地形の修正箇所を発見し、その範囲のインターナルバッファを再構築します。再構築は別のワーカースレッド上で行われ、完成するまでいくつかのフレームを使用します。その間は、古い地形データが表示された状態となります。

注: 地形のハイトマップを変更する、または既存でない新しいディテールを追加する場合、Nature Rendererは修正された範囲だけでなく、地形全体を再構築しなければなりません。大型の地形では、この作業に1~2秒を要します。

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人がこの記事が役に立ったと言っています