Defeaturing (簡略化) によるスタティック メッシュの単純化

スタティック メッシュのジオメトリから穴と突起を除去することでレンダリング パフォーマンスを改善する方法について説明します。

Windows
MacOS
Linux

Defeaturing は突起と穴を除去することでメッシュを単純化する方法です。メッシュに含まれる頂点と三角ポリゴンの数を減らすことでレンダリング パフォーマンスを改善することができます。

defeaturing-banner.png

とりわけ 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 カテゴリのテンプレート プロジェクトのいずれかを使って開始する場合は、このプラグインはデフォルトで有効になっています。

Polygon Editing プラグインは 64-bit Windows のみでサポートされています。さらに Defeaturing は Epic Games Launcher からインストールした Unreal Engine で配布されているプレビルド バイナリのみで使用可能です。

スタティック メッシュ エディタでの簡略化

  1. スタティック メッシュ エディタで修正したいスタティック メッシュを開きます。 コンテンツ ブラウザ のアセットをダブルクリックするか、右クリックして [編集] を選択します。 

  2. [Mesh Editing] ツールバーを開きます。 Mesh Editing ツールバーを開く

  3. [Defeaturing (簡略化)] アイコンをクリックします。 
    Defeaturing

  4. 除去したい形状を設定するための設定ダイアログが表示されます。 Defeaturing 設定
    スタティック メッシュから除去したい形状の種類ごとに、対応するオプションにチェックを入れて、その形状の最大寸法を設定します。 

    選択した形状の種類ごとにデフォルト値から値を増加させ、最大寸法を設定してください。

  5. Proceed (続行) をクリックして簡略化の操作を開始してスタティック メッシュを修正します。 Proceed

エディタ スクリプトでの簡略化

ブループリントおよび Python でスルーホール、ブラインドホール、突起を除去できます。

前提条件 今回の使用が初めての場合は、 Editor Scripting Utilities プラグイン をインストールしてください。詳細については エディタのスクリプティングと自動化 を参照してください。

実装方法を選んでください。

Blueprints

Python

ブループリントのスタティック メッシュ アセットで Mesh Processing > Defeature Mesh ノードを使用して簡略化ツールを実行します。

メッシュ ノードの簡略化

このノードを利用するには、ブループリント クラスを PlacedEditorUtilityBase クラスのようなエディタ専用クラスから派生させてください。詳細については、 「ブループリントを使用したエディタのスクリプティング」 を参照してください。

このノードには以下の入力が必要です。

  • 修正したい スタティック メッシュ アセットへの参照。通常このアセットは初めに [Editor Scripting > Asset > Load Asset] ノードへのコールによってロードされる必要があります。

  • スタティック メッシュで修正したい LOD のインデックス。特定の LOD だけ簡略化したいのでなければ 0 を使用してください。

  • スタティック メッシュから除去する形状の種類と除去したい形状の最大サイズを制御する MeshDefeaturingParameterObject。 これらのオブジェクトの 1 つをセットアップするには以下を実行します。

    1. マイブループリント パネルの + 変数 ボタンをクリックしてブループリントに新規変数を追加します。 変数を追加

    2. Mesh Defeaturing Parameter Object への参照となるように変数の種類を設定します。 Mesh Defeaturing Parameter Object

    3. Control を押したまま、変数をブループリント グラフにドラッグして、変数を取得する新規ノードを作成します。 ドラッグアンドドロップ

    4. 新規変数ノードの出力ポートから右にドラッグして、 変数 リストから、変更したい設定の Set ノードを選択します。 簡略化パラメータ API

たとえば、以下のスクリプトでは、 スタティック メッシュ アセットから幅が 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):
    # Load the Asset
    mesh_asset = unreal.EditorAssetLibrary.load_asset(mesh_name)
    # Create a parameter object
    options = unreal.MeshDefeaturingParameterObject()
    # Set up its properties
    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
    # Run the defeaturing
    unreal.MeshProcessingLibrary.defeature_mesh(mesh_asset, 0, options)
    # Save the Asset
    unreal.EditorAssetLibrary.save_loaded_asset(mesh_asset)
defeature_mesh(asset_name)
Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback