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バッファでの前後判定で正常に描画されることは弊社にて確認いたしました。
その上で、本バージョンについて、いくつか注意点がございます。
- アニメーションオブジェクトが、複数のマテリアルが複数(アニメーションのパーツで複数のセルマップを使用していたり・パーツの合成方法が異なっていたりする状態です)のアニメーションでは、パーツの描画順序が狂います。
※これはUnityのGeometryでのレンダリングの仕様として、指定した描画マテリアル別に(Z深度関係なく)再ソートされてしまうために起こる挙動になるため、回避できません。
- 深度情報は「ピクセルが書かれる位置」に全て記載されますので、他の描画オブジェクト(例えば他の3Dモデルや、パーティクル及びSpriteStudioのアニメーション等)との合成で「半透明のピクセルの位置の不整合(描画に穴が空いたり・半透明ピクセルがつぶれたりする)」ことが起こることがあります。
※これは、Zバッファでの深度判定の場合には原理的に起こってしまうことのため、回避不可能です。
- アニメーション再生中に[Z Write](Script_SpriteStudio6_Root.FlagZWrite)を変更しないでください(描画がおかしくなる場合があります)。
- このバージョンについては、公式に(GitHubなどでの)サポートをいたしかねます(今後のバージョンアップなどへの追従などについては、順次サポートいたしかねます)。
必要が生じた場合には別途弊社サポートにご連絡頂きたくお願いいたします(その上で、バージョンアップなどが可能かどうかを判断させていただきたく思います)。
※これらの制限などの殆どについては、(本来的にバグ等ではなく)半透明や複数マテリアルの描画オブジェクトをZバッファでの深度判定で描画した際について回る「原理的な不都合(汎用的・万能な解決方法がない問題)」であるため、「アプリケーション側でどの程度の妥協をもって運用するか?」の点になり・カスタムの機能拡張の類の件であったりするために生じております旨、何卒ご理解とご容赦のほどお願いいたします。
そのため、基本的に、本バージョンの挙動でお手元の運用状態で支障が生じる場合については、
- 元々ご使用されていたSS6PUに戻していただき、
- 3Dシーン中にZ深度を書きこみたいアニメーションオブジェクトを(本描画の前に)RenderTextureにレンダリングしていただき、そのRenderTextureを使用してUnityのSpriteや(3Dメッシュの)Planeなどを使用して・Z深度を書きこむ形で本描画する
ようにしていただけますようお願いいたします。
お手元での開発の一助となれば、幸いです。
お忙しい中お手数とは存じますが、何卒今後ともよろしくお願いいたします。