TexToolsアドオンを使用する(ベイク編)
はじめに
これはBlender Advent Calendar 2018の記事でした。
(※当日に公開できず申し訳ありません。そしてまだ途中ですが、公開しようと思います。)
Blenderには、renderhjs氏が開発したUV展開やテクスチャのベイクを効率よく行える『TexTools』という無料のアドオンがあります。
Blender標準のベイク機能もありますが、BlenderレンダーとCyclesレンダーでベイクする工程が異なることや、ベイクしたテクスチャの保存先となる新規画像を作成するなどいくつかの工程があり、慣れるまで少し面倒です。
TexToolsアドオンのベイク機能を使用すると、UV展開したオブジェクトを選択して[Bake]ボタンを押すだけでベイクすることができます。
本記事では、TexToolsアドオンのベイク機能を、髪の毛のテクスチャをベイクする工程を元にご紹介したいと思います。
また、誤字や間違いなどがございましたら、修正したいと思いますので教えて頂けますと幸いです。
この記事の対象とする方
- TexToolsアドオンのベイク機能を試してみたい方
- モデリング、UV展開、テクスチャやマテリアルの設定、アドオンのインストールなど、一通りBlenderの操作を行える方
- 「ベイク」、「ノーマルマップ」といった用語をなんとなく理解してる方
使用環境
下記を使用して解説を行います。
Blenderのバージョン
- Blender 2.79b
※インターフェースとツールチップの言語を日本語に変更しています。
Blenderのアドオン
- TexTools 1.3.0
下記URLより、TexToolsアドオンのバージョン「1.3.0」をダウンロードし、Blenderにインストールしてください。
『TexTools』
http://renderhjs.net/textools/blender/
用語の定義
以下は、本記事の説明のために定義した用語となります。
ハイモデルとローモデル
本記事では、テクスチャのベイク元に指定するモデルを「ハイモデル」、ベイク先に指定するモデルを「ローモデル」と定義します。
Blenderでテクスチャをベイクする場合、ベイク元やベイク先に指定するオブジェクトのポリゴン数に制限がありません。
例えば、ハイモデルとローモデルのオブジェクトが同じポリゴン数であったり、ハイモデルの方がポリゴン数が少なくてもベイク機能を利用することができます。
ですので、「ハイポリ」「ローポリ」といった名称は使用しないこととしました。
※そのほか、本文中に専門用語を使用している箇所がありますが、素人が下手に解説するよりも身近な詳しい方に教えて頂くか、ご自分で検索して頂いた方が良いと思いますので解説はいたしません。
サンプルデータについて
下記のURLにサンプルデータを用意しましたので、ご利用になる場合はダウンロードしてください。
また、ダウンロードしファイルを利用した時点で、後述する「利用規約」に同意したものといたします。
- [可視レイヤー1]にハイモデル、[可視レイヤー2]にローモデルのオブジェクトをそれぞれ配置してあります。
- 予め、ローモデルはハイモデルの形状に沿うようにモデリングし、UV展開も行ってあります。
TexToolsアドオンを使用して髪の毛のテクスチャをベイクする
ここでは、TexToolsアドオンを使用して「ノーマルマップ」と「IDマップ」、そしてTexTools独自の「ペイントベース」の3つをベイクする方法を紹介します。
ノーマルマップは、疑似的な凹凸を表現することができるテクスチャです。
IDマップは、主にテクスチャの領域を塗り分けるために使用するテクスチャです。
例えば、ジャンバーなどの洋服でジッパーの金属部分と服の布の部分で材質が異なる場合、金属の部分と布の部分の別の色を指定し、ハイモデルからIDマップをベイクすることで、領域を塗り分けるためのテクスチャを作成できます。
ペイントベースは、TexTools独自のモデルの形状から陰影情報を取得したテクスチャです。手軽に濃淡のついたテクスチャを作成できるので、ベースカラー等の土台として活用できそうです。
目次
-
- ハイモデルからローモデルにノーマルマップをベイクする
-
- IDマップをベイクする
-
- ペイントベースをベイクする
1. ハイモデルからローモデルにノーマルマップをベイクする
ハイモデルからローモデルにノーマルマップをベイクしましょう。
初めにノーマルマップを基準にベイクの調整を行います。
ノーマルマップが綺麗にベイクできていれば、他のマップでのベイクの調整はほぼ必要なくなるからです。
ハイモデル、ローモデルの準備
サンプルファイル「」には、[可視レイヤー1]にベイク元となるハイモデル(ポリゴン数〜)、[可視レイヤー2]にベイク先となるローモデル(ポリゴン数〜)のオブジェクトをそれぞれ配置してあります。
(画像)
ベイクするときには、ハイモデルとローモデルの両方オブジェクトを表示して選択する必要があるため、[可視レイヤー1]と[可視レイヤー2]を表示しておきます。
(画像)
モデルの形状とUV展開について
ローモデルはハイモデルの形状に沿うようにモデリングし、下記画像のようにUV展開を行ってあります。
(画像)
オブジェクトの名称変更
TexToolsアドオンでは、ハイモデルからローモデルにベイクする場合、それぞれが関連するオブジェクトであることを定義するために「共通の名称」を、ローモデルとハイモデルであることを定義するために「キーワード」を設定する必要があります。
具体的にはこのように
■名称の基本形
共通の名称 + 区切り文字 + ハイモデル又はローモデルのキーワード
■共通の名称を「hair」にした場合
ハイモデルの例
「hair_highpoly」「hair_high」「hair_hp」hair_h」
ローモデルの例
「hair_lowpoly」「hair_low」「hair_lp」hair_l」
※名称とキーワードの区切り文字には「_(アンダースコア)」の他に「.(ピリオド)」も使用できます。
サンプルファイル「」には、前髪と後ろ髪のそれぞれにローモデルとハイモデルを用意し、下記画像のように名称をつけてあります。
(画像)
ベイクする
TexToolsのベイク機能を試してみましょう。
使用するハイモデルとローモデルを選択します。
ここでは、4つのオブジェクトを選択します。
(画像)
Blender標準のベイク機能では、選択済みオブジェクトをベイク元、アクティブなオブジェクトをベイク先と判別していましたが、TexToolsでは名称でハイモデル(ベイク元)とローモデル(ベイク先)を定義してあるため、選択する順番やどのオブジェクトがアクティブかどうかは関係ありません。
TexToolsアドオンをインストールすると[UV/画像エディター]の[ツールシェルフ]に追加されます。
[UV/画像エディター]で、[ツールシェルフ]の[TexTools]タブにある[Baking]パネルを開きます。
(画像)
(画像)
[Bake Mode]から[Tangent Nomal]を選択します。
[Bake 2x]ボタンをクリックします。
(画像)
ノーマルマップがベイクできました。
このように、Textoolsを使用すると簡単にテクスチャをベイクすることができます。
(画像)
ですが、ベイクしたノーマルマップを見ると、いくつか潰れたようなベイクに失敗している箇所もあります。
(画像)
このままでは使用できるテクスチャとはいえませんので、いくつかの項目を設定していきましょう。
ベイクするテクスチャのサイズを変更する
ベイクするテクスチャのサイズを変更しましょう。
ベイクするテクスチャのサイズを変更する方法は2種類あります。
[サイズ:]の右にあるプルダウンメニューから選択する方法と、[X]ボックスと[Y]ボックスに直接数値を入力する方法です。
テクスチャのサイズは、Photoshopなどの画像編集エディタなどで縮小して書き出しすることを想定して、使用する予定の倍のサイズを指定するとよいかもしれません。
(画像)
ここでは、プルダウンメニューから[2048]を選択します。
(画像)
[Padding]という項目では、ベイクするテクスチャの余白を指定できます。
余白として設定する数値の目安は下記の通りです。
テクスチャサイズ | 余白 |
---|---|
4096×4096 | 32 |
2048×2048 | 16 |
1024×1024 | 8 |
ここでは、[Padding]ボックスに[16]と入力します。
変更したら[Reload Textures]ボタンをクリックして確定します。
テクスチャの余白って?
UVマップの線のギリギリでテクスチャを描いてしまうと、テクスチャと背景の境界が表示されてしまうことがあります。テクスチャはUVマップよりも大きめに余白をもたせて描く必要があります。
ベイクするテクスチャも同様に、UVマップと背景の境界が目立たないよう、指定したpx分のUVマップから余白を追加できます。
Ray Distを変更する
先程ベイクしたノーマルマップでは、いくつか潰れてしまった箇所がありました。
そのような場合には[Ray Dist]ボックスの値を調整しましょう。
ここでは、「0.01」から「0.1」に変更します。
(画像)
[Bake 2x]ボタンをクリックします。
(画像)
潰れていた箇所が無くなり、ノーマルマップがベイクできました。
Ray Distって?
「Ray Dist」は「Ray Distance」の略で、直訳すると光や光線の距離になります。
ノーマルマップをベイクする際、ハイモデルからRay(光)を飛ばして、ローモデルに当たった箇所をベイクしているようなのですが、その光が届かなかった箇所は潰れてしまっています。
(画像)
このRay Distの値を増やせば光の距離が伸びるので、ハイモデルからローモデルまでの距離が離れていてもRayが届くようになります。
グループを設定してテクスチャを1枚にまとめる
先ほどベイクしたノーマルマップは、前髪と後ろ髪でオブジェクトが分かれているため、前髪と後ろ髪で別々にノーマルマップがベイクされてしまいました。
複数のオブジェクトからまとめて1枚のテクスチャにベイクしたいときは、Blenderのグループを使用します。