0 支持
118 閲覧
(290 ポイント) 不具合報告
編集

・発生バージョン: 5.8.3.6625
・動作環境:  Windows 7 64bit

・症状:不透明度を用いたデータがSpriteStudioとViewerで異なる

・再現手順:
 #1. Sprite Studio上でrootの下に1つCellを置き、カラーブレンドに頂点カラー4色を付け、ブレンド方法に乗算を設定する
 #2. 作成したCellと同階層にもう1つCellを置き、カラーブレンドに単色を付け、ブレンド方法に加算を設定、不透明度に0.25を指定する
 #3. viewer_sample_gl.exeを起動し、Sprite Studio上での見た目と変わらない事を確認する
 #4. ssbpLib\samples\DXLibrary\basicをビルドしたViewerで見ると、色味が不一致となる

必要であればサンプルのSprite Studioデータをお渡しできますのでお申し付けください。

以上です。
お手数おかけしますが、ご確認頂きますよう宜しくお願い致します。
Sprite Studioでの見た目

DX Viewerでの見た目

回答 1

0 支持
(6.9k ポイント)

SpriteStudio ユーザーサポートの瀬良です。

状況について確認いたしました。

DXLibraryにつきましては、下記リンク先のとおり、不透明度に関して制限がございます。

 制限される機能はこちらをご覧ください。

ですので、ご指摘いただいた点につきましては、独自に調整を行っていただく必要がございます。
大変恐れ入りますが、何卒ご了承くださいますようお願いいたします。

データ確認にViewerを使用されている場合は、SDKに付属されているものをご使用いただくことをご検討いただければ幸いです。

SpriteStudio5-SDK はこちらからダウンロードいただけます


DXLibraryを使用するのが必須の場合

  • どのような用途で使用するか
  • どこが問題になるか

など、ご教示いただけないでしょうか。
開発の参考にさせていただければと思います。

以上、よろしくお願いいたします。

(290 ポイント)
Viewerの色味が異なるのはDXLibraryの仕様ということで承知致しました。

現在、弊社ではPlayStation 4とNintendo Switchの対応を行っておりますので、DXLibraryは利用予定は御座いません。
ですので手法さえわかればRuntimeへ適用可能だと考えております。

ssbpLib\samples\DXLibrary\basicのSource Codeを拝見し、実機側でも同様に処理しているのですが、Sprite Studioでの見た目には至らずです。

御社のviewer_sample_gl.exeでは正しく描画されておりますので、何かしら手法があって解決策はあると思っているのですが、残念ながらviewer_sample_glのSourceが見当たらず、ヒントを得られておりません。
viewer_sample_glにはあって、ssbpLib\samplesにはない処理をご教示頂きたく存じます。

以上、よろしくお願い致します。
(6.9k ポイント)

返答が遅れてしまい申し訳ございません。

SS5SDKに含まれている viewer_sample_gl の描画部分は以下となりますので、参考にしていただければと思います。

https://github.com/SpriteStudio/SpriteStudio5-SDK/blob/master/Common/Drawer/ssplayer_render_gl.cpp

また、Ver.6用の SS6ssbplib にて、OpenGL を使用してアニメーションを再生するサンプルコードを公開しております。

共通で使用できる部分もありますので、こちらも参考になれば幸いです。https://github.com/SpriteStudio/SS6ssbpLib


SS6ssbplibを使用される際の注意点
SpriteStudio Ver.6 では SpriteStudio 5 から以下の点が変更されております

  •  【Ver.5】プリマルチアルファ処理 → 【Ver.6】ストレートアルファ処理 
  •  【Ver.5】カラーブレンド → 【Ver.6】パーツカラー

当該機能を Ver.5 対応するには上記の描画ソースコード

https://github.com/SpriteStudio/SpriteStudio5-SDK/blob/master/Common/Drawer/ssplayer_render_gl.cpp

カラーブレンドを再現する際は

https://github.com/SpriteStudio/SpriteStudio5-SDK/tree/master/Common/Drawer/GLSL

を参考にしていただければと思います。

こちら、何か不明点などございましたらお手数ですがお知らせくださいませ。
ご確認、よろしくお願いいたします。

(290 ポイント)
ご返信頂き、誠にありがとうございます!
これから着手し、調査後に改めてご報告差し上げたいと思います。
(290 ポイント)

GLで利用できるソースコードがSDKの中に入っていましたね。
私が見落としておりました。大変失礼しました。

調査の結果、不透明度の値が正しく反映されていなかった原因が判明しましたのでお知らせ致します。

ssbpLibの中にあるDX版のサンプルでは、単色カラーブレンドが選択されている時のみ不透明度の値が頂点のRGBに乗算されている事に気づきました。

弊社で作成中のゲームコードではPixel Shaderの一番最後に不透明度をAlpha値として乗算するようにしてあるのですが、
上記のとおり、単色カラーブレンドの時に頂点カラーに不透明度が乗算され、
更に私がPixel Shaderで乗算させるという二重に施してしまっていたのが原因です。

カラーブレンドを使用しない、もしくは4点個別の頂点カラーを与えた時は不透明度の乗算は行なわれず、
カラーブレンドを単色で適用させる時のみ不透明度をRGBで代用する不思議なソースコードになっています。

お伝え頂きましたGL側のソースコードも眺めて見たのですが、
DXのコードと比較して100%異なるレベルでありましたので、
アルゴリズムの全貌を把握するのに時間を要してしまうと判断し、今回は断念しました。
Fragment Shaderであるsprite.fsも少々眺めましたが、
テクスチャサンプル取得後のRGBに、テクスチャのAlpha値を掛けている理由を汲み取れませんでした。

各種プラットフォーム全てに対応する事は難しいと思いますが、
PC上でのDXとGLは同様のアルゴリズム、ほぼ共通のコードで動かせるものをGitHubで共有頂けると、利用するエンジニアが楽になるのでは?と感じた次第です。

長くなりましたが報告は以上です。
ご対応いただき、ありがとうございました。
 

(6.9k ポイント)
ご丁寧なご報告をありがとうございます。

この度はSDKにつきまして
ご迷惑をおかけしてしまい申し訳ございませんでした。

いただいたご報告・ご意見を踏まえまして
SDKをはじめとしたライブラリの改善に活かしてまいります。

今後ともSpriteStudioをどうぞよろしくお願いいたします。
...