3DCG演習/2022?|2022.07.26 -
オブジェクトの表面に使用される画像やパターンのことをテクスチュアと言い、3次元データの頂点と画像の位置を調整して表面に貼り付ける操作をテクスチャマッピングと言います。Blenderではこの設定を、シェーダーエディタ、テクスチュアノードエディタ、UVエディタ等を使って行います。
3次元物体の頂点を( x, y, z )という変数によって表すのに対し、2次元のテクスチュア画像の位置情報は( u, v )という変数によって表します。
なお、原点を左上とするか左下とするかは、ソフトウエアによって異なりますが、Blenderでは左下を原点( 0, 0 )とし、右上を(1.0 , 1.0) とする形で画像内の座標を表現します。
マテリアルの設定と同様、テクスチュアの設定でも Shadingワークスペースを使うのが効率的です。TopBar の ワークスペース選択から Shading を選択すると Shader Editor を含むワークスペースが表示されます。
新規のオブジェクトは、マテリアル、テクスチュアの情報を持っていません。オブジェクトにテクスチュアを貼るには、オブジェクトがマテリアルを持っていることを前提として、その階層下にテクスチュアデータをリンクする必要があります。まずは、以下のようにして新規のマテリアルを用意してください。
ShaderEditor > Header > マテリアルの [New] をクリック
Principled BSDF ノードが表示されていれば準備OKです。
練習用に以下の2つの画像を使います。ダウンロードして準備して下さい。
物体の表面にレンガやコンクリートの表面の画像を単純に投影する方法を紹介します。頭部のモデルに顔画像を貼るような詳細な作業ではなく、2次元の画像を3次元の物体にざっくり投影するもので、以下のような方法があります。
右図のようなテクスチュアを貼ってみます。事前に準備した画像を利用して下さい。このような画像は、以下のように検索するとフリー素材が多数見つかります。
Google:テクスチャ コンクリート フリー素材
作業は、ShaderEditor(NodeEditor)上に必要なノードを追加するとともに、これらを正しくソケット接続することが必要です(右図)。以下、その手順です。
ShaderEditor > Header > Add > Input > TextureCoordinateNode
ShaderEditor > Header > Add > Texture > ImageTexture ImageTexture パネルで画像ファイルを選択 投影法は Box
TextureCoordinateNode の Generated → ImageTextureNode の Vectorメッシュの頂点位置から自動生成されたテクスチャ座標が渡されます。
ImageTextureNode の color → PrincipledBSDF Node の BaseColor
以上で、3D View に表示されているオブジェクトの色がテクスチュア画像によって変わることが確認できると思います(3D Viewの表示モードが、Material Preview あるいは Render Preview モードになっていることが必要です)。
実際的なテクスチュアマッピングでは、構造物の特定部分に当該素材の画像を貼る、顔面形状に顔の画像を貼るなど、画像と頂点との対応を正確に決めなくてはなりません。そのような場合は オブジェクトの展開図をUV画像に重ねて、UV座標上で、各頂点の位置を対応付けします。
立方体の6つの面にサイコロの1から6の面を対応させることを前提に、右のような画像を用意します。状態が見やすくなるよう右図には境界線が入っていますが、実際には邪魔になるので、練習の際は事前に準備した PNG画像を利用して下さい。
Blender のメッシュオブジェクトは、デフォルトで展開図情報を持っています。
以下のようにして確認してみて下さい。
右側の3D Viewport Editor が Edit モードになると同時に、左側の UV Editor に展開図が表示されるはずです。
UV Editing ワークスペースの左側、UV Editor で画像と展開図を重ねて表示して位置調整します。UV Editing ワークスペースに展開図が表示されていない場合は、オブジェクトを再度選択して、EditMode に入り直して下さい。EditModeで頂点がすべて選択されていれば、展開図が表示されるはずです。
以下のようにすると、画像がUV Editor 上に表示されます。
Header > 画像選択(または Open) > 対象となる UV画像を選択します。
UV Editor の中で、画像と頂点の対応付けを行います。モデリングの操作が2Dになるだけで、頂点の移動・回転・拡縮は、[ G ] , [ R ], [ S ] で行うことができます。
対応付けを行なった結果は右図のようになります。
作業は、ShaderEditor(NodeEditor)上で行います。これを適正に行うには、NodeEditor 上に いくつかのノードを追加するとともに、これらを正しい順序でソケット接続することが必要です(右図)。以下、その手順です。
ShaderEditor > Header > Add > Input > TextureCoordinateNode
ShaderEditor > Header > Add > Texture > ImageTexture ImageTexture パネルの Open をクリックして UV画像ファイルを選択
TextureCoordinateNode の UV → ImageTextureNode の VectorアクティブなレンダーUVマップからのUVテクスチャ座標が渡されます。アクティブなマップ以外のUVマップ情報を利用する場合は UV Map node を使用する必要があります。
ImageTextureNode の color → PrincipledBSDF Node の BaseColor
以上で、UVマッピングの結果が確認できると思います。。
Worldは、単一の色から物理的な空のモデル、任意のテクスチャまで、様々な環境光の放射をシミュレーションすることができます。特に環境テクスチュアを使った Image Based Lighting (イメージベースドライティング)を使用すると、光源オブジェクトを使用せずにシーン全体を照らすことができ、シーン内のオブジェクトへの環境の映り込みを含めて、自然なライティングが実現します。
環境テクスチュアを使ってワールドの設定を行うには、マテリアル、テクスチュアの設定同様、PropertyEditor から設定する方法と、ShaderEditor で設定する方法がありますが、ここでは ShaderEditor を使う方法で説明します。
デフォルトのグレーの背景色を単純に変更する方法です。
ShaderEditor > Header > World を選択 > Background パネルの Color の部分で色を選択
World に環境テクスチュアを設定すると、Image Based Lighting(IBL)が実現します。これを実現するには、環境の Background に Environment Texture をリンクします。Environment Textureノードは、Equirectangular(正距円筒図法)およびミラーボール状の画像をマッピングする Mirror Ball(ミラーボール) を環境マップとしてサポートしています。
ShaderEditor > Header > World を選択 Add > Texture > EnvironmentTexture > 画像を読み込み EnvironmentTexture の出力 Color を Background の入力 Color に接続
ShaderEditor > Header > World を選択 Add > input > TextureCoordinate Add > vector > Mapping TextureCoordinate の出力 Generated を Mapping の入力 Vector に接続 Mapping の出力 Vector を EnvironmentTexture の入力 Vector に接続 Mapping の Rotation:Z の値を変更
PropertyEditor >Render Property タブ Film パネルの Transparent(透過) にチェックレンダリング結果を PNG 形式で保存すれば、背景部分を透明にした画像として、他のソフトで簡単に背景を合成できます。
PropertyEditor >World Property タブ Ray Visibility パネルで、Camera のチェックを外すこれで、環境画像そのもには背景には表示されなくなります。