[Unreal Engine]DeleteInstantiatedAsset実行時の不具合と思われる動作について

   1958   1   0
User Avatar
Member
4 posts
Joined: May 2022
Offline
お世話になっております。

Houdini APIを使用してHoudiniAssetActorの作成から削除の流れを検証しているのですが、
表題にあるUHoudiniPublicAPIAssetWrapperのDeleteInstantiatedAssetを実行することで
クラッシュに繋がる動作を確認したので報告をさせていただければと思います。

検証時の環境について説明します。

・Unreal Engine:5.0.2
・Houdini:19.0.589

今回Editor Utility Widget(以降EUW)からHoudiniAssetActorの作成と削除を操作しておりました。
添付図はEUWのBPノード構成となります。作成と削除用にそれぞれボタンを作りBP処理を紐づけています。
Instantiate AssetのIn Houdini Assetには任意のHoudiniAssetを設定しておきます。

このEUWを使って作成→削除を順に実行した後、
CGを実行(Cmdから"obj gc"を入力)する等を行うとTypedElementData.hのFatal条件に引っかかってしまいました。
下記は該当のエンジンコード、及びクラッシュ時のログとなります。

※該当コード
	void CheckNoExternalReferencesOnDestruction() const
	{
#if DO_CHECK
		const FTypedElementRefCount LocalRefCount = GetRefCount();
		if (LocalRefCount > 1)
		{
			LogReferences();
			UE_LOG(LogCore, Fatal, TEXT("Element '%s' is still externally referenced when being destroyed! Ref-count: %d; see above for reference information (if available)."), *GetDebugId(), LocalRefCount);
		}
#endif	// DO_CHECK
	}

※ログ
Fatal error: 【File:(※Unreal Engineへのパス)\Engine\Source\Runtime\TypedElementFramework\Public\Elements\Framework\TypedElementData.h】 【Line: 276】
Element 'HoudiniAssetActor /Temp/Untitled_1.Untitled_1:PersistentLevel.None - ID: 78' is still externally referenced when being destroyed! Ref-count: 3; see above for reference information (if available).

一方で、削除を行う前にアウトライナのフォーカスをHoudiniAssetActorから他の項目へと切り替えておき、
その後に削除を行った場合はGC等を実行してもクラッシュは発生しませんでした。

また、HoudiniAssetActorをアウトライナからDeleteキーで直接削除した場合も
CG実行後のクラッシュは発生していないことも確認しています。

クラッシュが発生する場合としない場合の違いとして、発生時は下記のようなWarningが出力されています。

LogActorComponent: UnregisterComponent: (/Temp/Untitled_1.Untitled_1:PersistentLevel.HoudiniAssetActor_UAID_0492265A3885151601_1134072087.StaticMeshComponent_0) Not registered. Aborting.
LogHoudiniEngineEditor: Warning: Invalid TWeakObjectPtr in Details: (※Unreal Engineのパス)\Plugins\HoudiniEngine\Source\HoudiniEngineEditor\Private\HoudiniEngineDetails.cpp:1942
LogHoudiniEngineEditor: Warning: Invalid TWeakObjectPtr in Details: (※Unreal Engineのパス)\Plugins\HoudiniEngine\Source\HoudiniEngineEditor\Private\HoudiniEngineDetails.cpp:229
LogHoudiniEngineEditor: Warning: Invalid TWeakObjectPtr in Details: (※Unreal Engineのパス)\Plugins\HoudiniEngine\Source\HoudiniEngineEditor\Private\HoudiniEngineDetails.cpp:1942
LogHoudiniEngineEditor: Warning: Invalid TWeakObjectPtr in Details: (※Unreal Engineのパス)\Plugins\HoudiniEngine\Source\HoudiniEngineEditor\Private\HoudiniEngineDetails.cpp:766
LogHoudiniEngineEditor: Warning: Invalid TWeakObjectPtr in Details: (※Unreal Engineのパス)\Plugins\HoudiniEngine\Source\HoudiniEngineEditor\Private\HoudiniEngineDetails.cpp:829
LogHoudiniEngineEditor: Warning: Invalid TWeakObjectPtr in Details: (※Unreal Engineのパス)\Plugins\HoudiniEngine\Source\HoudiniEngineEditor\Private\HoudiniEngineDetails.cpp:867
LogHoudiniEngineEditor: Warning: Invalid TWeakObjectPtr in Details: (※Unreal Engineのパス)\Plugins\HoudiniEngine\Source\HoudiniEngineEditor\Private\HoudiniEngineDetails.cpp:920
LogHoudiniEngineEditor: Warning: Invalid TWeakObjectPtr in Details: (※Unreal Engineのパス)\Plugins\HoudiniEngine\Source\HoudiniEngineEditor\Private\HoudiniEngineDetails.cpp:960
LogHoudiniEngine: HAPI Asynchronous Destruction Started for . AssetId = 3

以上となります。

もし不具合ではなくDeleteInstantiatedAssetの使い方に誤りがあるようでしたら、正しい手順についてご教示いただければ幸いです。

よろしくお願い致します。

Attachments:
euw_bp_node.png (353.7 KB)

User Avatar
Member
4 posts
Joined: May 2022
Offline
こちらについて追加の報告事項となります。

Process HDAというノードを後程見つけ試していたのですが、
入力のIn Delete Instantiated Asset on Completation or Failureのチェックが有効の場合も
表題のDeleteInstantiatedAssetを呼ぶフローとなっておりました。

添付図1枚目のようなシンプルな構成で実行してGCを走らせてみたところ、こちらも同じ箇所でのクラッシュが確認できました。

また、この不具合に関して添付図2枚目のようにダミーのアクター生成を挟むことでクラッシュを回避できることも確認できています。

アクター生成を挟むことでアウトライナのフォーカス状況が変化してクラッシュが回避できている流れかと思いますが、
こちら内容をご確認いただき修正のご検討をお願いできれば幸いです。

Attachments:
test_delete_on_process_hda.png (63.5 KB)
test_avoid_crash.png (65.5 KB)

  • Quick Links