kenjizenki

SpineUniyに追加されたSkeletonRenderTextureについて質問です。
まず、こちらの機能、大変待ちわびていた昨日なのですごくたすかります、実装ありがとうございます。
見え方が全然変わってくるのですごく助かります。

上記昨日についてなのですが、ストレートアルファで吐き出したSkeletonに対応させると表示がおかしくなってしまうようです。(腕などが四角が表示されてしまう)
こちら、ストレートアルファ時の回避方法などございますでしょうか。
Avatar
kenjizenki
  • Postovi: 79

Harald

残念ながら、その問題を再現できませんでした。ストレートアルファの Spine/SkeletonマテリアルをRenderTextureにレンダリングし、このRenderTextureをSkeletonRenderTextureコンポーネントを介してシーンにレンダリングすると期待どおりに機能しました。 問題のスクリーンショット、マテリアルの設定などを見せていただけますか? また、もしよろしければ問題を実証する最小限のUnityプロジェクトを送っていただけませんか?
-----
Unfortunately we could not reproduce the problem, it worked as expected when rendering a straight alpha Spine/Skeleton Material to the RenderTexture and this RenderTexture to the scene via the SkeletonRenderTexture component. Could you please show some screenshots of the problem, your material setup, and so on? Or better, could you send us a minimal Unity project that demonstrates the issue?
Avatar
Harald

Harri
  • Postovi: 3991

kenjizenki

ありがとうございます。
プロジェクトを最小で用意し、問い合わせから送らせていただきました。

また、参考までに私の方ではこのように表示さられてしまいます。

SnapCrab_NoName_2022-3-15_17-0-52_No-00.png


左はストレートアルファのSpine。
右はデフォルトのものです。
Nemaš dopuštenje za pregledavanje privit(a)ka dodan(og)ih postu.
Avatar
kenjizenki
  • Postovi: 79

Harald

複製プロジェクトを送っていただきありがとうございます。 何が問題になっているのかがわかり次第、折り返しご連絡いたします。
Thanks for sending the reproduction project. We will get back to you as soon as we have figured out what's going wrong.

---

新しいSpine URPシェーダー(4.0と4.1-betaの両方)をリリースしました。
Spine Unity Download
上記のアップデートでは、SkeletonRenderTextureを使用する際にStraightAlpha設定が無視されてしまう問題が修正されています。

現状では、残念ながら、 SkeletonRenderTextureはメッシュをunlitパスでレンダリングします(場合によっては単一のメインライトを使用します)。 これは別の問題であり、既存のシェーダーで修正できるかどうかはわかりません。

後で参照できるようにチケットのURLを発行します。
https://github.com/EsotericSoftware/spine-runtimes/issues/2044

-----
New Spine URP shaders (both 4.0 and 4.1-beta) have been released:
Spine Unity Download
The above update fixes the problem of the Straight Alpha settings being ignored when using SkeletonRenderTexture.

Currently unfortunately SkeletonRenderTexture renders the mesh in an unlit pass (and sometimes using a single main light). This is a separate problem which we are not sure can be fixed in the existing shaders.

Issue ticket URL for later reference:
https://github.com/EsotericSoftware/spine-runtimes/issues/2044

---

lit URPシェーダーと複数の光源に関してさらにいくつかのテストを実行しました。一部のURPシェーダーは現在、unlitスケルトンをRenderTextureにレンダリングします。そしてそれがクワッドを介してシーンに描画されます。例えばUniversalRenderPipeline/2D/Spine/Spriteシェーダーの場合などです。
スケルトンがunlitで表示される理由の1つは、SkeletonRenderTextureが、shaderPassのパラメーターを-1commandBuffer.DrawMesh()を呼び出すためです。これはつまり、すべてのレンダーパスを描画することを意味します。
これには、通常のロジックを尊重せずにすべてのシェーダーパスが含まれているようで、そのため通常はレンダリングされないUnlitという名前のパスを最後に描画してしまうようです。したがって、unlitスケルトンをRenderTextureにレンダリングせずに、通常のlitパスを取得するには、 SkeletonRenderTextureシェーダーを調整してUnlitパスを削除するか、SkeletonRenderTexturecommandBuffer.DrawMesh()を呼び出すコードを変更して一部のカスタム選択パスのみをレンダリングさせるかのどちらかになります。

残念ながら、RenderTextureに描画されるスケルトンに影響を与えるのが単一のライトのみになってしまう問題はなかなか解決しないようで、その回避策はまだわかっていません。ただし、スケルトンをunlitで RenderTextureに描画してから、RenderTextureでクワッドを描画するときにインスペクターのSkeletonRenderTextureQuadMaterialプロパティに希望するライティングを使用するマテリアルを割り当てるという方法はあります。ただし、メインテクスチャのみがRenderTextureにレンダリングされるため、法線マップやリムライトマスクなどの追加のテクスチャはデフォルトではパイプラインにないことに注意してください。それについての回避策は、追加の各テクスチャを追加のRenderTextureにレンダリングし、それをクワッドマテリアルで使用することです。もしこの方法で進めたい場合は、 SkeletonRenderTextureコードに基づいて独自のコンポーネントを作成し、単一のテクスチャではなく複数のテクスチャに合わせてすべてを調整することをお勧めします。
-----
I have performed some more tests regarding lit URP shaders and multiple light sources. Some URP shaders currently render an unlit skeleton to the render texture, which is then drawn to the scene via the quad. That is e.g. the case for the UniversalRenderPipeline/2D/Spine/Sprite shader. One of the reasons the skeletons appear unlit is that the SkeletonRenderTexture calls commandBuffer.DrawMesh() with parameter -1 for shaderPass which means to draw all render passes. This seems to include all shader passes without respecting the normal logic, so it draws the named Unlit pass last, which normally does not get rendered. So in order to not get an unlit skeleton rendered to the RenderTexture but the normal lit passes, either the SkeletonRenderTexture shaders can be adjusted and any Unlit pass removed, or the code in SkeletonRenderTexture that calls commandBuffer.DrawMesh() can be modified to only render some custom selected passes.

Unfortunately the problem of only a single light affecting the skeleton drawn to the RenderTexture seems to persist, and we know of no workaround for that yet. What could be done however, is to draw the skeleton unlit to the RenderTexture, and assign a Material at the SkeletonRenderTexture Quad Material property in the inspector that uses the desired lighting when drawing the quad with the RenderTexture. Just note that additional textures, such as normal-maps or rim-light-masks, will be missing in the pipeline by default, as only the main texture will be rendered to a RenderTexture. A workaround for that would be to render each additional texture to an additional RenderTexture, and then use it at the quad material. If anyone would like to go down that road, we would recommend to write their own component based on the SkeletonRenderTexture code and adjust everything for multiple textures instead of a single one.
Avatar
Harald

Harri
  • Postovi: 3991


Natrag na 日本のSpine ユーザー