やりたいこと
unityでSprireRenderで画像を表示し、その際に自作のshaderを使用したいのですが、透過された画像でうまく表示されません。
やったこと
①Projectビューで「standard surface shader」を作成。特に編集はしない。
②適当なマテリアルを作成し、そのシェーダに①のシェーダを設定。
③スプライトレンダーを使用したオブジェクトをゲーム内に配置し、そのスプライトレンダーのマテリアルを設定。
これで画面には画像が表示されますが、この時透過処理がされた画像だと、↓のように正しく輪の外側に黒い部分生えたり、輪の内側がジャギどころでないギザギザになる現象がおきます。
これが表示した元の画像(248×258)です。一応、画像そのものではなくスクショしたものですが。
試したこと
自作してないシェーダー、例えば既に用意されているshaderからunlitのものをマテリアルに適用すると、
↓のunlitの上三つは最初の画像の様に汚く表示され、下二つはジャギが少し気になるものの正常に表示されました。
つまりはshaderの設定によって透過部分が意図した表示になるかが決まっているようなのですが、「shader 透過画像」「unity shader 汚くなる」、などで調べてもこの現象についての情報が一切見つかりません。
この現象はshaderのどの部分が関係し、解決するにはどうすれば良いのでしょうか。
ここから追記
フォトショップで使用している輪の画像におかしなところがないかチャンネルを確認しましたが、おかしいところはありませんでした。
また、確認用にこのような画像をフォトショップで制作(分かりにくいですが、白いところは透過した個所と、白く塗りつぶした箇所があります)
unityで上記シェーダーを表示するとこのようになりました。
黒い枠がはみ出たり、白いところが繋がったりと滅茶苦茶になっていますね。
これに関してもunlitで表示される上3つのunlitだと見た目がおかしく、下2つのunlitだとジャギが気になるものの、正常に表示されます。
さらなる追記
「surface shader alpha」などで検索させていただき色々試した結果、alpha:fadeのオプションを追加することで、↑のように透過部分を表示することができました
参考:https://docs.unity3d.com/ja/2018.4/Manual/SL-SurfaceShaders.html
何故か強烈な白が追加されているせいで輪の画像の薄青のグラデーションが消し飛んでしまっていますが…
とりあえず、透過pngがshaderでおかしくなる、という問題は解決でいいかと思います!
回答1件
あなたの回答
tips
プレビュー