おもちゃラボ

Unityで遊びを作ってます

【Unity】Blenderでテクスチャをベイクする

Unityでライトマップをベイクして、影をテクスチャに焼き付けることもできますが、Blenderでモデルを作った時点でAOなどの影をベイクすることもできます。ここではBlender2.8を使ってテクスチャに影をベイクする方法を紹介します。

f:id:nn_hokuson:20190716220927j:plain:w600

レンダリングの設定をする

テクスチャをベイクするには、Belnder2.8から採用されたEeveeではなくCyclesというレンダーエンジンを使う必要があります。そこで、Sceneアイコンを選択してレンダーエンジンを「Cycles」に設定します。

f:id:nn_hokuson:20190716220557p:plain:w300

アンビエントオクルージョンの影もベイクするためにワールドアイコンを選択して、アンビエントオクルージョンにチェックを入れます。

f:id:nn_hokuson:20190716220628p:plain:w300

ベイクするテクスチャを作成する

まずはベイクするためのテクスチャを作成します。メニューバーから「UV Editing」を選択して2画面にします。UV展開画面の上にある「新規」ボタンをクリックしてベイクするテクスチャを作成します。

f:id:nn_hokuson:20190716220647p:plain:w450

ここでは名前を「ao」、幅と高さは1024pxに設定しました。ベイクするテクスチャの大きさが大きくなるほど、ベイクにも時間がかかるので、最初は小さいテクスチャで実験したほうがいいかもしれません。

f:id:nn_hokuson:20190716220659p:plain:w300

次にモデルをUV展開します。右のモデリング画面で、すべての頂点を選択した状態で「Uキー」→「スマートUV投影」を選択してUV展開します。

f:id:nn_hokuson:20190716220736j:plain:w450

ベイクするマテリアルの設定

今作成したテクスチャをベイクするマテリアルに、指定します。画面左のエディター選択メニューから「シェーダーエディタ」を選択します。

f:id:nn_hokuson:20190716220812j:plain:w650

「追加」→「テクスチャ」→「画像テクスチャ」を選択します。

f:id:nn_hokuson:20190716220829j:plain:w600

追加された画像テクスチャノードのテクスチャに先程作成した「ao」を設定します。

f:id:nn_hokuson:20190716220716p:plain:w300

ベイクする

Sceneアイコンからベイクを選択して、ベイクボタンを押してください。簡単なモデルであれば数秒でベイクが完了して、次のようなベイクテクスチャが表示されます。

f:id:nn_hokuson:20190716220857j:plain:w350

画面上の画像ボタンから「保存」を選択してください。

f:id:nn_hokuson:20190716220917j:plain:w200

Unityで表示する

作成したモデルとベイクしたテクスチャをUnityにインポートし、シーンビューでマテリアルをアタッチしてください。次のようにAOの効果がベイクされた状態のテクスチャが設定できます。

f:id:nn_hokuson:20190716220927j:plain:w600

【InDesign】表を作る

InDesignを使って次のような表を作る方法を説明します。

f:id:nn_hokuson:20190714121004p:plain:w300

ここでは次のような流れで表を作成します。

表の内容を入力する

まずは本文中に「,」区切りで表の内容を入力してください(区切り文字は以下のダイアログで変更できます)
f:id:nn_hokuson:20190714113346p:plain:w300

作成した表を選択した状態で、メニューバーから「表」→「テキストを表に変換」を選択します。
f:id:nn_hokuson:20190714113511p:plain:w300

テキストを表に変換するダイアログが表示されるので列分解に「,」を指定してください。区切り文字に別の文字を使った場合は適宜変換して下さい。
f:id:nn_hokuson:20190714113643p:plain:w400

ここまでで次のような表が作成できます。表の大きさは縦線をドラッグすることで変更することができます。
f:id:nn_hokuson:20190714113919p:plain:w300

表の見た目を整える

グリッドに沿って表が配置されているため、表の項目のスペースがバラバラになってしまっています。グリッド揃えをやめるため、表を選択した状態で段落パネルから「グリッド揃え」→「なし」を選択してください。
f:id:nn_hokuson:20190714114407j:plain:w600

表のセル高さを指定の高さにしたい場合は、表パネルの「行の高さ」を「指定値を使用」に変更して高さを入力します。また、組方向は「中央揃え」にしておきます。
f:id:nn_hokuson:20190714114747j:plain:w300

ここまでで次のような表になりました。
f:id:nn_hokuson:20190714114929p:plain:w300

ヘッダに色を付ける

まずは色を付けたいヘッダ部分のセルを選択します。
f:id:nn_hokuson:20190714115555p:plain:w300

この状態で、スウォッチから色を選択することで、セルに指定した色をつけることができます。
f:id:nn_hokuson:20190714115652p:plain:w300

最終的には次のような見た目になります。
f:id:nn_hokuson:20190714121004p:plain:w300

【ARKit】ARでAmbient Occlusion(AO)を使う

ARKitやVuforiaなど、ARのアプリケーションでアンビエントオクルージョン(Ambient Occlusion)の効果を使いたくても、ポストエフェクトが使えなかったり、処理負荷が大きくなりすぎる傾向があります。

ここでは、ARKItやVuforiadでも簡単にAOの効果を実現する方法を紹介します。

f:id:nn_hokuson:20190709201717j:plain:w650

モデルにLightmap Staticを設定する

ポストエフェクトを使わずにAOを表現するにはライトマップをベイクするのが一般的です。ライトマップをベイクするには、インスペクタから「Static」に指定します。

ただ、単純に「Static」にチェックしてしまうと、「動かないオブジェクト」とみなされ、ARで表示でされなくなってしまいます。

そこで「Static▼」の「▼」をクリックして「Lightmap Static」を指定します。これでライトマップに対してのみ静的なオブジェクトとみなされます。

f:id:nn_hokuson:20190709200112j:plain:w350

ライトをベイクする

続いてAmbient Occlusionの設定とライトマップのベイクを行います。

まずはヒエラルキーウインドウからDirectional Lightを選択して、インスペクタからModeを「Baked」または「Mixed」に設定します。Bakedはライトは無視してベイクしたテクスチャのみを使用します。一方、Mixedは非Staticオブジェクトに対しては通常通りライティングします。

また、Shadow Typeは「Soft Shadows」になっていることを確認しておきましょう。Shadow Typeが設定されていないと、正しく影の計算が行われません。

f:id:nn_hokuson:20190709200253p:plain:w350

次に「Window」→「Rendering」→「Lighting Settings」を選択して、Lightingのパネルを開きます。「Ambient Occlusion」にチェックを入れて、「Indirect Contribution」と「Direct Contribution」を3程度に設定してみてください。

f:id:nn_hokuson:20190709155623j:plain:w400

Ambient Occlusionの設定項目であるDirectとIndirectについては、次の記事も合わせて参考にしてみてください。

nn-hokuson.hatenablog.com

最後にLightingパネルの一番下にある「Generate Lighting」ボタンをクリックしてベイクを開始します。1分程度でベイクが終了し、AOの効果がかかったモデルが表示されます。

f:id:nn_hokuson:20190709155654j:plain:w400

エラーが出る場合

次のように、「Mesh doesn't have albed UVs」や「Mesh doesn't have UV's suitable for lightmapping」といったエラーが出る場合、モデルに正しくUV座標が設定されていない可能性があります。

f:id:nn_hokuson:20190709201427p:plain

BlenderやMayaなど3DCGソフトを使ってUV展開を行い、正しくUV座標を設定してください。BlenderでUV展開をする方法は次の記事で紹介しています。

nn-hokuson.hatenablog.com