レイヤ構造をUE5のアクターと同じ構造にする。
Rhino8のレイヤ構造
椅子のレイヤ構造
| 親ディレクトリ | 子1 ディレクトリ | 子2 ディレクトリ |
|---|---|---|
| Chair | Seat Legs Leg_Frame Cushion | 各種FBXデータ |
PCのレイヤ構造
| 親ディレクトリ | 子1 ディレクトリ | 子2 ディレクトリ |
|---|---|---|
| PC | Body_Base Body_Maine Light Glass | 各種FBXデータ |
ドアのレイヤ構造
| 親ディレクトリ | 子1 ディレクトリ | 子2 ディレクトリ |
|---|---|---|
| Door | Window_Frame Window Board Door_Knob Door_Latch Hinge | 各種FBXデータ |
| Door_Frame | Hinge Frame | 各種FBXデータ |
各レイヤごとにFBX形式でエクスポート
FBX形式でエクスポートする場合はDCCツールからUE5にエクスポートする必要があります。
一つ一つのレイヤのオブジェクトをエクスポートしていってはエクスポートだけにかなりの時間を有してしまいます。
例えば、椅子1つにつき、6レイヤあるとすれば、6回オブジェクトをエクスポートしなくてはなりません。その場合は、1回につき約30秒としても180秒(3分)かかります。さらに、フォルダの作成をする時間も必要なので、+3分として、インテリアエレメントのエクスポートにかかる時間が1つあたり約6分ほどかかると推定できます。
一つの部屋をエクスポートすることを考えると、インテリアエレメントの数×6分程度かかるということになります。インテリアエレメントが仮に30個だとしても180分(3時間)もの時間がエクスポートにかかってしまう計算になります。
これをワンクリック(約10秒)で済ませるスクリプトを以下の記事で紹介しております。
スクリプトの概要
このスクリプトは、指定したディレクトリ(Documents)に各レイヤごとにフォルダを作成し、その中に対応するFBXファイルをエクスポートします。親レイヤおよびその子レイヤもすべて処理します。
スクリプト
以下が、実際のスクリプトです。必要な部分をコピーして、Pythonスクリプトエディタに貼り付けてください。
import rhinoscriptsyntax as rs
import os
def export_layers_to_fbx(base_export_directory, origin):
def create_directory(path):
if not os.path.exists(path):
os.makedirs(path)
def export_layer_objects(layer, export_directory, origin):
objects = rs.ObjectsByLayer(layer, True)
if objects:
rs.SelectObjects(objects)
fbx_filename = os.path.join(export_directory, f"{layer.replace('::', '_')}.fbx")
rs.Command(f'-_Export "{fbx_filename}" _Origin {origin[0]},{origin[1]},{origin[2]} _Enter _Enter', True)
rs.UnselectAllObjects()
def process_layers(layers, parent_layer="", parent_directory=base_export_directory, exported_layers=set()):
for layer in layers:
if parent_layer and not layer.startswith(parent_layer + "::"):
continue
sublayers = [l for l in layers if l.startswith(layer + "::") and l != layer]
if rs.IsLayerVisible(layer) and layer not in exported_layers:
current_layer_path = os.path.join(parent_directory, layer.replace("::", "_"))
create_directory(current_layer_path)
export_layer_objects(layer, current_layer_path, origin)
exported_layers.add(layer)
if sublayers:
process_layers(sublayers, layer, current_layer_path, exported_layers)
layers = rs.LayerNames()
if not layers:
print("No layers found.")
return
process_layers(layers)
# エクスポート先のディレクトリを指定(任意のフォルダのパスを指定)
base_export_directory = r"任意のフォルダのパスを指定"
# ユーザーに原点を指定してもらう
origin = rs.GetPoint("Specify origin point for export")
if origin:
export_layers_to_fbx(base_export_directory, origin)
else:
print("Export cancelled. No origin point specified.")
スクリプトの説明
- import os: Pythonの標準ライブラリ
osをインポートします。これにより、ファイルパスの操作が可能になります。 - create_directory 関数: 指定されたパスのディレクトリが存在しない場合に作成します。
- export_layer_objects 関数: 指定されたレイヤのオブジェクトを選択し、FBX形式でエクスポートします。
- process_layers 関数: レイヤ階層を再帰的に処理し、親レイヤおよびその子レイヤごとに対応するフォルダを作成し、各レイヤのオブジェクトをそのフォルダにFBX形式でエクスポートします。
- base_export_directory: エクスポート先のベースディレクトリをDocumentsに設定します。
実行手順
- Rhinoを管理者権限で実行する: Rhinoのショートカットを右クリックし、「管理者として実行」を選択します。
- Pythonスクリプトエディタを開く: Rhinoを開き、コマンドラインに「
EditPythonScript」と入力し、Enterキーを押します。 - スクリプトを読み込む: エディタ内で「ファイル」→「開く」を選択し、保存したスクリプトファイルを開きます。
- スクリプトを実行: スクリプトを開いた状態で、エディタの上部にある「実行」ボタンをクリックします。これでスクリプトが実行され、デスクトップ上の「RhinoExports」フォルダに各レイヤおよびその子レイヤごとのフォルダが作成され、各フォルダに対応するFBXファイルがエクスポートされます。
スクリプトの使い方
- Rhinoを管理者権限で実行する:
- Rhinoのショートカットを右クリックし、「管理者として実行」を選択します。
- Pythonスクリプトエディタを開く:
- Rhinoを開き、コマンドラインに「
EditPythonScript」と入力し、Enterキーを押します。これでPythonスクリプトエディタが開きます。
- スクリプトを読み込む:
- スクリプトエディタ内で「ファイル」→「新規作成」を選択し、新しいスクリプトを作成します。その後、上記のスクリプトをエディタにコピー&ペーストします。
- スクリプトを実行する:
- スクリプトを開いた状態で、エディタの上部にある「実行」ボタンをクリックします。これでスクリプトが実行されます。
結果の確認
スクリプトが正しく実行されると、デスクトップ上に「RhinoExports」というフォルダが作成され、その中に各レイヤごとのフォルダが作成されます。それぞれのフォルダには、対応するレイヤのオブジェクトがFBX形式で保存されています。

まとめ
このスクリプトを使うことで、Rhino 8で複数のレイヤにわたる3Dモデルを簡単にFBX形式でエクスポートすることができます。これにより、Rhino8からUnreal Engineへのエクスポートする際の手順を短縮することができます。