0 支持
338 閲覧
(120 ポイント)
編集

不具合報告

このページをシェアする

回答 2

0 支持
(5.0k ポイント)

IMA様

お世話になっております。SS6Player for Unity(以降SS6PU)の開発担当です。

大変申し訳ありません。

上記の情報はSS5Player for Unity(SpriteStudio Ver.5.xの頃のUnityプレーヤー)の情報となっております。

SS6PUについては、通常のUnityのシーン(Hierarchy)上で奥行き(Z座標)に従ってアニメーションオブジェクトを配置することで、何の設定などの変更も必要なく、奥行きのあるシーンを構築することができます。

そのため、SS6PUをご使用の際にはZ-Writeなどの設定は「変更しない」ようにしてください。

※SS6PUのアニメーションオブジェクト群にもZ-Writeの設定は存在するのですが……「通常とは少し違う取り扱いをしたい」ような場合の「非常時の回避機能」として存在していることもあり、少々取り扱いが難しくなっています(のと、加えてZ-Writeしてしまうことでのデメリットも存在しています)。

何卒ご了承の程お願いいたします。

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


追伸:

もしZバッファに書き込む(Z-WriteをONにする)ことが必須である場合、別途その目的を添えてご質問いただければと思います。

追伸2:

大きく余談となりますが……SS5PUの時に上記のような手段が必要だった理由については……当時、SS5PUが2Dアニメーションを描画するための専用の「View」という特殊なオブジェクトを持っており・そのViewで全ての描画アニメーションをまとめてしまう(バッチングする)という仕組みだったこともあり、3Dとの合成時に奥行きを折衷するためにZ-Writeを行う必要があった……という事情がございます。

この仕様は、(現在の)SS6PUになった時点で撤廃されており・標準状態で3Dのシーン中にアニメーションオブジェクトを配置することができるようになっております。

(120 ポイント)
ご返答ありがとうございます。
Zバッファには被写界深度と干渉しているので書き込み必須(書き込むと正常になる)ので、URLにある説明をそのまま反映したい状況です(レンダーキューもジオメトリにしたい)
(5.0k ポイント)
お世話になっております。SS6Player for Unity開発担当です。

ご返信ありがとうごいざます。

了解いたしました。

現在のSS6PUですとマテリアル群は動的生成になっているので、そのままやろうとするとSS6PUが持っているマテリアルのキャッシュなどを置き換えたりする必要があったり・普通にZに書き込むと(元から持っている3DシーンのZテストとの干渉で)Zファイトが頻出したりすると思いますので……少々(数日程度かと思われます)お時間を頂けますと幸いです。

こちらで現行最新版(Ver.2.2.5)改造してみて、その改造点をお知らせするか・もしくはSS6Player for Unityのアセットそのものをお届けする形にできれば……と考えてみます。

※恐らく、Zを書き込む際のシェーダを2パスにしたりなどの加工も必要になるかと予想しておりますので……。

お待たせしてしまい、申し訳ございませんが、少々お待ちいただけますようお願い申し上げます。
(120 ポイント)
ありがとうございます、よろしくお願いいたします。
0 支持
(5.0k ポイント)
編集

IMA 様

お世話になっております。SS6Player for Unity(以降SS6PU)開発担当です。

一応、ご希望の動作状態に一番近いと思われる特殊バージョンを

SS6PU Ver.2.1.24 Z-Write patched

https://github.com/SpriteStudio/SS6PlayerForUnity/tree/v2_1_24_ZWrite

SS6PU Ver.2.2.5 Z-Write patched

https://github.com/SpriteStudio/SS6PlayerForUnity/tree/develop_v2_2_0_ZWrite

としてコミットしました。

上記URLは、SS6Player for UnityのGitHubのそれぞれのブランチのアドレスです。

ご使用のSS6PUが、Ver.2.1系かVer.2.2系かによって、どちらを使用するかご判断いただけますようお願いいたします。


Zバッファに書き込む状態にするには、

アニメーションオブジェクト(「Script_SpriteStudio6_Root」コンポーネント)のインスペクタから、

[Initial/Preview Play Setting] - [Z Write]

にチェックを入れてください。

※C#のスクリプトから、アニメーションオブジェクトのScript_SpriteStudio6_RootクラスのFlagZWriteをtrueに変更しても同じ効果になります。

このチェックを入れた場合、使用する標準のシェーダが「Custom/SpriteStudio6/SS6PU/Sprite_ZWrite」という2パスのシェーダに変更されます(チェックしないと従来通りの「Custom/SpriteStudio6/SS6PU/Sprite」という名前のシェーダが使われ・従来通りの挙動となります)。

この2パスのシェーダは、「Geometry」でZバッファを描画した後に、次の処理パスでピクセルを描画するようになっています(2パス目はソースコード上はRenderQueueがTranspalentと書いてありますが、実動作上はこの2パス目はGeometryで実行されています。明確に「1パス目のZ値の描画」と「2パス目のピクセルの描画」を分けるために、2パス目を「Transpalent」としてRenderQueueを疑似的に分割したような形になっています)。

※参考までに……2パスになっている理由としては、1パスで描画を行ってしまうと、特にアニメーションオブジェクトにXY軸での軸回転(TransformのRotation)がかかった場合に、自分が書いたZ値でピクセル描画にZファイト(描画のちらつき)が起こってしまうことを回避するためです。

上記チェックを入れた際に、Zバッファに深度情報が書かれていることと・Particleなどとの前後関係がZバッファでの前後判定で正常に描画されることは弊社にて確認いたしました。


その上で、本バージョンについて、いくつか注意点がございます。

  1. アニメーションオブジェクトが、複数のマテリアルが複数(アニメーションのパーツで複数のセルマップを使用していたり・パーツの合成方法が異なっていたりする状態です)のアニメーションでは、パーツの描画順序が狂います。
    ※これはUnityのGeometryでのレンダリングの仕様として、指定した描画マテリアル別に(Z深度関係なく)再ソートされてしまうために起こる挙動になるため、回避できません。
     
  2.  深度情報は「ピクセルが書かれる位置」に全て記載されますので、他の描画オブジェクト(例えば他の3Dモデルや、パーティクル及びSpriteStudioのアニメーション等)との合成で「半透明のピクセルの位置の不整合(描画に穴が空いたり・半透明ピクセルがつぶれたりする)」ことが起こることがあります。
    ※これは、Zバッファでの深度判定の場合には原理的に起こってしまうことのため、回避不可能です。
     
  3. アニメーション再生中に[Z Write](Script_SpriteStudio6_Root.FlagZWrite)を変更しないでください(描画がおかしくなる場合があります)。
     
  4. このバージョンについては、公式に(GitHubなどでの)サポートをいたしかねます(今後のバージョンアップなどへの追従などについては、順次サポートいたしかねます)。
    必要が生じた場合には別途弊社サポートにご連絡頂きたくお願いいたします(その上で、バージョンアップなどが可能かどうかを判断させていただきたく思います)。

※これらの制限などの殆どについては、(本来的にバグ等ではなく)半透明や複数マテリアルの描画オブジェクトをZバッファでの深度判定で描画した際について回る「原理的な不都合(汎用的・万能な解決方法がない問題)」であるため、「アプリケーション側でどの程度の妥協をもって運用するか?」の点になり・カスタムの機能拡張の類の件であったりするために生じております旨、何卒ご理解とご容赦のほどお願いいたします。


そのため、基本的に、本バージョンの挙動でお手元の運用状態で支障が生じる場合については、

  • 元々ご使用されていたSS6PUに戻していただき、
  • 3Dシーン中にZ深度を書きこみたいアニメーションオブジェクトを(本描画の前に)RenderTextureにレンダリングしていただき、そのRenderTextureを使用してUnityのSpriteや(3Dメッシュの)Planeなどを使用して・Z深度を書きこむ形で本描画する

ようにしていただけますようお願いいたします。


お手元での開発の一助となれば、幸いです。

お忙しい中お手数とは存じますが、何卒今後ともよろしくお願いいたします。

(120 ポイント)
ありがとうございます。
頂いたもので試してみます。
(5.0k ポイント)
ご不便などおかけして大変申し訳ございませんが、何卒よろしくお願いいたします。

お手元での運用にできる限り適合していることを願っております。
(120 ポイント)
申し訳ありません、ZwriteをONにしてみたところ、表示されない状態となってしまいます。違うデータ、プロジェクトで試してみましたが同様な状態でした。確認すべきところなどありますでしょうか。
(5.0k ポイント)

お世話になっております。

以下の情報を頂けますと助かります。

  • ご使用の(今回の改造されている方の)SS6PUのバージョン
  • ご使用のUnityのバージョン
  • (URPをご使用でしたら)URPのバージョン
  • Unityでのビルドの設定(OpenGL使用か・DirectX使用かの情報だけでも構わないです)
  • ご使用のOS
  • ご使用のGPU(M1 MacなどのGPU+CPU一体型のものでしたらCPUで大丈夫です)

恐らく一番早いのは、Unityのバージョンをお知らせ頂いて、アニメーションを配置しただけのUnityプロジェクトのデータなどを頂けると非常に状態の判明は早いと思いますが……(お手間などがかかると思いますので……こちらで状態がどうしても再現できない場合に簡単なプロジェクト+シーンをご提供いただけないかを相談しようかとは思います)。

※恐らく環境とかビルドの設定に起因する問題ではないだろうか?という予想が立っているのですが……


あと、画面に表示されないとのことですが……

可能であれば(エンジニア向きのチェック内容ではあるので)……

  • 「RenderDoc」などのGPUデバッグツールを使用して、(描画フレームをキャプチャして)Zバッファが書かれているか?……を見ることは可能でしょうか?
  • 「Assets/SpriteStudio6/Shader/Sprite_SpriteStudio6_ZWrite」
    をエディタで開いて(Projectウィンドウの中でこのファイルをダブルクリックすれば、恐らくプログラム作成環境のテキストエディタが開くと思います)……
    88行目の「Offset -1,-1」を「Offset 1,1」に変更してみて、画像が出るかどうかをチェックすることは可能でしょうか?
    ※ビルド設定によっては、GPU上でのZ値の方向が逆になる場合がありまして……それでピクセルがZバッファの値との兼ね合いで描画をキャンセルされている可能性があります。

以上となります。

お忙しい中お手数とは存じますが、何卒よろしくお願いいたします。

(120 ポイント)
ご連絡ありがとうございます。
取り急ぎ情報をお伝えして、もろもろ確認してみます。
 

ご使用の(今回の改造されている方の)SS6PUのバージョン

2.2.5

ご使用のUnityのバージョン

2022.3.13f1

(URPをご使用でしたら)URPのバージョン

14.0.9

Unityでのビルドの設定(OpenGL使用か・DirectX使用かの情報だけでも構わないです)

DirectX

ご使用のOS

Windows10

ご使用のGPU(M1 MacなどのGPU+CPU一体型のものでしたらCPUで大丈夫です)

Radeon RX570
(5.0k ポイント)
お世話になっております。

情報ありがとうございます。

頂いた情報を元に、こちらでも状況が再現できるかを試してみます。
(5.0k ポイント)

お世話になっております。

当方にて

Unity2022.3.14 LTS (Windows10上)・URP(CoreRP)14.0.9

の環境で再現を試みたのですが、エディタ上ではOpenGLでもDirectXでも同様に動作することが解りました。

ですが、

  • エディタ上での挙動とビルド後の挙動が該当バージョンで異なっていることが解りました
  • また、当方の確認環境が(現在)GeForceのために、RADEONとの違いでの何か挙動差があるかもしれません。
という2点について確認等行いたいと思います。
取り急ぎにて大変失礼とは存じますが、ご容赦の程お願いいたします。
(5.0k ポイント)

お世話になっております。

SS6Player for Unity担当です。

シェーダでRADEON-GPU系で問題が生じそうな記述を修正したバージョンを、GitHubにコミットしました。

SS6PU Ver.2.2.5 Z-Write patched

https://github.com/SpriteStudio/SS6PlayerForUnity/tree/develop_v2_2_0_ZWrite

※Ver.2.1.24 Z-Write pacthedの方にも更新してありますので、(Ver.2.2.5をお使いとのことなので必要はないかと思いますが)2.1.24 Z-Write patchedをご使用される場合には、元のコメントのGitHubの該当バージョン用のURLからダウンロードお願いいたします。


また、同時にプロジェクト設定で下記を追加で行ってください。

  • 上部メニューの[Edit]-[Project Setting]でプロジェクト設定を開いていただき、[Graphic]の「Always Include Shaders」に
    「Custom/SpriteStudio6/SS6PU/Sprite_ZWrite」
    「Custom/SpriteStudio6/SS6PU/Effect_ZWrite」
    を追加してください(Sizeのところの数字を+2した数字に直すと、シェーダの定義枠が2つ増えますので、そこに上記を定義してください)。

恐らくこの修正で動作するとは思われるのですが……

お手元で正常に動作することを願っております。

※一応当方の環境でOpenGLとDirect3Dでの双方のビルド設定で、同じ動作を行うことを軽くですが確認しました。

ご不便とお手間をおかけして申し訳ございませんが、何卒ご検証の程お願いいたします。

(120 ポイント)
プロジェクトの環境を抜き出したものを用意しましたのでお送りしたいのですが、どのようにいたしましょうか。
よろしくお願いいたします。
(5.0k ポイント)
サポート担当からデータのお受渡し方法などあるかと思いますので少々お待ちくださいますようお願いいたします。
(3.2k ポイント)
お世話になっております、OPTPiXユーザーサポートです。

それではSpriteStudioコミュニティにご登録いただいているメールアドレスに、送付方法を記したメールをお送りさせていただきましたのでご確認ください。

お手数をおかけいたしますがよろしくお願いします。
(5.0k ポイント)
>IMA 様

お世話になっております。SS6PUの開発担当です。

プロジェクト、ご送付いただきありがとうございます。

拝見させていただきました。

恐らく見ていると、2パスの(Z-WriteするためのGeometry=Opaqueで書き込む)シェーダがURP(SRP)の「SRP Batcher」の機能と衝突している(整合していない)のが理由かとは思われます。

※メッシュ自体は描画はGPUコマンドとしては発行されているのですが、その際にSRP Batcherでバッチングされたことで、色々不都合がおきているようです。

ですので、とりあえず、こちらで手を考えてみようとは思います。

※元々、複数のレンダリングパスを持つシェーダが、あんまりSRP Bactherと相性が良くない構造になることがありまして……Transpalentで描画すると正直ほぼほぼ関係がない現象なのですが、Geometryで描画する場合にはプロジェクトのSRPの使い方などにシェーダの作り方が影響を受ける場合がでてきたりします。

お待たせして申し訳ありませんが、少々(数日の範囲だとは思うのですが……)お時間をくださいますようお願いいたします。
(120 ポイント)
お手数をおかけします。何卒よろしくお願いいたします。
...