• 日本語
  • [UE4]SpineWidgetの透過時にキャラクターのパーツが重なっている様子が表示されてしまう問題について

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

Spine-UE4 Runtime 3.8において、UMGを利用したSpineのキャラクターを半透明にする処理を作っているのですが、
SpineWidgetのColorを利用して透過させると、キャラクターのパーツ同士が重なっている様子が見えてしまいます。
パーツ同士の重なりを見せずに、透過させる方法はありませんでしょうか。

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

Related Discussions
...

これは十分に解決できない問題です。 スロット/アタッチメントのレンダリング順序を逆にすることができるので、それらは前後に描かれて深さテストを可能にします。 しかし、これでもまだアーティファクトが発生します。

これを正しく処理する唯一の解決策は、半透明ではなくスケルトンをレンダーテクスチャにレンダリングしてから、半透明でレンダーテクスチャをキャンバスにレンダリングすることです。 私たちはここでUnityに似たようなものを提案しました:http://esotericsoftware.com/forum/Unity3D-11776?p=52806&hilit=+transparent+character#p52806

I'm afraid this is a problem that can not be adequately solved. You can reverse the rendering order of slots/attachments, so they are drawn front to back and enable depth testing. But this will still result in artifacts.

The only solution to handle this properly is to render the skeleton to a render texture without translucency, then render the render texture to your canvas with transluceny. We have proposed something similar for Unity here: Unity3D 에서 불투명한 스파인 리소스가 겹치는 문제

ご回答いただきありがとうございます。
ご提案いただいた方法で一度試してみます。

2 years later

こんにちは。

Spine-UE4 Runtimeを使用しており、同じ問題に遭遇しています。
私のプロジェクトでは、
SpineSkeletonRendererComponentを含むアクターを3D空間のレベル上配置し、SceneCapture2Dカメラでキャプチャー中の映像を、Widgetにイメージとして配置したレンダーターゲットに投影しています。これによりAlpha100%のとき、Spineによるキャラクターの絵は、レンダーターゲット上で正常に表示されています。

解決策として提案されている、
「半透明ではなくスケルトンをレンダーテクスチャにレンダリングしてから、半透明でレンダーテクスチャをキャンバスにレンダリングする」とは、
この状態で正しいでしょうか。

また、この状態から実際にキャラクターを半透明にする場合、何を行えばよいのでしょうか。
SpineSkeletonRendererのAlpha値を変更した場合、パーツの重なりが見える問題が発生します。
また、私のプロジェクトでは、レンダーターゲットには複数のキャラクターが同時に複数表示されており、特定のキャラクターのみを透過させる必要があります。

何か助言を頂くことはできますか?

独立しているスケルトンは、個別にアルファが完全に不透明な状態でRenderTextureにレンダリングする必要があります。 それから、単一のスケルトンを含んでいるRenderTextureを、希望する透明度で画面にレンダリングしてください。

単一のスケルトンをRenderTextureにレンダリングするカメラは、シーン全体ではなく、その単一のスケルトンだけをカバーするように設定するのがベストで、その方が無駄がありません。そして、このカメラで正射影を使用すれば、遠近法による歪みに悩まされることがありません。

メインカメラと同じカメラ設定にすることもできますが、そうすると無駄な空きスペースが多くなってしまいます(オーバードローに悪影響が出ます)。ただ一方で、こちらの方が設定自体は簡単になると思います。


Individual skeletons need to be rendered separately to a RenderTexture at full opacity alpha. Then the RenderTexture containing a single skeleton needs to be rendered to the screen with the desired transparency.

The camera that renders the single skeleton to the RenderTexture is best setup to only cover the single skeleton instead of the whole scene, which is less wasteful. Then you should use orthographic projection at this camera so that you don't have to deal with perspective distortion.

You could also use the same camera setup as your main camera, but then you have a lot of wasted empty space (bad for overdraw). On the other hand, this will be easier to setup.