【Unity】マテリアルのテクスチャが伸びる問題の解決法

テクスチャが引き延ばされる問題の解決策 ゲーム制作メモ

Unityで3Dゲームを作っていると引っかかる問題の一つに、「マテリアルのテクスチャが伸びてしまう」というものがあります。見栄えが悪くなるのでさっさと直したいところですが、簡単に解決できそうなのに今までなかなか解決策が見つかりませんでした。

しかし、最近になってようやくこの問題の良い解決法を見つけました。今回はそれについて書いていきます。

スポンサーリンク

問題点:スケールによってテクスチャの大きさが変わってしまう

解決方法を紹介する前にまずは今回の問題についてもう少し詳しく説明します。何が問題なのかというと、ゲームオブジェクトのスケールを変えたときに、マテリアルに設定したテクスチャが次の図のように「伸びて」しまうのです。

スケールを変えるとテクスチャが引き延ばされる

実際のシーンを見てみると次のような感じです。

オブジェクトのスケールによってテクスチャサイズがバラバラ

オブジェクトのスケール次第でテクスチャサイズが変わってしまう

これだとスケールを大きくしたオブジェクトではテクスチャがぼやけてしまいますし、スケールが1:1でないオブジェクトはテクスチャが「びよ~ん」と伸びた感じになってとても見た目が悪いです。

よくある解決策:タイリング設定を変更する

さて、この問題については同じく悩んでいる方も多いようで、ネットで調べてみると「マテリアルのタイリング設定を変更する」というやり方が多く載っています(下図)。

マテリアルのタイリング設定

しかし、この解決策には「色々なスケールに対応できない」という致命的な欠点があります。確かにあるスケールに対しては有効かもしれませんが、別のスケールでは依然としてテクスチャのサイズがおかしくなってしまうのです。なのでこの方法は根本的な解決策にはなりません。

根本的な解決策:シェーダーを使う

なのでさらにググってみたら素晴らしい解決策がありました。下記のページでは、シェーダーによって今回の問題を解決する方法が紹介されています。

Unity – unityのマテリアルのサイズが一定にならない|teratail

どうやら現状ではシェーダーを使うのが根本的な解決策のようですね。

それでシェーダーのコードはそちらのページに掲載されているのですが…初心者の方にはどうすればいいかよく分からないと思いますので使い方を説明しますね。

シェーダーの作り方&使い方

先ほど紹介したページのシェーダーを使う手順は次の通りです。

  1. シェーダーファイルを作成し、それを開いて上記ページのソースコードを貼り付ける
  2. 新しくマテリアルを作り(※既にあるマテリアルでも可)、シェーダーを1.で作ったものに変更する
  3. 2のマテリアルを好きなゲームオブジェクトのメッシュレンダラーに適用する

シェーダーファイル作成

プロジェクトウィンドウの何もないところで右クリックし、「作成」→「シェーダー」→「標準サーフェスシェーダー」を選択して新しいシェーダーファイルを作ります。

そうしたらそれをダブルクリックして開き、上記ページに掲載されているソースコードを貼り付けてください。

マテリアルのシェーダーを変更

次に適当なマテリアルに先ほどのシェーダーを適用します(下図)。

マテリアルのシェーダー設定

マテリアルを適用

最後に、先ほどのマテリアルを好きなゲームオブジェクトのメッシュレンダラーに適用します(下図)。

マテリアルの適用


以上で設定が完了しました。先ほどのシーンに適用してみると…

テクスチャの大きさが綺麗にそろった様子

テクスチャの大きさが綺麗にそろいました。これで問題解決ですね!