Defeaturing は突起と穴を除去することでメッシュを単純化する方法です。メッシュに含まれる頂点とトライアングルの数を減らすことでレンダリング パフォーマンスを改善することができます。
とりわけ Defeaturing は、多くのコンピュータ支援デザイン (CAD) アプリケーションで作られたジオメトリにおいて有用です。物理的製造のためにパーツや組立部品を設計、モデル化する際、細かい形状は現実世界のオブジェクトの製造に必須のものとして作成されますが、それらはリアルタイム レンダリング時には不要なものです。
たとえば、この燃料ポンプの組立部品には 20,000 のトライアングルが存在します。穴をいくつか除去すればトライアングルの数はほぼ半数になります。この場合、組立部品の他のパーツが修正された領域を覆うため、コンテンツ中で見たときにレンダリングの結果に顕著な変化はありません。
| 前:20,617 トライアングル | 後:11,553 トライアングル |
これに加えて、画面領域を少ししか専有しないときの 詳細度 (LODs) を作成して、さらにメッシュを単純化する予定であれば、簡略化したメッシュから LOD を作成することでメッシュの単純化が目立たなくなります。たとえば、クランクシャフトの組立部品の小さなパーツの小さな穴は、詳細度の低い LOD では非常にギザギザしています。LOD の作成前に小さな穴を除去して簡略化すれば、小さなサイズにしたときのメッシュは格段にきれいに見えます。
| オリジナルのメッシュ | LOD 2 | 簡略化後に LOD 処理したもの |
Unreal Editor は、Datasmith や FBX からインポートした スタティック メッシュ アセットを簡略化する機能を提供します。
除去可能な形状
以下のセクションで、簡略化ツールが除去可能な形状の種類および、除去したい形状のサイズを制御するために提供可能な測定値について説明します。
スルーホール
スルーホールはオブジェクトのサーフェスを反対側まで完全に通り抜ける穴です。
最大直径を指定することにより、除去したいスルーホールのサイズを制限することができます。
| スルーホールを除去する前 | スルーホールを除去した後 |
ブラインドホール
ブラインドホールは、オブジェクトのサーフェスを完全に貫通しない穴です。その代り、ブラインドホールにはサーフェスからある深さのところに底部があります。
穴の最大直径とサーフェスからの最大の深さを指定することで除去したいブラインドホールのサイズを制限することができます。寸法が両方ともこれより小さい穴だけ除去されます。
| ブラインドホールを除去する前 | ブラインドを除去した後 |
突起
突起はサーフェスに取り囲まれた隆起です。
突起の最大直径とサーフェスからの隆起の最大の高さを指定することで除去したい突起のサイズを制限することができます。寸法が両方ともこれより小さい突起だけ除去されます。
| 突起を除去する前 | 突起を除去した後 |
プロジェクトの設定
Defeaturing を使用するには、Polygon Editing プラグインをプロジェクトに対して有効にする必要があります。
Architecture, Engineering, and Construction または Automotive, Manufacturing, and Product Design カテゴリのテンプレート プロジェクトのいずれかを使って開始する場合は、このプラグインはデフォルトで有効になっています。
Polygon Editing プラグインは 64-bit Windows のみでサポートされています。さらに Defeaturing は Epic Games Launcher からインストールした Unreal Engine で配布されているプレビルド バイナリのみで使用可能です。
スタティック メッシュ エディタでの簡略化
- スタティック メッシュ エディタで修正したいスタティック メッシュを開きます。 コンテンツ ブラウザ のアセットをダブルクリックするか、右クリックして [編集] を選択します。
-
[Mesh Editing] ツールバーを開きます。
-
[Defeaturing (簡略化)] アイコンをクリックします。
-
除去したい形状を設定するための設定ダイアログが表示されます。
スタティック メッシュから除去したい形状の種類ごとに、対応するオプションにチェックを入れて、その形状の最大寸法を設定します。
選択した形状の種類ごとにデフォルト値から値を増加させ、最大寸法を設定してください。
-
Proceed (続行) をクリックして簡略化の操作を開始してスタティック メッシュを修正します。
エディタ スクリプトでの簡略化
ブループリントおよび Python でスルーホール、ブラインドホール、突起を除去できます。
前提条件: 今回の使用が初めての場合は、Editor Scripting Utilities プラグインをインストールしてください。詳細は「エディタをスクリプト化および自動化する」を参照してください。
ブループリントのスタティック メッシュ アセットで [Mesh Processing] > [Defeature Mesh] ノードを使用して簡略化ツールを実行します。
このノードを利用するには、ブループリント クラスを PlacedEditorUtilityBase クラスのようなエディタ専用クラスから派生させてください。詳細は「ブループリントを使ってエディタをスクリプト化する」を参照してください。
このノードには以下のように入力してください。
- 修正したい スタティック メッシュ アセットへの参照。通常このアセットは初めに [Editor Scripting > Asset > Load Asset] ノードへのコールによってロードされる必要があります。
- スタティック メッシュで修正したい LOD のインデックス。特定の LOD だけ簡略化したいのでなければ 0 を使用してください。
-
スタティック メッシュから除去する形状の種類と除去したい形状の最大サイズを制御する MeshDefeaturingParameterObject。 これらのオブジェクトの 1 つをセットアップするには以下を実行します。
-
マイブループリント パネルの + 変数 ボタンをクリックしてブループリントに新規変数を追加します。
-
Mesh Defeaturing Parameter Object への参照となるように変数の種類を設定します。
-
Control を押したまま、変数をブループリント グラフにドラッグして、変数を取得する新規ノードを作成します。
-
新規変数ノードの出力ポートから右にドラッグして、 変数 リストから、変更したい設定の Set ノードを選択します。
-
たとえば、以下のスクリプトでは、 スタティック メッシュ アセットから幅が 5 センチ以下のスルーホールをすべて除去しています。
unreal.EditorMeshProcessing.defeature_mesh() 関数を呼ぶと、スタティック メッシュ アセットの簡略化ツールが実行されます。
次の関数を渡してください。
- 修正したい スタティック メッシュ アセット。通常このアセットは初めに 「unreal.EditorAssetLibrary.load_asset()」へのコールによってロードされる必要があります。
- スタティック メッシュで修正したい LOD のインデックス。特定の LOD だけ簡略化したいのでなければ 0 を使用してください。
- 作成した
unreal.MeshDefeaturingParameterObject。スタティック メッシュと、除去したい形状の最大サイズから除去する形状の種類を制御する設定パラメータを、このオブジェクトに設定してください。
たとえば、以下のスクリプトでは、 「unreal.MeshDefeaturingParameterObject」 に設定した直径以下の、スタティック メッシュのすべてのスルーホール、ブラインドホール、および突起を除去します。
import unreal
asset_name = "/Game/Unreal_Sportbike/Geometries/0x25f0e0b7Unreal_Sportbike_geom_3180.Accumulator_case"
def defeature_mesh(mesh_name):
# アセットをロード
mesh_asset = unreal.EditorAssetLibrary.load_asset(mesh_name)
# パラメータ オブジェクトを作成
options = unreal.MeshDefeaturingParameterObject()
# プロパティをセットアップ
options.fill_blind_holes = True
options.filled_hole_max_diameter = 10
options.filled_hole_max_depth = 5
options.fill_through_holes = True
options.through_hole_max_diameter = 10
options.remove_protrusions = True
options.protrusion_max_diameter = 10
options.protrusion_max_height = 5
# 簡略化ツールを実行
unreal.MeshProcessingLibrary.defeature_mesh(mesh_asset, 0, options)
# アセットを保存
unreal.EditorAssetLibrary.save_loaded_asset(mesh_asset)
defeature_mesh(asset_name)