0 支持
325 閲覧
(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 ポイント)
サポート担当からデータのお受渡し方法などあるかと思いますので少々お待ちくださいますようお願いいたします。
(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 ポイント)
お手数をおかけします。何卒よろしくお願いいたします。
...