0 支持
1.4k 閲覧
Q&A
Unity上で、Gameobjectとss5オブジェクトの両方に同一のlightを当てたいと考えております。

GameObjectは、MaterialのShaderをsprite/Diffuseに設定することでlightを当てています。

ss5オブジェクトも同様に、Materialを変更しようと考え以下の手順でMaterialを変更しましたが想定と異なる結果になっております。

viewのinspector → MaterialのShader → Custom/SpriteStudio5/MixをSprites/Diffuseに変更

ViewのTransform Rotation xを180に設定することでss5オブジェクトにlightは当たったのですが、ss5オブジェクト内で重ねているレイヤー同士が加算になっているかのように透けてしまいます。

(頭、胴体、手足のつなぎ目が透けて見えてしまうイメージです)

lightが当たりつつこれらのつなぎ目が見えなくなることが理想ですが、可能でしょうか。

ご多忙のところお手数をおかけ致しますが、ご確認をお願いいたします。
このページをシェアする

回答 1

0 支持
(5.0k ポイント)
編集

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

まず結論から申し上げますと……

ご想定の方法でパーツが透ける場合、恐らくはSpriteStudio5のデータで

  • 「カラーブレンド」のアトリビュートが有効になっていて、カラーブレンドの色のAとrateが255よりも低い値になっている

ことが考えられます。

ですので、カラーブレンドのアトリビュートを未使用にするか、Aとrateのパラメータを255にして頂ければ不透明状態で出力されるかと思われます。


ここからはいささか余談ではあるのですが……

SS5Player for Unityでは、カラーブレンドなどの関係から、Unityの通常のメッシュやスプライトとはメッシュの頂点データの使い方が異なっています(それに伴って、独自のシェーダを使用しています)。

そのため、本来は、Unityのsprite/Diffuseなどの標準(ビルトイン)シェーダとは、互換性がありません。

ですので、本来的には、ビルトインシェーダと交換する用法は非推奨ではあります。

※本来、「メッシュの頂点カラー(Diffuseカラー)」が入っている箇所(Mesh.color32)に、カラーブレンドの色指定が入っている他、追加UV(Mesh.uv2)に追加パラメータが入っています(color32にはカラーブレンドのR・G・B・rateが、uv2にはブレンド方法及びaと透明度が合算されて入っています)。

※また、SS5Player for Unityのシェーダは、(手を加えていない状態では)ライトの計算を行っておりません。

正道としては、SS5Player for Unityのシェーダ(Assets/SpriteStudio/Shaderの中に入っています)をコピーして名前等を変更して・シェーダに光源処理を追記して実装するのが理想的です(もしくは、一度SS5Player for Unityでの表示物をテクスチャにレンダリングしてから、それをsprite/Diffuseなどで表示する……という方法もあります)。

ただ、SpriteStudio5のデータを制限して作成することで、ビルトインシェーダを流用することは可能になります。

具体的には

  • カラーブレンドを使用しないか、カラーブレンドの色成分のAとRateを全て255にする(そして大抵の場合、R・G・Bも255である方が一般的な出力を得られるはずです)
  • 不透明度を使用しない(常に1にしておく)
  • パーツの合成方法が通常以外の場合は、ライトの反映ができない(加算や減算・乗算の合成パーツにはライトの計算が入らない)
  • SS5Player for Unityの個々のアニメーションオブジェクトやデータのパーツが回転していても光源に反応しない場合がある(Viewで統合されて表示するので、Viewを大きな1メッシュデータと考えて光源が作用する形になります)。
  • 代替で使用するビルトインシェーダで2つ目のUV座標(Mesh.uv2)を使用していないものを選ぶ

などの前提が必要になります。

※実は、やってみたことはないのですが……実装のロジック上、カラーブレンドのR・G・BはDiffuseカラーの指定として使用可能な気がします。Aは255にしておかないとパーツが透けます(できるだけRateも255にしておいてください)。

※不透明度は常に1にしておく……というよりは、Mesh.uv2にカラーブレンドのRateなどと合算されて格納されているために、ビルトインシェーダを使用すると反映されません。


以上となります。

お忙しい中お手数をおかけしてしまい申し訳ございませんがが、何卒ご検証をお願い申し上げます。

※もしそれでも透けてしまう場合は、データそのものを見てみないと原因がわからないかもしれません。

(100 ポイント)
お世話になっております。

ご連絡が遅くなってしまい、申し訳ございません。

ご丁寧なご回答をありがとうございます。

ss5にて、プロジェクトの設定の互換性からカラーブレンドのチェックを外して、新たにサンプルを作成してみました。

このサンプルにunity上で、投稿文に記載した方法でlightを当てると透けてしまいました。

この検証は、SpriteStudio5のデータを制限して作成し、unityのビルトインシェーダを流用したと考えているのですが、想定と異なる結果になってしまいました。

ss5オブジェクトにlightを当てるには、unitySS5Player for Unityのシェーダに光源処理を追記して実装するしかないでしょうか。

(SS5Player for Unityでの表示物をテクスチャにレンダリングする方法は、総テクスチャ量が増えてしまうので避けたいと考えています)

この投稿に併せて、メールにてunityとspritestudioデータをお送りしております。

ご多忙のところ大変お手数をお掛けしてしまい申し訳ございませんが、一度データをご確認いただけないでしょうか。
(11.3k ポイント)

ウェブテクノロジ・ユーザーサポート 瀬良です。

この投稿に併せて、メールにてunityとspritestudioデータをお送りしております。

とコメントいただいておりますが、サポートのほうで該当のメールを確認できておりません。

大変お手数をおかけし恐れ入りますが、以下より再送いただけないでしょうか。

クリックするとメーラーが起動します。 

こちら対応が大変遅くなってしまい申し訳ございません。何卒よろしくお願いいたします。

(100 ポイント)
瀬良様

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

ご確認いただきたいデータを添付したメールがお届けできておらず、申し訳ございません。

再度データを添付してお送りいたしましたので、ご確認よろしくお願いいたします。

不躾なお願いにも関わらず、丁寧なご対応ありがとうございます。

ご迷惑お掛け致しますが、よろしくお願いいたします。
(11.3k ポイント)
メールの再送ありがとうございます。
しかし、再送いただいたメールも未着となっておりまして……大変申し訳ございません。

もしかしたら添付データの影響かもしれません。
よろしければアップローダにアップいただきまして
メールにてダウンロードURLを教えていただけないでしょうか。

サポート宛てのメールアドレスは SpriteStudioTechSupport@webtech.co.jp です。
(リンクの不備の可能性もあるので、こちらにも記載します……)

重ね重ねこちらの不手際でご迷惑をおかけし大変申し訳ございません。
何卒よろしくお願いいたします。
(100 ポイント)
瀬良様

ご連絡ありがとうございます。

度々お手数をお掛けして申し訳ございません、アップローダへ該当のデータをアップ致しましたので、

ダウンロードURLを記載したメールをお送りいたしました。

お忙しいところご迷惑をお掛け致しますが、ご確認をお願いいたします。
(5.0k ポイント)
お世話になっております。

少々間があいてしまい申し訳ありません。

データのご送付ありがとうございます。拝見させていただきました。

これは、現在のsprite/diffuseのシェーダの動作だと、ライトが絡んだ場合に、「一度暗くレンダリングしてから、加算でライトの効果を上から描画する」形になっているので、その加算時に(半透明加算なので)パーツが透けてレンダリングされてしまうのが原因のようです。

これ、何か回避策を考えてみます。

※SS5PUの方ではなく、Unity側で……たとえばsprite/diffuseのシェーダをコピーして改造したりするような方法なのですが……対処する必要があるかと思われます。

お忙しい中お手数とお時間を頂き大変申し訳ございませんが、なにとぞ容赦のほどお願い申し上げます。
(100 ポイント)
愛瀬雅巳様

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

ご連絡が遅くなり申し訳ございません。

暗いシーン内で、ss5オブジェクトにもGameObjectと同様に加算でのライトの効果が描画されることが理想ですので、SS5PUのシェーダを改造することで近い結果になるのであれば、そちらでも問題ございません。

ご多忙のところお手数をおかけしてしまい、大変申し訳ございません。

引き続きご連絡お待ちしております。
...