RenderTextureでは、クロスフェード時にダイシングは表示されません

415 views
Skip to first unread message

Spirit JZL

unread,
Apr 24, 2021, 7:17:56 AM4/24/21
to 宴ユーザーグループ
カメラビュー全体を表示するRenderTextureを使用する必要がある場合があります。 たとえば、SpriteCameraをRenderTextureに取得し、RawImageに表示します。

しかし、crossfage中にダイシングは見えなくなります, 多分これはシェーダーの問題です
dicingCrossfade.jpg

マッドネスラボ

unread,
Apr 25, 2021, 2:11:57 AM4/25/21
to 宴ユーザーグループ
カメラのRenderTargetにRenderTextureを設定して、それを使う場合の話ということですか?
私の知る限り、RenderTextureで半透明なオブジェクトを重ねて描画する場合、単純な解決策はないです。
この問題は、宴の問題ではなく標準のUGUIのImageであっても、半透明なスプライトを重ねて表示する場合には何かしら問題が起きると思います。

参考


宴の場合は、アバターモデルのテクスチャ書き込みなどで、この問題に対応するように複雑な処理をしています。
ですが、今回のようにカメラのRenderTargetにRenderTextureを設定して使うのであれば、また同じような描画パイプラインを通さないといけません。
そして、そのためにはすべてのオブジェクトのシェーダーが対応していなければならないです。
まず、Unity標準のUGUIのシェーダーが対応してないので、そもそもそこから対応しないといけないので、かなり難しいです。

最終的にはRenderTexuteのアルファ値の問題になるので、生成されたRendetTexureが半透明な部分を持たない状態・・・つまり、かならず背景などで塗りつぶされている状態が前提であれば、
宴の描画後に、RenderTexuteのアルファ値だけ1にリセットするような処理をしてから、描画すれば解決するかと思いますが、
添付画像のように、透明部分をもった状態でRenderTexureを使いたいのであれば、それは無理だと思います。



2021年4月24日土曜日 20:17:56 UTC+9 Spirit JZL:

Spirit JZL

unread,
Apr 25, 2021, 3:34:45 AM4/25/21
to 宴ユーザーグループ

ですが、これはDicingがCrossfade中に発生します。この時、DicingのshaderはUtage-CrossFadeImageに変更しています。だから私はこのshaderだけをどうにかして、 アルファ値を正しく修正すればいいと思います

Spirit JZL

unread,
Apr 25, 2021, 5:00:05 AM4/25/21
to 宴ユーザーグループ
私はシェーダーの基本しか知りません、color.aを変更すると、今度はDicingがおかしくなった
DicingCrossfade3.jpg
DicingCrossfade2.jpg
そもそも不思議です、何故Alphaが0なのにDicingがちゃんと表示されている

マッドネスラボ

unread,
Apr 25, 2021, 11:49:11 AM4/25/21
to 宴ユーザーグループ
この問題は複雑です。
リンク先の説明を読んで理解できましたか?
参考リンクの説明以上に私は簡単に説明できません。

シェーダーは通常はバックバッファに対して書き込むのでカラーに対してのみ作用し、アルファチャンネルへの書き込みは描画結果に影響をもたらしません。
ですが、RenderTextureの場合は、  RenderTexture  のアルファチャンネルへの書き込みが問題になります。

すでにお伝えしたように、これを単純な方法で解決する方法はありません。
私の知る限り、非常に複雑な手順が必要になります。
もし、完全な解決策があるなら教えてください。

>添付画像のように、透明部分をもった状態でRenderTexureを使いたいのであれば、それは無理だと思います。
RenderTexureが透明な部分を持つことは必須ですか?
であれば、解決策はありません。


2021年4月25日日曜日 18:00:05 UTC+9 Spirit JZL:

マッドネスラボ

unread,
Apr 25, 2021, 1:01:42 PM4/25/21
to 宴ユーザーグループ
限定的な状況では対応できるようにシェーダーを書き換えましたので、試してみてください。

ですが、これは不完全です。
半透明な描画が他にも重なる場合や、テクスチャ自体に半透明な要素がある場合は、合成結果がおかしくなることがあると思います。
それはこの問題と一緒です。
これはRenderTextureの仕様上の問題ですので私では解決できません。

2021年4月26日月曜日 0:49:11 UTC+9 マッドネスラボ:
TextCrossFadeRenderTexture.unitypackage

Spirit JZL

unread,
Apr 26, 2021, 2:31:40 AM4/26/21
to 宴ユーザーグループ
更新していただきありがとうございます
確かに半透明合成は問題点がありますけど、基本的には使用できます
RenderTextureはこんな問題点があるなんて、今まで知らなかった. 何かCamera画面そのまま取得する方法があれば......

しかしAvatarは大変そうです、ImageTypeのテクスチャ描き込みAvatorは普通のRenderTextureに正常に表示されません、また黒BackGroundの問題です. 
です実は私はほとんどAvatorを使用しません. だから多分大丈夫だと思います。

実験しにくいが、資料によると、Live2dはDefaultShaderTypeのテクスチャ描き込みを使用し、ならば正常に表示されますね?

マッドネスラボ

unread,
Apr 26, 2021, 10:57:32 AM4/26/21
to 宴ユーザーグループ
Live2Dであっても、半透明な部分があれば正常に描画できないケースもあると思います。
これは宴の問題ではなく、描画パイプラインの技術概念の話です。
私も専門外ですので正確には説明できません。
Unityなどにお問い合わせください。


2021年4月26日月曜日 15:31:40 UTC+9 Spirit JZL:

Spirit JZL

unread,
Apr 26, 2021, 11:14:17 AM4/26/21
to 宴ユーザーグループ
半透明な部分は承知いたしました。私が言いたい不正常は ImageTypeのテクスチャ描き込みが、 RenderTextureに全く 表示されませんのことです。 Live2dはDefaultShaderTypeのテクスチャ描き込みを使用し、だから大丈夫だと思います。

マッドネスラボ

unread,
Apr 26, 2021, 11:52:33 AM4/26/21
to 宴ユーザーグループ
一度テクスチャ書き込みをしたものを、再びカメラのRenderTextureに描きこむというのは想定していませんでした。
対応しましたので、添付のパッケージを試してみてください。


2021年4月27日火曜日 0:14:17 UTC+9 Spirit JZL:
TestDoubleRenderTexture.unitypackage

Spirit JZL

unread,
Apr 26, 2021, 8:58:19 PM4/26/21
to 宴ユーザーグループ
更新していただきありがとうございます. 
これで  ImageTypeのテクスチャ描き込みもちゃんと表示されます。

最終のRenderTextureを表示するRawImageにも何かのShaderでAlpha修正することを出来ればいいですね
Reply all
Reply to author
Forward
0 new messages