【Unity】シェーダーでTextにテクスチャを貼り付ける


カラフルでポップな文字を使いたい。

けどビットマップフォントを用意するのも面倒。

シェーダーの勉強を兼ねて試行錯誤してみる。

 

やりたいことは以前に別方法で試したことがある。

シェーダーが意味不明すぎたのでTextureをいじる方法で解決したけど、やっぱりシェーダーを使うのが正しい気がする。

 

まず文字の描画なのでライティングを考慮したサーフェスシェーダーではなく、VFシェーダー(頂点・フラグメントシェーダー)で書くことにします。

新規作成では Unlit シェーダーがこれに当たります。

 

シェーダーコード
メモ:

・opaqueでもclip(txt.a-0.5)とかすれば問題ない

・fragの i.vertex は画面の座標(FHDなら(0,0)-(1920,1080))

 

このシェーダを適用したマテリアルの _MainTex2 で適用するテクスチャを選択する。

一見よくできたように見えるけど、よく見ると文字ごとのストライプの角度が違う。

同じくらいのサイズのImageと比較するとこうなる。

これだとuv空間が軸・スケールともにおかしくなっている。

また、Textは文章の場所にかかわらず文字ごとに同じ模様になる。

不規則なパターン素材であればこの方法でテクスチャ文字が作れる。

規則性がある模様の場合は角度の違いが気になる。

文字を最小切り抜きした角度のように見える。

また等幅フォントを使っても意味はなかった。

 

文字ごとの角度をそろえるために荒業を使ってみる。

テクスチャのUV座標をスクリーン上の座標で置換する。

これでスクリーン内ならいい感じにそろう。

残った問題としては1文字1文字でなくスクリーン内の座標を使っているので大きい画像が必要になる。

Text の座標がどのように作られているかわかれば変換できそうだけど、全然見つからないしとりあえずこれで終わり。

 


コメントを残す

メールアドレスが公開されることはありません。