HOME

Maneki Pipeline

ゲーム開発のためのプロシージャル

Copernicus で Height マップを編集する

HeightFieldをCOPに読み込む方法とHeightFieldに戻す方法

概要

主にこちらのチュートリアルで教えてくれている内容です。
COPs Replied: Go Cliff Yourself! | Dmitrii Vlasenko | Equinox 2025

テストリソース

今回はこちらのサイトの商用利用可能なgaeaの地形データを出力して利用しています。
(記事内でgaeaの手順については触れていません)

Pixel Lab | 120 Free Gaea 3D Terrain Files

(ゲームメーカーズの紹介ページ)

手順

COPへの読み込み

HeightとCOPを作成し、

SOPで入力したいHeightFieldと読み込み先のCOPノードを用意

COPでImportしたGeometryにVolumeデータをLayer化する「Geometry to Layer」ノードを作成するとHeightをCOPレイヤーとして扱える。

保持しているVolumeプリミティブ名を入力して読み取るノードで、パラメータの 「Set Imports from Geometry」ボタンを押すとジオメトリがもつ各Volume名を自動で入力してくれる。

Geometry to LayerノードでHeightField等ボリュームをLayer化できる
Set Imports from Geometryボタンを押すとジオメトリがもつボリュームの名称が自動で登録できる。画像はErodeで作成されるHeightのレイヤーを登録した状態

COP Layerとして編集

CompositViewの左上を押すとレイヤーの持つ色調が確認できる。 読み込んだHeightはHeightの持つ数値のまま入力され0-1ではない。

ヒストグラムを確認するとHeightの高さの値のまま入力されている

ので、COPで編集しやすいようにequalizeなどを接続して0-1にしようとすると真っ白いプレビューになってしまう。
これはレイヤーにHeightであるという情報が付加されており、Heightは専用のHeightプレビュー状態になるため。

Equalizeをすると真っ白な画像になってしまう。これはHeightとしてプレビューされているため。

LayerPropertyノードでHeightであるという情報を外すと通常のレイヤーとしてプレビューできるようになる。

レイヤーに付与されているHeight情報を除くと0-1範囲の画像としてプレビューできる

Heightへのマージ

元のスケールへのリマップ

Statisticsノードを使うと画像がもつ最小、平均、最大値を値として取得できる。

右のヒストグラムがStatisticsの出力。画像の持つ最大値の単色画像が得られる

元のheightの最大値をStatisticsで取得し、Equalizeして編集した画像に最大値をmultipleすれば元のheightのスケールにリマップできる

取得した最大値をEqualize編集後の画像にmultipleするともとのサイズにremapできる

HeightFieldとブレンド

前工程で編集する際、heightの属性を外したがこのheightの属性が付いた状態だとCOPのプレビューが自動的にHeightFieldになる。
なので出力前にLayerPropertyノードで改めてHeight属性を設定するとSOPでHeightFieldとして利用できる。

LayerPropertyでHeight属性を設定して出力ノードに指定
Height属性の出力はCOPからの出力がHeightフィールドとして得ることができる

Heightに設定したCOPの出力をHeight Field Layerノードにつなぐとブレンドなどできる

COPの出力を通常のHeightFieldとしてブレンドなどができる

HeightもといボリュームをCOPに取り込む方法でした。
COPで編集できる、とはいえHeight編集ノードの3D情報を参照した編集ではないのでなんでもCOPで編集するということは無く用途次第と思います。

Heightからワールドマップを作成するようなフローはCOPを挟むとすごく楽になりそう。

fish_ball

プロシージャル魚類