| On this page |
Houdini Cookable ¶
Note
このページでは、Houdini21.0で施された内部リファクタリングについて説明しており、 主にプラグインのコードをカスタマイズしていた開発者を対象にしています。
Houdini21.0では、Houdini AssetのメインデータホルダーとしてComponent(Houdini Asset Component)にもはや依存しなくて済むように、プラグインのコア部分が書き換えられました。
新しいオブジェクトであるHoudini Cookableが導入され、HDAをUnrealにリンクするためのノード、パラメータ、入力、出力、その他のすべてのオプションデータを格納するオブジェクトとしてCookableが使用されるようになりました。
この変更によって、UnrealでHDAを使用するためにComponent/Actorを作成する必要がなくなりました。 これによって、Level/World内でインスタンス化されなくてもHDAを使用できるようになりました。 例えば、これによってPCG Graph内でHoudini Assetsの使用が可能になりました。
UnrealでHDAをインスタンス化する場合、依然としてHoudini Asset ActorとHoudini Asset Componentが作成されますが、すべてのデータはComponent上で直接処理されるのではなく、Cookableから処理されるようになりました。
このプラグインを使用する場合、この変更はユーザにとって透過的に行なわれます:
-
プラグインのバージョン2(Houdini21.0以前)でプロジェクトを読み込む際
-
プラグインは、World内にあるHoudini Asset Componentを自動でバージョン3に変換します。
-
すべてのアセットデータをComponentに紐付けられた呼応すHoudini Cookableへ移動/変換します。
データが正しくCookableに更新されていることを確認するために、レベル内のすべてのHoudini Assetを再保存して、再ビルドすることを推奨します。 保存を行なうことで、Levelを再度開いた際に変換プロセスが再実行されるのを防ぐことができます。
Cookableの実装に伴い、プラグインの公開API(Blueprint/Python)に変更はありません。 APIのどの関数からデータにアクセスしても、適切なCookable関数が正しく使用されます。
Note
Houdini Asset Blueprint Componentは、Cookableに対応するよう更新されていません。
プラグインへの独自変更 ¶
Cookableは、ほとんどが内部的なリファクタリングであるため、プラグインのユーザへの影響は最小限にとどまるはずです。
ただし、プラグインのソースコードに独自の変更を加えている場合、Cookableへの移行に伴い、機能を維持するためにはコードの更新が必要になります。
Cookableデータ ¶
Houdini Assetに関連していたHoudini Asset Componentに格納されていたデータのほとんどは廃止となり、 代わりにHoudini Cookableオブジェクトに移行されました。
Cookableは、Cookableの機能セットとして機能する一連のサブクラスにデータを格納します:
-
入力データは、UCookableInputDataクラスに格納され、Cookableに対して
GetInputData()をコールすることでアクセスすることができます。 -
出力データは、UCookableOutputDataクラスに格納され、Cookableに対して
GetOutputData()をコールすることでアクセスすることができます。
以下は、Houdini21.0のCookableで現在使用されている機能セットのリストです:
名前 |
データクラス |
サポート関数 |
説明 |
|---|---|---|---|
Houdini Asset |
UCookableHoudiniAssetData |
|
HDAファイルの使用に関連するすべてのデータを格納します。 |
Parameters |
UCookableParameterData |
|
すべてのパラメータデータとオプションを格納します。 |
Input |
UCookableInputData |
|
入力に関するすべてのデータとオプションを格納します。 |
Outputs |
UCookableOutputData |
|
出力に関するすべてのデータとオプションを格納します。 |
Baking |
UCookableBakingData |
|
出力のベイクに使用されるすべてのデータとオプションを格納します(出力がサポートされている必要があります)。 |
Proxy Mesh |
UCookableProxyData |
|
プロキシメッシュの作成を制御するために必要なすべてのオプションを格納します(出力がサポートされている必要があります)。 |
Component |
UCookableComponentData |
|
CookableがWorld/Level内でComponentやActorを作成するために必要なすべてのデータとオプションを格納します。 |
PDG |
UCookablePDGData |
|
CookableがPDG Asset Linkを使用するためのすべてのデータとオプションを格納します。 |
Cookableが特定の機能セットをサポートしているかどうかを確認するには、Cookableに対して該当するIsXXXSupported()関数をコールすると良いでしょう。
コードをCookableにアップグレードする方法 ¶
Houdini Asset Componentのメンバを直接使用してデータにアクセスしていた場合、そのメンバは廃止となっており、もはやアクセスできない可能性があります。代わりに、Cookableを使用してアクセスしてください。
例えば、以下は廃止となる予定です(bUseOutputNodes_DEPRECATED):
HoudiniAssetComponent->bUseOutputNodes;
これは以下のように置き換える必要があります:
HoudiniAssetComponent->GetCookable()->GetUseOutputNodes();
getter/setter関数を使用してHoudini Asset Componentのデータにアクセスしていた場合、HAC上のすべてのgetter/setterは内部でCookableのそれに呼応する関数をコールしているため、変更は必要ありません。
メンバに直接アクセスする必要がある場合、まずHoudiniAssetComponentからCookableを取得してから、次に適切なデータクラスを取得してメンバに直接アクセスする必要があります:
HoudiniAssetComponent->Outputs
は、以下のように置き換える必要があります:
HoudiniAssetComponent->GetCookable()->GetOutputData()->Outputs
または、以下のように直接Accessorを使用することもできます:
HoudiniAssetComponent->GetCookable()->GetOutputs();