複製プロジェクトを送っていただきありがとうございます。 何が問題になっているのかがわかり次第、折り返しご連絡いたします。
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
のパラメーターを-1
でcommandBuffer.DrawMesh()
を呼び出すためです。これはつまり、すべてのレンダーパスを描画することを意味します。
これには、通常のロジックを尊重せずにすべてのシェーダーパスが含まれているようで、そのため通常はレンダリングされないUnlit
という名前のパスを最後に描画してしまうようです。したがって、unlitスケルトンをRenderTextureにレンダリングせずに、通常のlitパスを取得するには、 SkeletonRenderTexture
シェーダーを調整してUnlit
パスを削除するか、SkeletonRenderTexture
で commandBuffer.DrawMesh()
を呼び出すコードを変更して一部のカスタム選択パスのみをレンダリングさせるかのどちらかになります。
残念ながら、RenderTextureに描画されるスケルトンに影響を与えるのが単一のライトのみになってしまう問題はなかなか解決しないようで、その回避策はまだわかっていません。ただし、スケルトンをunlitで RenderTexture
に描画してから、RenderTextureでクワッドを描画するときにインスペクターのSkeletonRenderTexture
のQuadMaterial
プロパティに希望するライティングを使用するマテリアルを割り当てるという方法はあります。ただし、メインテクスチャのみが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.