ハイポリでつくってローポリにテクスチャベイク、アップロード時の設定、切り替えの仕組み、tips。すべて紹介します。
ハイポリとローポリの製作からLOD設定までの流れ
1. まえがき
twitter でそのような話になったのでまとめてみます。以下の項目について書いています。
- ハイポリのテクスチャーを、UV Map が全く異なるローポリに移植する
- SecondLife 内で LOD 切替に対応したオブジェクトを制作する
2. 手順
1) ハイポリをつくる
今回は、下の図のような形をつくりました。5枚の花びらのような形を Screw Modifier でねじる変形をさせています。
2) ローポリをつくる
ただの筒です。サイズはハイポリよりやや小さめ(重ねて配置するとハイポリが少しはみ出す程度)がいいみたいです。同じレイヤーに置くと見づらいしベイクの邪魔になるので、私は別レイヤーに置いています。
3) ハイポリのテクスチャーベイク
マテリアルを設定してベイクします。今回はロープのようなものを想定してマテリアルをつけました。
でも、焼き上がりはだいたいパッとしないのです。そこで、別途 Ambient Occlusion1) だけ焼いたものを GIMP で重ねて立体感を強調するようにしています。
AO を重ねたらずいぶん重厚な表現になりました。さて、焼き上がったテクスチャーを blender の中で実際に貼り付けます。
4) ローポリのテクスチャーベイク
ローポリのベイクの準備として、ローポリを Unwrap し、新規テクスチャーをつくっておきます。
ココからがいちばん難しいところでしょうが、何度かやれば体が覚えると思います。がんばってください。手順は以下の通りです。
- Object Mode でハイポリを選択する
- Shift を押しながらローポリのあるレイヤーを選択する
(こうすると2枚のレイヤーが同時に表示されます) - Shift を押しながらローポリを選択する
- Edit Mode に入り
- Bake Mode を「Texture」にし、Selected to Active にチエックを入れる
- Bake する
無事に焼き上がったら、ローポリにも焼けたテクスチャーを貼り付けます。
焼けたテクスチャーのところどころに空白ができてしまうことがありますが、そのときは、ベイクのところの「Bias」の数値を上げながら何度かベイクして、良い結果が出るまで粘りましょう。
5) ハイポリに LOD 用ローポリのダミー面を追加する
ハイポリを選択し、 Edit Mode で面を追加します。この面には「ローポリのマテリアル」を割り当てます。この面は SecondLife 内で実際に見えてはいけないダミーの面なので、見えない場所に縮小して配置します。S → 0 で完全に面積をゼロにしても構いませんが、 Remove Doubles は適用しないようにしてください。
SecondLife に持ち込んだ後でテクスチャーを貼る際には、実際にこの面が存在していた方が作業がしやすいと思います。そのため、私はゼロにはせず、小さな面として残しておくことが多いです。
ここまで済んだらハイポリは完成です。Collada 形式で書き出しておきましょう。
6) ローポリに LOD 用ハイポリのダミー面を追加する
ハイポリのときと同様に、ローポリでもダミー面をつくっておきます。
これでローポリも完成です。同じく Collada で書き出します。
7) アップロード
今回は、以下のような LOD 設定でアップロードしてみました。
- High : 製作したハイポリ
- Med : 製作したローポリ
- Low : 製作したローポリ
- Lowest : 0 を指定
8) インワでテクスチャーを貼り付けて完成
うまくいけば、動画のように切り替わるはずです。
3. あとがき(ダミーの面をつくる理由)
ハイポリとローポリの UV Map に互換性があり、1枚のテクスチャーを共有する場合はダミーの面は必要ありません。今回のように、両者の UV Map に共通点がなく、異なるテクスチャーを切り替える必要がある場合、私はダミーの面を介することで実現させています。
ダミーの面をつくることで、ハイポリとローポリは
- 存在するマテリアルの種類が完全に一致
- マテリアル数が等しい
という状況が生まれます。これが、ダミーの面をつくる理由です。実際、この手順を踏まずにアップロードを試みるとエラーが出てアップロード不可になります。
ただ、別のアプローチがあるのではないか? と、疑問を持っていることも確かです。たとえば、2枚のテクスチャーを別の UV Map を使って1枚にまとめてしまう…とか。これだと、テクスチャーの解像度を犠牲にすることになりますが、ダミーの面がなくてもいけそうです。
そういうわけで、「ココに書いた方法が正しい!」という主張をしているわけではありませんので、ご理解の程、よろしくお願い致します。また、他にもこういう方法があるよ!という記事が公開されないかなぁと、ほんのり期待をしつつw