接觸Houdini不久,屬於菜雞系列,看見UOD上西山居的自動化島嶼生成很感興趣,做個筆記,如有書寫和理解錯誤還請大佬扶正。

本篇比較基礎沒有用很複雜的節點(因為複雜的用不明白.......)

首先新建一個 Heightfield節點

根據官方文檔給出的尺寸,修改heightfield的 Size的大小

官方文檔:

Landscape Technical Guide?

docs.unrealengine.com
圖標

然後建一個測試用的Curve節點 ,把曲線上所有點的Y軸強制歸位到0(@P.y =0;),以免操作起來會把點拽飛。然後使用Convert 節點把曲線轉換成Poly 模式。再用Heightfield_maskbyobject節點把 由曲線生成的模型映射到地形的Mask上。

把Curve以外的節點框選打包一下,打包內容既為我們將要製作的HDA文件(打包圖標右上角的黃色小盒子)

製作基礎島嶼地形

  • 對上一步生成的地形遮罩進行模糊處理(節點heightfield_maskblur);
  • 對地形遮罩進行扭曲處理(節點heightfield_distortByNoise);
  • 按照我們操作好的遮罩生成地形島基(節點heightfield_pattern);
  • 重新映射一下地形(由於我給的地形尺寸很小,精度很低這裡提高一下精度方便查看與調節,節點heightfield_resample)如果本身精度足夠,可以不需要此節點;
  • 對輸入的地形執行扭曲節點增加細節(heightfield_distortByNoise);
  • 清除曲線生成的Mask(heightfield_maskclear);
  • 重新生成Mask用於生成島上的小山區域(heightfield_maskbyfeature);
  • 對重新生成的Mask進行模糊處理(heightfield_maskblur);
  • 根據Mask 生成的遮罩區域,隨機的生成點用於確定小山的位置(heightfield_scatter);
  • 清除上一步的Mask(heightfield_maskclear),便於後續操作;

製作島嶼上的小山

  • 根據生成的點來確定我們添加生成島上小山物體的位置(節點copytopoints)為下一步生成小山做準備;
  • 對物體的大小和位置進行調節(transform);
  • 複製過後的物體,在地形上映射Mask(heightfield_maskbyobject);
  • 對Mask進行模糊處理(heightfield_maskblur);
  • 在Mask區域添加隨機雜訊做山體(heightfield_noise);
  • 添加扭曲,為山體添加細節(heightfield_distortByNoise);
  • 清除遮罩(heightfield_maskclear);

製作島嶼周圍的地形

  • 為島嶼周圍添加一些細節;
  • 重新添加地形節點(heightfield)此處地形的大小應該和上面的一致;
  • 方便觀察細節重新映射解析度(heightfield_resample);
  • 添加雜訊製作山體(heightfield_noise);
  • 為山體添加限制,因為只想要一部分高度的山體(heightfield_clip);

合併兩個地形(heightfield_layer)

添加一個可以自定義物體,疊加在地形上,用於控制山體的形狀。

  • 合併地形層(heightfield_project);
  • 清除Mask(heightfield_maskclear);
  • 重新映射地形解析度(heightfield_resample);

最後,輸出HDA文件並添加相應參數,以便在引擎中進行調節。回到最上級,最開始創建的heightfield節點,單擊右鍵找到CreateDigitalAsset。

可以拖動我們想要的參數到輸出列表。也可以新建變數,把變數賦給我們參數。

當我們想再次操作時可以重新打開這個界面,通過菜單欄Assets,進行編輯和保存。

保存輸出,導入UE4中,確保UE4的Houdini插件已經正確安裝,把地形拖進場景中,調節輸入為曲線輸入(CurveInput)。

拖動曲線創建島嶼生成的區域,最後封閉曲線。

節點解釋參考:

heightfield_maskblur: 節點參數很少 主要有 模糊模式與模糊半徑以及對邊界模糊的處理,可以自己調節試試。

heightfield_distortByNoise: 根據雜訊創建高度場的扭曲

  • NoiseType(噪音的模式) 可以試一下,其中Curl(捲曲噪音)創建漩渦的特徵
  • Amplitude(振幅) 較大的值會有更大拉伸與旋轉,如果值很大應該增加Substeps(步長),否則會使輸入產生較大的更改。
  • ElementSize 低頻雜訊峰值之間的距離ElementScale 各個軸的縮放

  • Offset 偏移 分形的偏移
  • Roughness 分形的粗糙度,控制細節。
  • MaxOctaves 最大的迭代次數,值越大,計算越精確。
  • Substeps 步長 振幅除以該步長,並逐步應用。可以實現更精細的細節和更少的劇烈變化,但速度很慢。

heightfield_pattern: 可以根據形狀擠出,可以創建斜坡。

  • ComBineWithExisting 與現有的結合模式
  • Height 高度 移動圖層的距離,以米為單位
  • BaseHeight 基礎高度 位移將在此基礎上偏移
  • PostBlurRadius 後處理的模糊半徑 通常用於平滑,由於低網格精度導致的銳利感覺。
  • Patten 圖案 可以選擇 線性/指數斜坡/線性步長/條帶/星星/Voronoi 可以自己試驗一下。

(RampRemapping 可以根據頂點確定 那個點的高度為多少,可以創建自定義高度比例)

heightfield_resample:

  • ResolutionScale 解析度縮放(網格數量)
  • FilterScale 濾波器的縮放,濾波器的縮放對輸出的影響,取決於濾波器的類型,較高的值可能會產生更高的模糊。(不會縮小網格數量,會模糊輸出結果,抹平稜角)

heightfield_maskbyfeature: 根據特徵製作Mask,可以根據地形斜坡(Slop),高度(height),方向(direction),曲率(Curvature),遮擋(Occlusion)生成可定製化的Mask。

heightfield_scatter: 可以生成隨機的點,可以根據不同的模式來生成點。確定點的數量,位置,縮放等參數的調節。

heightfield_noise:提共各種雜訊可以生成各種各樣的山體,以及提高相應的參數,例如高度,雜訊的平鋪,偏移,縮放,迭代次數和粗糙度等。

heightfield_clip:將值限制在某個最小值或最大值直之間,剔除掉一些我們不需要的地方。

heightfield_layer:合併兩個高度場,並可以對被合併高度場進行一些基本操作,偏移,縮放等。

heightfield_project:將3D幾何物體投射到高度場中。


推薦閱讀:
相关文章