SpriteStudio / SS5PlayerForUnrealEngine4

OPTPiX SpriteStudio 5 で制作したアニメーションデータを Unreal Engine 4 上で再生するためのプログラムです。
Other
30 stars 5 forks source link

v1.2.10 UMG上でのSSPJデータへの加算マテリアル使用時について #33

Open dedennne opened 7 years ago

dedennne commented 7 years ago

お世話になっております。 UE4/Ver4.18にてUMG上で表示しているSsPlayerWidgetに加算マテリアルを入れた所、アニメデータに加算されませんでした。 SSデータにSpriteStudioRenderSettingsで加算のマテリアルを当てた場合、RenderModel部分をUMGOffScreenに設定すれば表示をするのですが、 作成サイズ全体にマテリアルに設定したテクスチャーが反映されてしまいSpritestudioのアニメデータが表示されない状態です。 RenderModel部分をUMGDefaultのままアニメを作成した画像データ部分のみにマテリアルを当てるといった事は出来ないのでしょうか…?

また、UE4とSpriteStudioでの演算の仕方が違う為、SpriteStudioでの加算/減算のデータが上手く表示されないといった内容をお聞きしたことがあるのですが、 SpriteStudioで作成した加算/減算のデータを表示する事は現在可能なのでしょうか…?

現在しようしているツールのVerは下記のものになります。 Spritestudio Ver5.8.0.6556 環境設定 ・互換性 Ver.4互換機能に制限するをチェックアウト ・再生対象のプラットフォーム「SS5P for UnrealEngine4 v1.1.2」に設定 UE4 Ver4.18 ・SpriteStudio5 Player for UE4 設定済み

以上、宜しくお願い致します。

KazumasaOhashi commented 7 years ago

まず本プラグインの機能としては、UMGで使用する場合のSpriteStudioのブレンドモードはMIXのみのサポートとなります。 これは、UMG(の内部で使用されているSlate)の描画システムで、加算等の描画方法がサポートされていないためとなります。

SpriteStudioRenderSettings->BaseMaterial につきましては、RenderModeがUMG_Offscreenの場合にのみ使用されるマテリアルとなります。 UMG_Defaultの場合には、このマテリアルは使用されません。 オフスクリーンモードで描画される際に、ココに設定したマテリアル内の「SsRenderTarget」という名前のテクスチャパラメータに、SpriteStudioアニメーションがオフスクリーンレンダリングされたRenderTargetTextureが渡される形になります。 このマテリアルをカスタムする場合は、デフォルトで設定されている「SsMaterial_UMGDefault」を複製した状態から始めることをお勧めします。 UMGではありませんが、サンプルプロジェクト内の「06_OffscreenRendering」を参照してみて下さい。

SpriteStudioの加算ブレンドと、UE4マテリアルの加算ブレンドの話が混ざってしまっているようですが、今回の目的としては、下記のどの形になりますでしょうか? 1.SpriteStudioの加算ブレンドを使用したアニメーションをUMGで描画したい(他ウィジェットとの加算合成は無し) 2.SpriteStudioの加算ブレンドを使用したアニメーションをUMGで描画し、UMGの他ウィジェットと、SpriteStudio機能で加算合成したい 3.SpriteStudioのアニメーションを、UMGの他ウィジェットと、UE4マテリアル機能で加算合成したい 4.SpriteStudioのアニメーションを、3Dシーンと加算合成したい

2はUMGでMIX以外をサポート出来ないのと同じ理由で、 4はUE4では3DシーンとUMGは別のバッファにレンダリングされるため、UMGから3Dシーンのバッファを参照できないので、 それぞれUE4の仕様上不可能となってしまいます。

ただ、1,3の場合は、一部プラグインの改造とUMG_Offscreenとマテリアルの組み合わせで、制限付きながら実現出来る可能性があります。

引き続きよろしくお願い致します。

dedennne commented 7 years ago

SptiteStudioのデータでのマテリアル設定に関しての情報ありがとうございます。 マテリアルカスタムについてはサンプルプロジェクトを参照に確認してみます。

また、今回の加算に関しての目的としましては1、3、4が可能でしたら色々と幅が広がる為、欲しい機能ではあるのですが4に関しては仕様上の不可との事ですので1、3が実現的に可能でしたら対応をお願い致します。

KazumasaOhashi commented 7 years ago

了解致しました。

まず1.についてですが、 SSsPlayerWidget.cpp 376行目 RenderOffScreen->Initialize() の後に、次の行を追加して下さい。

RenderOffScreen->bSupportAlphaBlendMode = true;

これで、UMG_OffscreenモードでもMIX以外のブレンドモードが反映されます。 但し、あくまでアニメーション単独でのRenderTarget内でのブレンドとなります。 RenderTargetはRGBA=(0,0,0,0)でクリアされますので、下敷きとなる不透明パーツの上にブレンドされる場合は問題ありませんが、減算や乗算等が単独で配置されても、意図通りの結果にはなりませんのでご注意下さい。 また、このクリアカラーは、上記と同じ箇所に

RenderOffScreen->ClearColor = FColor::Black;

のように記述することで変更することも可能です。 予め不透明色で塗りつぶしておけば、その色に対するブレンドが行われます。

この場合はRenderTarget全体が不透明になってしまいますので、BaseMaterialをカスタムしてRGB=(0,0,0)の部分をマスクする等の対策が必要になります。

3.につきましては、UMG_OffscreenモードでBaseMaterialをカスタムし、マテリアルのBlendModeを「Additive」「Modulate」等に設定することで、UE4マテリアルのブレンドモードを使用出来ます。

このように、元のSpriteStudioデータをそのまま再現出来る形ではなくなってしまいますが、目的の表現に適うかご検討頂ければと思います。 また、UMG_OffscreenモードはUMG_Defaultに比べて処理負荷が高くなりますので、使用箇所が多くなる場合にはご注意下さい。

ご不明な点があれば、続けてご連絡下さい。 よろしくお願い致します。

dedennne commented 7 years ago

返信ありがとうございます。 一つお聞きしたいのですが、現状UMG_Defaultモードのままですと加算ブレンドは使用出来ないが正しいのでしょうか…? HUD上でUMG_OffscreenモードにするとSSPJのアニメデータ自体が出てこなくなってしまいます。 こちらはマテリアル設定で表示可能になるのでしょうか…?

KazumasaOhashi commented 7 years ago

はい、UMG_DefaultモードではMIXのみ使用可能となります。

本来は、UMG_Defaultで正常に描画されているデータであれば、UMG_Offscreenに切り替えただけでそのまま描画されるハズですので、何らかの不具合か設定ミスの可能性があります。 状況を確認出来るような簡単なサンプルを用意して頂くことは可能でしょうか?

dedennne commented 7 years ago

ご連絡の程が遅くなってしまい申し訳ありません。 こちら、WBPを新規で作成し再度配置しましたら加算ブレンドされた状態で表示されました。 お手数おかけして申し訳ありません、ありがとうございました。

KazumasaOhashi commented 7 years ago

ご連絡ありがとうございます。解決したようで良かったです。 また何かありましたら、ご連絡下さい。