この記事にはプロモーションが含まれています。

【Blender4.3】Texture Coodinalteとmappingノードについて

blender

Blenderでオブジェクトにマテリアルをつけるとき、ノイズなどテクスチャをつけるときによく使うTexture Coodinateとmappingノードですが、詳細な違いについてよくわかってないのでメモ代わりとして解説記事を書きます。

この記事は、Blenderのマテリアルシェーダーノード:Texture Coodinate, Mappingノードについて書かれた初心者~中級者向けの記事です。

難易度 3.0

スポンサーリンク

Texture CoodinateとMappingノード

Generatedでテクスチャをマッピングした様子

テクスチャや読み込み画像を使うとき、テクスチャノード上でCtrl + Tを押すと、Texture CoodinateMappingノードがセットされます。(このコマンドを使うにはNode Wranglerというアドオンを有効にしてください。)

パターンをオブジェクトにどのように貼り付けるかをこれらのノードで操作することができます。

※これらのノードを使わないときは自動的にGenerated(テクスチャ空間)のマッピングが行われます

Texture Coordinate ノードの役割

「どこ(どの基準)」を使うかを決める

  • オブジェクトの座標系(Generated, Object, UV など)を取得
  • カメラの視点や反射ベクトルなど、特定の座標情報を出力
  • 基本的には「座標データを取得するだけ」で、変換はしない

👉 座標の「元データ」を取得するためのノード

Mapping ノードの役割

「座標をどう変換するか」を決める

  • 取得した座標データを移動(Translate)、回転(Rotate)、拡大縮小(Scale)できる
  • 例えば、テクスチャの位置をずらしたり、回転させたり、大きさを調整したりできる
  • 「Point」「Texture」などの Vector Type によって変換の仕方が変わる

👉 取得した座標を「どう動かすか」を決めるノード

簡単なイメージ

  • Texture Coordinate → 「住所(座標)を取得する」
  • Mapping → 「その住所を移動・回転・拡大縮小する」
スポンサーリンク

Texture Coordinateの出力パラメータ

Texture Coordinateノードは、テクスチャの座標を取得するために使用されるノードで、主にテクスチャノードのVector入力に接続されます。

Texture Coordinateノードには7種類の出力があり、それぞれ異なる座標情報を提供します。どの出力を使うかによって、テクスチャの貼られ方が変わります。

座標情報の種類

  • Generated
  • Normal
  • UV
  • Object
  • Camera
  • Window
  • Reflection

Generated(生成座標)

ぞれぞれのオブジェクトで生成されたTexture Space。planeの場合など高さがないときは2mになる

メッシュの頂点位置から自動生成されるテクスチャ座標。オブジェクトのバウンディングボックス(境界ボックス)内で (0, 0, 0) 〜 (1, 1, 1) に正規化される。オブジェクトがギリギリ入る立方体のような形

これはTexture Spaceといい、Object Data Propertyにパラメータがある(Texture Meshはうまく動作しなかった。古いバージョンでは動くことがある?未確認)

Auto Texture Spaceにチェックが入っていると、編集モードで形を変形させたときにTexture Spaceも形を合わせてくれる

このTexture Spaceを見るにはObject PropertyTexture Spaceにチェックを入れる

例えばグラデーションテクスチャをつなぐと、Texture SpaceのX方向に黒~白のグラデーションができます。

数値の基準点が(0, 0, 0)となり、パターンが端から始まるので、プロシージャルなパターンを作りたいときに、端に0が来てほしいときによく使っています。

アニメーションでの動き

シェイプキーボーンの変形ではバウンディングボックスが変わらないため、パターンが追従してきてくれます。

※applyするなどして確定するとバウンディングボックスが更新され、パターンが変更されます。

UV展開をしなくてもある程度パターンが綺麗に貼れて、アニメーションでも追従してくれるので、手軽に使うことができます。

テクスチャの貼り方

球のような形にテクスチャを貼る

Generatedからのベクターをつなぎ、テクスチャを貼ろうとすると、立方体の6面それぞれから画像を貼り付けたような感じになり、端っこの方が混ざったようになっています。

イメージを使う場合は、Image Textureの貼り方をBoxにしてBlendの数値を上げると、テクスチャの境目をぼかしてミックスし、細かいランダムな画像なら綺麗に貼ることができます。

※Sphereというモードもありますが、拡縮などが大きく歪みます。

イメージ画像を使わず、プロシージャルにテクスチャを貼りたいよという場合は、球の座標を計算して張るということができるようです。

ノードを組んでやってみましたが、形が歪んでますよね。これを歪めずに綺麗に球に貼るには、もうちょっと計算が必要になると思いますが、とりあえず一周させてテクスチャを貼ることはできます。


Normal(法線座標)

オブジェクトの法線の方向を元にテクスチャをマッピングします。

使い道としては左下の図のように、方向によって色を変えたり、マスクを作ったりすることができます。

ライトのテクスチャに使える

ライトのテクスチャに使うときは、Normal出力は、ライトが当たる対象物表面からライトへの法線を計算してくれて、ライトが当たる方向に対応したようにテクスチャを貼ってくれます。(UVでも使えました)


UV(UV座標)

UV展開で作成したUV Mapを使ってイメージやテクスチャをマッピングできます。

複数のUV Mapを作成することもでき、Object Data PropertyUV Mapsの項目や、UV Mapノードで使用するUVを指定することができます。

UVマップを使って、UVスクロールさせてアニメーションを作ることもできます。水、炎、光などのゲームのエフェクトを作ることができます。

原理的には絵を描いて、UVのマッピングを動かして、絵が動いてるように見せてるだけです。

使い方次第でもっと複雑でかっこいいエフェクトが簡単に作れます。

用途:

  • 通常のテクスチャマッピング(画像テクスチャ)に最適。
  • キャラクターのスキン、服、などにテクスチャを正確に配置したいとき。
  • UVマップを作製して活用したい場合。
  • UVスクロールなどでエフェクトなどのアニメーションを作成したいとき

キャラクター作成やオブジェクト作成などで基本的に使用されているマッピング。他のソフトに持っていくときにも互換性があります。

Object(オブジェクト座標)

Object座標はそのオブジェクトの原点を基点としたオブジェクトが持っている空間の座標です。

例えばグラデーションテキストなどでは原点を中心にしてグラデーションが始まるので、真ん中を0で黒として、planeは横2mあるので、真ん中から右端まで1mの距離のところに白(1)がくるようになってます。(数値は正規化されていません)

球状にグラデーションを広げる場合も原点から始まっていて、原点を移動させると中心も移動します。

アニメーション時

シェイプキーやボーンの変換・移動はローカルな変換で、原点の位置を変えないのでテクスチャがついてきません。普通、アニメーション制作のときにはあまり使われないマッピングです。(ボーンなどに追従するやり方もあるようですが複雑になります)

Objectの基点に、他のオブジェクトを指定することもできます。

Empty(エンプティ)を指定すると、エンプティの位置を基準にテクスチャを制御できる。

アニメーション可能で、オブジェクトの動きに合わせてテクスチャを変化させることが可能。

Camera(カメラ座標)

カメラや、ビューポートの視点を基準に、プロジェクションマッピングのようにテクスチャをオブジェクトに貼り付けます。

テレビに映ったスクリーンや、何か画像を物体に投影したいときに使います。

Window(ウィンドウ座標)

ビューポートの画面に合わせて画像が貼られているようなイメージです。

  • 画面(レンダー画像)全体の座標を取得する。
  • 左から右へ 0.0 ~ 1.0、下から上へ 0.0 ~ 1.0 の値を持つ。

画面全体にかけるエフェクトや、画像や動画を貼り付けて利用するときに使う。

Reflection(反射ベクトル)

カメラやビューポートの視点のレイが、オブジェクトに当たったとき、そこから反射したベクトルを取得します。

HDRI画像や環境画像を貼ると、レイトレーシングで反射しなくても、メタリックな反射したマテリアルにすることができます。

実際のレイトレーシング反射は負荷がかかるため、この方が処理が軽く済みます。

用途:

  • 反射マッピング(鏡面反射や水面のエフェクト)に使用。
  • 環境マップを使って金属やガラスの反射をリアルに再現。
  • 反射方向に基づいたエフェクト」(例: 反射を強調したマテリアル)。
スポンサーリンク

MappingノードのVector Typeの違いと使い方

MappingノードのVector Type(ベクタータイプ)には4つの種類があり、それぞれ変換の仕方が異なります。特に「Point」と「Texture」は混乱しやすいので、分かりやすく説明します。

  • Point
  • Texture
  • Vector
  • Normal

Point(ポイント)

基本的な座標変換

よく使われる変換。

Xに+1すると、テクスチャは-1方向に進む

スケールも、数値を大きくすると、テクスチャの密度も2倍になり、小さく細かくなる。

テクスチャが逆に動いているように見えるが、UVマップを動かしているときのように、オブジェクトの座標情報そのものを変換しているから、テクスチャは逆の動きをする。

Texture(テクスチャ)

直感的なテクスチャ変換

  • テクスチャの見た目を直接変換(直感的)。
  • スケールを大きくすると、テクスチャも大きくなる
  • X軸に「+1」移動すると、テクスチャも+X方向に動く(Pointのときとは逆)。

わかりやすい変換なので、テクスチャをフィットさせたいときや、細かい調整をしたいときに使えるかも

Vector(ベクター)

平行移動なしの変換

特徴:

  • Pointと同じ変換をするが、移動(Translate)は適用されない。
  • スケールと回転のみが影響する。

使う場面:

  • 移動は不要だが、スケールや回転だけ適用したいとき。
  • 方向ベクトル(速度、力の向きなど)を変換するとき。

Normal(法線)

法線の変換

  • 法線専用の変換をする。
  • 非一様スケール(例: X方向だけ2倍、Y方向だけ0.5倍など)の影響を正しく処理。
  • 法線を正しく計算するために、変換後の値を「正規化」する(長さを1にする)。

使う場面:

  • バンプマップやノーマルマップを正しく変換したいとき。
  • オブジェクトがスケール変更されても、法線の向きを正しく保ちたいとき。

というようにマニュアルにありますが、ノーマルマップを上の図のように変換してみたんですが、Pointのときも同様な感じでした。違いはよくわからなかったんですが、とりあえず法線を変換したい場合はこれを使っておけばいいのかもしれません。

スポンサーリンク

各座標空間について

Texture coodinateノードを使用するとき、異なる座標空間(World Space、Object Space、Camera Space)などが使われています。その空間について解説している方がいたので、ほぼ訳のような形になってしまうかもしれませんが、紹介と、頑張ってわかりやすく解説してみます。

座標空間の違いについて

  1. World Space(ワールド空間):
    • ワールド空間では、オブジェクトはシーン全体の座標系に対して配置されます。グリッド(X軸、Y軸、Z軸)はワールド座標に対して固定され、オブジェクトの移動もこのグリッドに従って行われます。
  2. Object Space(オブジェクト空間):
    • オブジェクト空間では、オブジェクトの座標系が基準となります。つまり、オブジェクトの位置、回転、スケールが影響します。たとえば、オブジェクトのローカル座標系では、オブジェクト自身の軸に従って移動が行われます。
  3. Camera Space(カメラ空間):
    • カメラ空間では、カメラの視点に基づいて座標系が決まります。この座標系では、カメラの位置と向きが基準となり、オブジェクトの位置はカメラの視点に対してどの位置にあるかを示します。

Transform Orientation(変換オリエンテーション)について

Blenderの3Dビューで、オブジェクトを操作するとき、Transform Orientationのモードを切り替えることで、操作する際の座標系を変更できます。このような概念が、各座標空間の取り扱いの感覚に近いらしいです。

  • Global(グローバル): ワールド座標系に基づく操作。グリッド(赤・緑・青の軸)に合わせてオブジェクトを移動します。
  • Local(ローカル): オブジェクトのローカル座標系に基づく操作。オブジェクト自身の軸に沿って移動します。
  • View(ビュー): 現在のカメラの視点に基づく操作。ビュー方向に沿ってオブジェクトを移動します。

Vector Transformノードの役割

Vector Transformノードは、上記の異なる座標空間間でベクトルを変換するために使用されます。このノードを使用すると、例えばオブジェクト座標系のベクトルをワールド座標系に変換したり、その逆を行うことができます。

Vector Transformノードには、「Point」「Vector」「Normal」の3つのモードがあります。それぞれのモードは異なるタイプのベクトルを処理するために使用されます。

Vector Transformノードの「モード」について

Point(ポイント):ベクトルが空間内の位置を表す場合に使用します。オブジェクトの位置、スケール、回転などが考慮されます。

Vector(ベクトル):ベクトルが位置とは関係ない方向のみを表す場合に使用します。この場合、オブジェクトの位置は無視されますが、回転とスケールは適用されます。

Normal(法線):法線ベクトルの場合、オブジェクトの位置もスケールも無視されます。法線の向きだけを変換します。

上の空間座標選択: 変換元の空間

下の空間座標選択: 変換先の空間

Vector入力: 変換元のベクトル

Vector出力: 変換先のベクトル

World空間座標 → Object空間座標: Geometry nodeのPosition出力はワールド座標なので、その位置をオブジェクト座標系に変換します。

Object空間座標 → World空間座標: オブジェクト座標系での位置を、ワールド座標系に変換します。

Object空間座標をWorld空間座標とする → Object空間座標: オブジェクト座標で回転がかかった座標を、ワールド座標として設定し、それをオブジェクト座標系に変換します。オブジェクトにはまた回転がかかっているので二倍の回転がかかったような座標が出力されています。

Object空間座標 → Camera 空間座標: オブジェクト座標系の位置をカメラ座標系に変換します。

実際の使用例

オブジェクト間の距離を計算:

  • たとえば、2つのオブジェクト間の距離を計算する場合、ワールド座標系でオブジェクトの位置を取得し、オブジェクト座標系に変換して距離を求めることができます。(一番下の図)

一番上はドライバーで小さい球のワールド座標を出し、キューブのワールド座標との距離を出しています

二番目はTexture CoodinateノードでObjectに小さい球を選択し、オブジェクト空間での距離を直接出しています。

  1. カメラ空間での影響:
    • カメラ空間でオブジェクトがどの位置にあるかを基にして、視覚効果(たとえば、カメラの前にあるオブジェクトが透過する)を作成することができます。(参考リンク先のものを試してみましたがうまくいきませんでした。)
  2. トゥーンシェーダー:
    • オブジェクトの法線をカメラ空間に変換し、カメラとの角度を基にシェーディングを行うことで、トゥーンシェーダーを作成できます。(試していませんが、髪の光沢などで使ったことがあるので、光や色の動きや見え方を調節できます。)