0 支持
662 閲覧
(250 ポイント) Q&A
  • 発生バージョン: SpriteStudio6 Player for Unity 2.0.0

  • 動作環境:  Windows10、Unity2021.2.14f1

  • 症状

UnityでZバッファを有効にするとアニメパーツ間で描画順が崩れました。

Unityで3D空間上にアニメを配置し、Perspectiveカメラで描写させています。

3Dエフェクトをアニメの奥は描画せず、手前は描画するようにしたくなり、そのためにアニメのZバッファをONにしました。それでしたいことは実現できたのですが、同アニメ内パーツ間で描画順が崩れました。

Z軸があるUnityシーンに配置した場合Zソートしか効かないのか知りたい | OPTPiX Help Center (webtech.co.jp)

上記ページ「3D描画物と同時に描画する場合」に記載のように、アニメの描画角度次第ではメッシュの中のプリミティブの描画順序が変わっているものと思われます。

こちらは何らか回避策は存在するでしょうか?

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

このページをシェアする

回答 2

0 支持
(5.0k ポイント)
編集
お世話になっております。SS5/6Player for Unity開発担当です。

週をまたいだため、お返事が遅れてしまい申し訳ありません。

一旦、SS5Player for Unityベースのご質問かと誤解して返信したのですが、別のご質問で「SS6Player for Unity」の記述を見つけましたので、一旦削除しました。

※このサポートセンターの対処記述がSS5Player for Unityでのものを引きずっていた関係で、ご質問の冒頭にあった「SS6PU Ver.2.0.0」のご報告を見落としてしまいました。

申し訳ありません。

現在ご返信を再編集しておりますので、もう少々お待ちください。
(250 ポイント)
ご返答ありがとうございます。

「SS5Player for Unity」ではなく、「SS6Player for Unity」を使用しています。バージョンは2.0.0です。

アニメのレンダーキューはTransparentを設定しています。

3Dエフェクトは単体のものであり、一つのエフェクトの中でもアニメより手前の部分、奥の部分ができると思うのですが、奥の部分だけアニメに隠れていてほしい感じです。イメージとしてはアニメを取り囲む竜巻のようなものです。これに関してはTransparent、ZWrite ONで実現はできています。

よろしくお願いいたします。
0 支持
(5.0k ポイント)

お世話になっております。SS6Player for Unity開発担当です。

前述のご返信を間違った内容で返信してしまい・一旦内容を削除してあります関係から、今回の返信を別に分けました。

何卒ご了承いただけますようお願いいたします。


SS6Player for Unity 2.0.0ベースだと、Ver.1.1系と異なり・マテリアルがランタイムで動的に生成される仕様になっているためZ-Writeの設定をどう変更したのか……にもよりますが、

現状で

それでしたいことは実現できたのですが、同アニメ内パーツ間で描画順が崩れました。

とのお話ですので、その点の対処法に絞って返信させていただきます。

本件は、ヘルプセンターの記述がSS5Player for Unityでの内容を引きずってしまっているために色々とご面倒をおかけしてしまい、申し訳ありません。

描画オーダーを「Geometry」にしてしまっていることが原因だと思われますので、「Transparent」もしくは「from Shader」の設定のままにしていただけることで、描画順序は狂わなくなるかと思われます。

※Geometryにしてしまうと、不透明の3Dモデルと同じ扱いになってしまいますため、Unityの描画マネージャでのメッシュバッチングでマテリアル毎の描画順序が、3Dオブジェクトに特化して並び替えられてしまうために、描画順序が崩れていると思われます。


その上で、「アニメーションの描画の後に3Dエフェクトを描画する」ことを保証するために、

  • 3Dのエフェクト側のマテリアルのRender-Queueをアニメーション側よりも確実に後にくるように設定する
  • もしくは、3Dエフェクトの描画するCameraを分けて、3Dエフェクトを描画するCameraのDepthをアニメーションを描画しているCamera(通常はこれはDepthが0になっていると思います)よりも後に描画するようにする

というような方法を講じることで、ご希望の実装状態が得られるのではないかと思われます。

※もし問題がないのであれば、上記の内「Cameraを分ける」方の手段を個人的には推奨いたします。


もし上記で解決しない場合などについては、よりプロジェクトの実行の構造に依存した対象が必要になる可能性がありますので、その場合については別途ユーザーサポートにご連絡いただければ(公開状態ではなく)プロジェクトの内容を守秘した上でのサポートを行うことができるかと思いますので、その際には何卒ご検討いただきたくお願いいたします。

ご面倒をおかけして申し訳ございませんが、何卒、今後ともよろしくお願いいたします。

(250 ポイント)
ご返答ありがとうございます。

既にレンダーキューはTransparentに設定をしてある状態でした。

ZWriteの設定は、シェーダー側で「ZWRITE On」として確実に有効になるよう設定しています。

3Dエフェクトとの前後関係については、Transparent、ZWRITE Onで解決できているため、パーツ間前後関係さえなんとかなれば、といったところです。

ユーザーサポートについては検討させていただきます。

よろしくお願いいたします。
(5.0k ポイント)
ご返信ありがとうございます。

設定状態について、了解いたしました。

こちらでも何か汎用的な対処方法がないか、再考察してみようと思います。

近々で発見できましたら、こちらのご質問で返信などさせていただければと思います。

何卒今後ともよろしくお願いいたします。
(250 ポイント)
ありがとうございます。

お手数おかけしますが、よろしくお願いいたします。
(250 ポイント)
ユーザーサポートへ問い合わせいたしましたので、ご確認のほどお願いいたします。

再現できなければテスト用のプロジェクトをお送りすることも可能です。

何卒よろしくお願いいたします。
...