0 支持
1.9k 閲覧
(340 ポイント) Q&A

・プラグインバージョン:v1.4.6_UE4.23_SS6.3.0

・質問:
SsPlayerコンポーネントの子コンポーネントにSsPlayerコンポーネントがある時、どのパラメータを見て描画順が決まっているのでしょうか?

SpriteStudioにてパーツの優先度を子コンポーネントの方を高くして実行するとカメラの位置などによっては親コンポーネントの方が手前に描画されるようです。
コンポーネントとカメラの距離で調整(手前にしたいコンポーネントの座標をカメラに近づける)しても同様の結果でした。

カメラの ProjectionMode は「Orthographic」に設定しています。

再現方法が確立できておらず恐縮ですが、宜しくお願い致します。

このページをシェアする

回答 1

+1 支持
(4.2k ポイント)
選択
 
ベストアンサー
SpriteStudio上でのパーツの並び順や優先度は、あくまで1アニメーション内での描画優先度を決定するものであり、別Component間での描画順には影響を与えません。
これは、複数のComponentが同一Actorに属していても同様です。
そのうえで、描画順はUE4の標準仕様に準拠する形となります。
単純なPlaneメッシュに半透明マテリアルを割り当てても、同様の結果が確認出来ると思います。

半透明メッシュはComponent単位でソートされた結果順に描画されます。
深度バッファへ描き込まれないため、半透明メッシュ同士では不透明メッシュのようなピクセル単位での深度テストが機能しません。
同一平面上に配置していたとしても、カメラとの位置関係次第で描画順が入れ替わることは、通常の用途内でもよく起こることとなります。

今回のケースでは、対処方法としては以下2点のどちらかをご検討頂ければと思います。
Orthoビューに限定した状況であれば、まず1の方法をお試し頂ければ簡単です。

1.
カメラがOrthoビューであれば、基本的にはカメラから見て奥行き方向の座標によって描画順が決まるはずです。
Orthoビューであれば大きく座標を動かしても見た目が変わりませんので、十分な間隔を開けて奥行き座標を設定することで、描画順を制御することが出来ます。

2.
使用しているアニメーションで半透明を使用していなければ、Componentの「Render Mode」を「Masked」に切り替えることを検討して下さい。
不透明の描画であれば深度値が描き込まれるため、ピクセル単位の深度テストが機能するようになります。
この場合でも、同一平面上に配置するとZファイトが発生してしまうため、やはりある程度の奥行方向の間隔を空ける必要はあります。

また、「Masked」モードではパーツ同士もZファイトを起こす可能性があります。
デフォルトでもパーツ間でわずかに間隔を開けて描画するようになっているのですが、カメラとの距離によってはこれでは不十分な場合もあります。
その場合は「Pixel Depth Offset Per Part」プロパティの値を調整して下さい。この値が、Zファイト回避のために1パーツ毎に奥行き方向の頂点座標に加算されます。

こちらの方法は、Perspビューでも適用可能です。

以上、よろしくお願い致します。
(340 ポイント)
SpriteStudioでの優先度はあくまでも1アニメーション内での描画優先度との旨、承知しました。
また、UE4標準仕様の解説についても誠にありがとうございます。とても参考になります。

1、2の方法を試してみたところどちらの方法でも起こっていた現象は無くなりました。弊プロジェクトでは半透明を使用する箇所がいくつかあるため、上記の仕様を理解した上でご教示いただいた1、2の方法で回避したいと思います。

ご返答ありがとうございました。
...