前の記事「Blenderのマテリアルノードの基礎とガラスの作り方」で、マテリアルノードでガラスを作りました。この記事では、コーヒーカップの下に木のテーブルを作りながら、画像を使って質感を作る「テクスチャ」を解説します。
テクスチャでよくあるつまずきは「木目の画像を貼ったのに、木に見えない」ことです。その原因もあわせて説明します。
※この記事はBlender 5.2 LTSで確認しています。レンダーエンジンは初期設定の「EEVEE」を使います。
テクスチャは「画像を表面に貼る」こと
Blenderでは、物の色やつやを数値で設定できます。ベースカラーで色を選び、粗さの数値でつやを調整します。この方法で木のテーブルを作ろうとすると、木の色にはなっても、木目は出ません。
数値で色やつやを決めるだけでは、表面全体が同じ見た目になります。ただ、現実の木の表面は均一ではなく、場所によって色の濃さや光り方が違います。それをひとつの数値だけで表すことはできません。
木のテーブルを本物らしく見せるには
これから作る木のテーブルが本物らしく見えるかどうかは、光の当たり方・形・表面の質感の3つで決まります。光の当たり方は、前の記事で環境画像(HDRI)を設定しました。形は、平らな板1枚なので、そのままで問題ありません。
残っているのは表面の質感です。その質感を表現するために使うのが、テクスチャです。
テクスチャ画像をダウンロードする
まず、テクスチャ画像を用意します。今回は、前の記事で環境画像をダウンロードしたPoly Havenから、木目の画像を探します。
Poly Havenの素材はCC0というライセンスで公開されています。CC0は、クレジット表記が不要で商用利用もできる無料のライセンスです。
素材サイトはほかにもありますが、無料で配布されている素材でも、自由に使えるとは限りません。個人利用に限られていたり、クレジット表記が必要だったりする場合があります。ライセンスの表示を見て、CC0と書かれていれば、用途を気にせず使えます。
木目の素材を探す
検索欄にwood tableと入れると、木のテーブルの素材が並びます。この記事では「Wood Table Worn」(使い込まれた木のテーブル)を使いますが、好きなものを選んで構いません。
ダウンロードするものを選ぶ
Poly Havenは、ダウンロードする前にZIPの中身を選べます。ダウンロードボタンの中央にあるアイコンをクリックすると、ファイル形式のメニューが開きます。「ZIP」を選ぶと、Choose ZIP contents:という一覧が表示されます。
初期状態では、Blenderファイルや使わない画像にもチェックが入っています。今回は、次の3つだけにします。
| 選ぶもの | 形式 | 何の画像か |
|---|---|---|
| Diffuse | JPG | 色 |
| Normal (GL) | EXR | 凹凸 |
| Rough | EXR | 光り方 |
解像度は1Kにします。ほかの行のチェックは、BlendやGltfも含めてすべて外します。
Blendにチェックを入れると、ノードが最初からつながったBlenderファイルがダウンロードできます。ただ、この記事ではノードを自分でつなぐので、必要ありません。
ダウンロードしたzipファイルを展開すると、texturesというフォルダの中に3つの画像が入っています。
ファイル名のdiffが色、nor_glが凹凸、roughが光り方です。diffは「ディフューズ」の略ですが、あとでつなぐ先は「ベースカラー」という名前になります。素材サイト側とBlender側で呼び方が違うだけで、指しているものは同じです。
nor_glとroughの2つは、EXRという見慣れない拡張子ですが、Blenderはそのまま読み込めます。
テーブルを作って、画像を1枚貼る
ダウンロードした3枚のうち、色の画像を貼ります。
平面を置く
画面上部のタブを「Layout」にして、Shift + Aから「メッシュ」→「平面」を追加します。前の記事から続けている方はそのファイルに、この記事から読み始めている方は立方体などを置いた新規ファイルに追加してください。
Sで拡大して、テーブルに見えるくらいの大きさにします。画像ではスケールを5倍にしています。
続けて、Ctrl + A→「全トランスフォーム」を選びます。オブジェクトの大きさを確定させるための操作です。前の記事でも、グラスに厚みをつける前に同じことをしました。
画像をつなぐ
画面上部のタブを「Shading」に切り替えます。前の記事で使ったシェーダーエディターが開きます。
平面にはまだマテリアルがないので、「新規」をクリックしてマテリアルを作成します。プリンシプルBSDFとマテリアル出力の2つのノードが、自動で置かれます。
Shift + Aから「テクスチャ」→「画像テクスチャ」を追加します。
ノードの中にある「開く」をクリックして、ダウンロードしたwood_table_worn_diff_1kを読み込みます。
読み込んだら、画像テクスチャの「カラー」を、プリンシプルBSDFの「ベースカラー」につなぎます。前の記事でノードをつないだのと同じやり方です。丸をクリックしてドラッグし、つなぎ先の丸でドロップします。
木目が表示されました。
位置を指定していないのに、なぜ貼れたのか
画像を貼る位置も大きさも指定していません。それなのに、模様は板の上にきちんと並んでいます。
これは、平面に最初から「UV」という情報が用意されているからです。UVは、画像を物の表面のどこに置くかを決める情報で、平面や立方体のような基本の形にはあらかじめ設定されています。
テクスチャ座標ノードをつながないと表示されない、と思われがちですが、基本の形なら、つながなくても画像は表示されます。テクスチャ座標が必要になるのは、模様の大きさや向きを調整したいときです。
ベースカラー1枚では「写真を貼った板」
木目は表示されました。近づいて見てみます。
表面全体が同じようにつるりと光っていて、平らです。木目の模様はあるのに、木には見えません。写真を貼った板、という状態です。
ここから、あと2枚の画像を重ねます。
ラフネスとノーマルを重ねる
残りの2枚をつないでいきます。
この記事で「ラフネス」と書いているのは、Blenderの画面にある「粗さ」のことです。英語ではRoughnessといい、カタカナで呼ばれることもあります。
色を表す画像と、数値を表す画像
すでに貼ったdiffは、木目を目で見るための画像でした。これから読み込む2枚は違います。
roughは「この場所はどれくらい光るか」という数値が、明るさとして記録されていますnor_glは「この場所はどちらを向いているか」という向きが、RGBの3つの数値として記録されています
画像に見えますが、中身は数字です。そのためBlenderに「これは色ではありません」と伝える必要があります。それが「色空間」の設定です。色を表す画像はsRGBのまま、数値を表す画像は「非カラー」にします。
数値の画像をsRGBのままにすると、Blenderが色として補正するため、記録されていた数値が変わり、質感がおかしくなります。
ラフネスをつなぐ
Shift + Aから「テクスチャ」→「画像テクスチャ」を追加し、wood_table_worn_rough_1kを読み込みます。
読み込んだら、ノードの中にある「色空間」を「非カラー」に変えます。
ドロップダウンを開くと、上のほうに「▶」のついた項目がいくつか並んでいます。それらは開かずに、リストの下のほうにある「非カラー」を選びます。
そのうえで、画像テクスチャの「カラー」を、プリンシプルBSDFの「粗さ」につなぎます。
見た目が変わりました。
さっきまで全体が同じように光っていたのが、場所によって光り方が変わりました。塗装が残っているところはつやがあり、擦れて木が出ているところはつやが消えています。
ベースカラーが「何色か」を決めるものだとすれば、ラフネスは「どう光るか」を決めるものです。
ノーマルをつなぐ
最後の1枚です。Shift + Aから「テクスチャ」→「画像テクスチャ」を追加し、wood_table_worn_nor_gl_1kを読み込みます。色空間を「非カラー」にするのはラフネスと同じです。
ただし、この画像だけは直接つなぎません。間にノードを1つ挟みます。
Shift + Aから「ディスプレイスメント」→「ノーマルマップ」を追加して、次の順につなぎます。
- 画像テクスチャの「カラー」 → ノーマルマップの「カラー」
- ノーマルマップの「ノーマル」 → プリンシプルBSDFの「ノーマル」
木目の溝や繊維に、光と影が出るようになりました。
この画像だけノードを挟むのは、ノーマルマップノードが、RGBの数値を「向き」として読み直しているからです。挟まないと、Blenderはその数値を色として受け取ります。このとき、エラーは出ませんが、何も起こりません。
変化が分かりにくいときは、ノーマルマップノードの「強さ」の数値を上げると、はっきりします。この記事の画像では3.0にしています。
ただし、凹凸に見えているだけで、形は変わっていません。横から見ると、板は平らなままです。
3枚を重ねた結果
足したのは画像2枚だけです。それでも、最初の「写真を貼った板」とは違うものになりました。
ベースカラーの画像は、最初から最後まで同じものを使っています。変わったのは、その表面が光をどう反射するかです。木らしく見えるかどうかは、画像そのものより、光の反射の仕方で決まります。
うまくいかなくなったら
画像が3枚になると、どれをどこにつなぐのか迷うこともあります。たとえば、ラフネス用の画像をベースカラーにつないでしまう、といった間違いです。
そんなときは、ベースカラー1枚だけの状態に戻します。ラフネスとノーマルの線を外せば、テーブルを作って、画像を1枚貼るで作った状態に戻ります。そこから1枚ずつつなぎ直せば、どこで間違えたかが分かります。
模様の大きさと向きを調整する
木目は貼れましたが、模様の大きさはまだ調整していません。いまの状態では、木の板1枚分の幅が実物より広く見えます。ここを調整します。
UVは、透明な方眼紙のようなもの
物の表面に、0から1までの目盛りがついた透明な方眼紙が貼ってあると考えてください。UVは、その方眼紙のどの位置に画像のどの部分を置くかを決める情報です。平面には最初からUVが用意されているため、何も設定しなくても木目がきれいに並びました。
- テクスチャ座標は、画像を貼る位置の基準を選ぶノードです。UVはその選択肢の1つです
- マッピングは、そのUVを動かしたり、回したり、伸び縮みさせたりするノードです
UVを動かせば、画像の見え方が変わります。変えているのは画像そのものではなく、貼り方です。
テクスチャ座標とマッピングをつなぐ
Shift + Aから「入力」→「テクスチャ座標」と、「ユーティリティ」→「ベクトル」→「マッピング」を追加します。
つなぐ順番は次のとおりです。
- テクスチャ座標の「UV」 → マッピングの「ベクトル」
- マッピングの「ベクトル」 → 画像テクスチャの「ベクトル」
テクスチャ座標には出口が7つ並んでいます。使うのは上から3番目の「UV」です。いちばん上にある「生成」でも画像は貼れてしまいますが、見え方が変わります。
数値を大きくすると、模様は小さくなる
マッピングの「スケール」のXとYを4.0にしてみます。
模様が小さくなり、繰り返しが増えました。数値を大きくしたのに、画像は小さくなります。
動かしているのが画像ではなく、UVのほうだからです。UVを4倍に引き伸ばすと、その上に並ぶ画像は相対的に小さくなり、板の上に何度も繰り返されます。
大きさの決め方
数値をいくつにすればいいのか迷ったときは、木目の細かさを見て決めます。
数値が小さいと木目が引き伸ばされ、板が実際より大きいように見えます。逆に数値を上げすぎると木目が細かくなり、木というより布地のように見えてきます。置いてあるカップと見比べて、木目がそれらしい細かさに見えるところで止めます。
マッピングでは大きさ以外も調整できます。「位置」を変えれば模様の位置がずれ、「回転」のZを90にすれば木目の向きが変わります。
UV展開が必要になるのは、どんなときか
ここまで、UVを動かしながら模様を調整してきました。一方で、テクスチャの解説によく出てくる「UV展開」は、まだ一度もしていません。UV展開とは、このUVを自分で作り直す作業のことです。
木目や石のように、表面に模様を付けるだけなら、UV展開を知らなくても困りません。UV展開が必要になるのは、画像のどの部分を、物のどこに置くかを決めたいときです。
たとえば、缶のラベル、Tシャツのプリント、キャラクターの顔などです。「この絵を、ここに置きたい」という位置が決まっている場合に、UV展開を使います。
形によって、UV展開が必要かどうかは変わる
| 形 | 模様を貼る | 絵柄を置く |
|---|---|---|
| 平面 | できる | UV展開が必要 |
| 立方体 | できる | UV展開が必要 |
| 円柱・球 | だいたいできる | UV展開が必要 |
| キャラクター | UV展開が必要 | UV展開が必要 |
円柱と球だけ「だいたいできる」としたのは、貼れる場所と無理が出る場所があるからです。球にこの記事と同じ木目を貼ると、こうなります。
側面はきれいに貼れています。潰れているのはてっぺんと底だけで、そこに向かって模様が渦を巻くように集まっています。「球には貼れない」わけではなく、無理が出るのは上下の2点だけです。
縦横の比率を変えると、模様が伸びる
平面でも、縦横の比率を大きく変えると模様が伸びます。
このとき、画面の左下に「アクティブオブジェクトに非均一なスケールがあります」と表示されます。この表示が出たら、縦・横・高さを同じ倍率で拡大・縮小していないということです。
ただし、この表示を消しても模様は直りません。
Ctrl + A→「全トランスフォーム」を実行すると、スケールの数値は1に戻り、表示も消えますが、模様は伸びたままです。
これは、スケールを適用してもUVの形は変わらないためです。すでにUVが伸びてしまっているので、UVを作り直さないかぎり、木目の伸びは直りません。
UVを作り直す方法は、次の記事で解説します。
なお、模様が伸びる理由は1つではありません。UVがない、UVが歪んでいる、別のUVが使われている、オブジェクトの大きさが確定していない、といった原因があります。
そのため、模様が伸びたときは、UV展開の前に原因を順番に確かめます。
うまくいかないときのチェックリスト
画像を貼ったのに表示されない、真っ黒になるときは、次の5つを上から確認してみてください。
- ダウンロードした画像が3枚あるか。
texturesフォルダを開いて確認します。選び方によっては画像が入っていないことがあります - 表示モードがソリッドになっていないか。3Dビュー右上の4つの丸いアイコンで、右から2番目(マテリアルプレビュー)以降に切り替えます
- 画像テクスチャの「カラー」とプリンシプルBSDFの「ベースカラー」がつながっているか。線が外れていないか見ます
- 画像そのものが開けるか。ノード上のファイル名が赤くなっていたら、画像が見つかっていません
- それでも黒いままなら、面の向きを疑います。オーバーレイの「面の向き」を有効にすると、正常な面は青、裏返っている面は赤で表示されます
マテリアルプレビューでは見えるのに、レンダーにすると黒い場合は、光が足りていません。前の記事で読み込んだ環境画像を確認してください。
素材に画像が足りないときは、補足コラム「もう1つの素材サイトと、無料の見分け方」へ
次にやること
この記事では、3枚の画像を重ねて木の質感を作りました。
覚えることが多いと感じたら、次の5つを押さえておけば質感は作れます。
- テクスチャは、模様を画像として物の表面に貼る機能
- ベースカラー1枚だけでは、写真を貼った板にしかならない
- ラフネスが「どう光るか」、ノーマルが「どちらを向いているか」を決める
- ラフネスとノーマルの画像は、色空間を「非カラー」にする
- 模様の大きさを変えるときは、テクスチャ座標とマッピングを使う
次は、「この絵を、ここに置きたい」を実現するUV展開です。缶のラベルやキャラクターの顔のように、位置が決まっている絵を貼るときに必要になります。この記事で直せなかった模様の伸びも、そこで解決します。
よくある質問
Q. ダウンロードした素材に画像がたくさん入っていますが、全部使わないといけませんか?
A. いいえ。この記事で使うのは3枚だけです。素材によって入っている画像の種類は違います。Poly Havenの場合は、ダウンロードする前に必要なものだけを選べます。他のサイトでは選べないこともあり、その場合は使わない画像が一緒に入ってきますが、それで問題ありません。素材サイトごとの違いは、補足コラム「もう1つの素材サイトと、無料の見分け方」へ。
Q. ラフネスやノーマルの画像を「非カラー」にしないとどうなりますか?
A. 質感がおかしくなります。これらの画像には、明るさやRGBの数値として情報が記録されています。sRGBのままにすると、Blenderが色として補正してしまい、記録されていた数値が変わってしまいます。見た目には気づきにくい変化なので、つないだ時点で色空間を確認する習慣をつけると確実です。
Q. NormalGLとNormalDXの2つがあるのはなぜですか?
A. 凹凸の向きの記録方法に、2つの規格があるためです。Blenderが使うのはNormalGLのほうで、DXを使うと凹んで見えるべきところが出っ張って見えます。ノーマルマップノードにも「OpenGL」を選ぶ欄があり、DXしか手に入らない素材の場合は、この欄を切り替えれば対応できます。Poly HavenではNormal (DX)も配布されていますが、初期状態ではチェックが外れています。
Q. テクスチャが伸びるのは、UV展開をしていないからですか?
A. そうとは限りません。原因は4つあり、UV展開が必要なのはそのうちの一部です。Ctrl + A→「全トランスフォーム」で直ると思われがちですが、すでに伸びてしまった模様はこれでは直りません。詳しくは「UV展開が必要になるのは、どんなときか」で解説しています。
Q. ノーマルマップをつないだのに、凹凸が出ません。
A. 3つの可能性があります。1つめは、ノーマルマップノードを挟んでいないことです。画像から直接プリンシプルBSDFの「ノーマル」につなぐと、エラーは出ませんが何も起こりません。つながっているのに効かないので気づきにくいところです。2つめは色空間が「非カラー」になっていないこと、3つめは効果が小さくて見えていないことで、ノーマルマップノードの「強さ」の数値を上げると確認できます。
Q. ファイルを別のパソコンで開いたら、テクスチャが消えました。
A. Blenderファイルには、画像そのものは保存されていません。画像がどこにあるかという場所だけが記録されているため、ファイルだけを移すと画像が見つからなくなります。まずファイル→外部データ→パスが壊れているファイルの報告で、どの画像が見つかっていないかを確認できます。解決するには、同じメニューのリソースをパックを選びます。画像をBlenderファイルの中に入れてしまう機能で、これでファイル1つだけを持ち歩けます。画像を別の場所に移してしまった場合は、欠けたファイルを検索...で移動先のフォルダを指定すれば、つなぎ直せます。
Q. 写真を使わずに模様を作ることはできますか?
A. できます。ノイズテクスチャなどを使って、Blenderの中で模様を計算して作る方法があり、プロシージャルテクスチャと呼ばれます。画像を用意しなくていいこと、どれだけ拡大しても粗くならないことが利点です。一方で、写真のような現実感を出すのは難しくなります。木目や布地のように実物の写真がある素材なら、この記事のやり方のほうが早くリアルに見せられます。なお、自分で手で模様を描く「テクスチャペイント」という機能もありますが、この記事で解説するのは、配布されているテクスチャ画像を貼る方法です。
補足コラム
もう1つの素材サイトと、無料の見分け方
Poly Havenで欲しい素材が見つからないときは、ambientCGもあります。こちらはテクスチャ素材が豊富なので、木や石、布などの質感を探したいときに便利です。
ambientCGは、ファイル名が分かりやすいのも特徴です。Color・Roughness・NormalGLとそのまま書かれているので、どの画像を使えばいいのか迷いにくくなっています。Poly Havenではdiff・rough・nor_glと略されていますが、順にベースカラー・ラフネス・ノーマルのことです。
ダウンロードする画像の形式も選べます。JPGを選べば、EXRのような見慣れない拡張子を扱わずに進められます。
注意が2つあります。
NormalDXとNormalGLの両方が入っています。Blenderで使うのはNormalGLのほうです- 使わないファイルも一緒に入っています。必要なものだけを使えば問題ありません
「無料」の意味はサイトによって違う
素材サイトを見ていると、さまざまな利用条件があります。
- 「Free」と書かれていても、CC0とは限りません
- 無料でも、個人利用に限られているサイトがあります
- クレジット表記が必要なサイトもあります
判断の基準は「CC0」と明記されているかどうかです。CC0なら、クレジット表記も不要で、商用利用もできます。
素材によって入っている画像は違う
PBR素材と呼ばれるものは、素材によって入っている画像の種類が違います。5種類入っているものもあれば、3種類しかないものもあります。
これはサイト側の違いではなく、素材ごとに必要な画像が異なるためです。つやの少ない素材では、ラフネス用の画像が含まれていないこともあります。必要な画像がない場合は、プリンシプルBSDFの数値で調整できます。
3枚の画像を一度につなぐ方法
この記事では、3枚の画像を1枚ずつ読み込み、必要なものは色空間を変更して、ノードをつなぎました。
この一連の作業を、まとめて設定してくれる機能があります。「Node Wrangler」というBlenderに最初から入っている拡張機能です。プリンシプルBSDFを選んでCtrl + Shift + Tを押し、使う画像をまとめて選ぶと、ノードが自動でつながります。色空間の設定や、ノーマルマップノードの追加も自動で行われます。
ただし、使うには有効にする必要があります。編集→プリファレンス→アドオンを開き、Node Wranglerを検索してチェックを入れます。別途インストールする必要はありません。
便利な機能ですが、この記事では先に、ノードを1つずつつなぐ方法を説明しました。一度自分で組んでおくと、うまくいかないときに、どこに原因があるのかを確かめやすくなるからです。