iconこの記事ではUnityでのグローバルイルミネーション(GI)の基礎知識と、それを用いた間接照明のような表現をSTYLYの空間に反映させる方法をご紹介します。Gallery)では正しく反映されません。VRでの場合のみそのまま反映されますので、その点を考慮してご活用ください。今回はSTYLYにシーンごとアップロードする必要があります。使用したUnityのバージョンは2019.3.6f1です。STYLYと互換性のあるUnityバージョンはこちらからご確認ください。https://document.styly.cc/doc/docs/en/creator/creator_plugin_intro/#%E5%AF%BE%E5%BF%9C%E3%81%99%E3%82%8Bunity%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6サンプル本記事で作成するサンプルシーンは以下から体験できます。﻿グローバルイルミネーション(GI)とは?グローバルイルミネーション(以下、GI)とは、CGで光を表現する際に人間が現実を目で見たときのように自然な表現をする技法です。日本語にすると「大域照明」、つまり局所的な直接光の表現だけでなく、反射光や環境光などの間接光も含めて大域的(グローバル)に照明効果を表現すると言う意味です。Unityでのライトの基礎知識と使い方に関しては下記の記事をご参照ください。閉じられた部屋を作るGIの効果をわかりやすくするため、今回はコーネルボックスにならい、赤と緑の壁のある閉じられた部屋を作ります。コーネルボックスとは、CGの照明効果が現実同等に描画されるかを検証するためにコーネル大学研究者が発案した有名なモデルです。Positionと同じPositionにします。奥行き(Z座標)を-5、高さ(Y座標)は適当ですが1.5にしました。MainCameraのPositionをSTYLYに合わせるPlaneを配置するそれではここから部屋を作ります。今回は床、壁、屋根をすべてUnity基本オブジェクトのPlaneで作ります。Planeは裏面のメッシュはないため、閉じられた空間にして壁の外の視点から見てもSceneビューなどで確認しやすいからです。Planeを六面に配置して部屋にします。壁と天井のScale値はすべて1、壁は高さ(この場合Z座標)を半分の0.5にしました。Planeで部屋を作る自分の場合、各PlaneのTransformは下記表の通りとなりました。Lighting」します。Settingsで開きます。Lightingのボタンを押してください。Generate」のチェックを外すと押すことができるようになります。Lightingを選択Lightingウィンドウはよく使うので、Inspectorの右にでもレイアウトしましょう。マテリアルを作っていきます。ProjectビューのCreateメニューからMaterialを選び、「Red」と名付けます。ShaderはStandardのまま使います。Albedoカラーを(R:240、G:0、B:0)にします。「Green」というマテリアルを作り、Albedoカラーを(R:0、G:240、B:0)にします。これらを左右の壁に各々適用します。(ProjectビューからマテリアルをHierarchyビューの適用したいGameObjectにドラッグ&ドロップします)また、その他の壁、床、天井に関しては白にしたいのですが、真っ白ではなく(R:240、G:240、B:240)のマテリアル「White」を作りました。すべてのPlaneにマテリアルを適用すると以下のようになりました。コーネルボックス風の部屋を作るRGB値の「240」というのは、Unityが提供しているマテリアルチャートを参照しています。これはGI効果をより自然に近い表現にするために必要だということです。マテリアルチャート(Unityマニュアル)シーンを保存します。シーン名は何でもよいですがここでは「GI_Sample」としました。Lightを削除しましょう。Lightを削除すると部屋の中は真っ暗になるかと思いきや真っ暗にはなりません。これは、実はすでにGIの効果が有効になっており、部屋の中が照らされているからです。この照明の設定はどこにあるのでしょうか。Lightingに関する環境設定をするここで使用するのが先ほど登場したLightingウィンドウです。UnityにおけるシーンのLightingのセッティングは、Lightingウィンドウにある程度まとまっています。Lightingウィンドウを見ると、まず一番上の所、タブのようなもので「Scene」が選択された状態となっているかと思います。Lightmaps」というものが並んでいます。)下記2つの値を共にゼロにします。Multiplierそうすると部屋の中は真っ暗になりました。Multiplierでは明るさの度合いを設定できます。これがデフォルトでは1となっており、閉じた部屋であろうが環境光で照らされた状態となり、シーン内にひとつもライトがなくても明るかったのです。各々Sourceという項目があり、デフォルトでは共に「Skybox」となっています。これは環境光の計算のもととなるものがSkyboxに設定されていることを示します。Multiplierの値をもとの1に戻しましょう。発光するオブジェクトを置く今回は光源として発光する(Emissive)オブジェクトを使いたいと思います。Cubeを置き、「Emissive」という名のマテリアルを作成して適用します。Intensityの値を0以上に設定するだけです。EmissiveオブジェクトのプロパティEmissionをONにしたマテリアルを適用したオブジェクトただこれだけだと、まわりのオブジェクトに光の影響を与えません。Illumination」のチェックをONにする必要があります。IlluminationのチェックをONにして下さい。IlluminationをONにするこれでやっと発光しているように見えるようになりましたので、薄くして天井に配置しました。Illuminationをオン/オフしたりするごとに右下に進捗メーターが表示され、なんらかの処理が走ったあとにLighting効果が適用されているようです。Lightingの処理が行われている様子(※ちなみにEmissiveオブジェクトは正確にはLightではありませんが、Light同様にGIの効果を得られますし、Lightとは違いEmissiveオブジェクトそのものが発光する効果を得られるので、蛍光灯やネオンを表現するのに便利です。)ライティングの事前計算を手動で実行するここでまたLightingウィンドウに戻ります。Generate」という項目にチェックが入っています。Lighting」というボタンが有効になりました。Illuminationをオン/オフしたりしてもシーンのライティングに変化はありません。Lighting」ボタンを押すと処理が実行され、編集した内容によりライティングが変更されるようになりました。この処理の実行後にProjectビューに「設定しているシーン名」のフォルダと、その中にファイル2つが作成されていました。Lightingデータができているこの処理はライティングの事前計算と呼ばれるもので、シーンに紐づく事前計算結果データがシーンと同名のフォルダの中に作成されます。このデータはUnity、もしくはSTYLYの実行時に描画に使用されます。Illuminationのチェックはオフにします。Lightingボタンを押してライティングの事前計算を実行します。Lightingします」と言います。Generate」、つまり自動生成を無効にしたのでライティングに関わる変更をしてシーンに反映させたい場合には、都度Generateする必要があります。今回手動生成にしたかというと、どの変更がライティングの効果に影響を与えるかわかりやすくするためです。Illuminationに関しては今回詳しく説明しませんが、STYLYへのアップロード時に確実に反映させるためオフにしました。プリミティブを部屋に置くこのままだと蛍光灯のようなものがむき出しで間接照明にはなりませんので、ランプシェードのようなものをCubeで作り、Emissiveオブジェクトの下に置きます。シーンを明るくするためにEmissiveマテリアルのIntensityを2.5に変更します。あとは床に適当にCubeなどのプリミティブを配置します。Illumination」をオンにし、Whiteマテリアルを適用しました。Whiteマテリアルの「Smoothness」を0にします。これは物体表面からの光をよく拡散させるためです。Lightingした結果が下の画像です。プリミティブの表面が向かって左に面している側は赤に、右のほうは緑にうっすら色づいています。プリミティブを配置したシーンこれはEmissiveオブジェクトからの光が壁に当たって反射し、プリミティブの表面に届いたものが反映されているからです。GIの効果のひとつとなります。テクスチャのあるマテリアルであっても同様に反映されます。テクスチャにも反射光が反映されている赤と緑の壁側にもEmissiveオブジェクトを配置し、テクスチャの乗せたSphereもEmissiveにしてみました。暗がりにしたかったので、Emissionの明るさの値をすべて1.5に下げました。前述した環境光の明るさの設定値2つをゼロにしました。Multiplier発光するモデルを追加これでいい感じに暗くなったのですが、肝心の間接照明(Emissiveオブジェクト)部分から漏れ出る光が薄くなってしまっています。デフォルトの2から、4に変更します。Resolutionは間接光の解像度を表します。Lightingします。すると、壁側のEmissiveオブジェクトの光が明るくなりました。Intensityで間接光の明るさを調整します。この場合、0.7にしました。Intensity明るさはいいのですが、壁に当たる光の表現の解像度が粗いのが気になりました。Lightingに時間がかかってしまい、作業効率が悪くなってしまいます。Lightに変更してみます。Mode」を「Important」に設定しないとライトが機能しないため、そのように設定します。Shadows」に変更します。Lightingしてみましょう。Lightは球状のため光の形状が変わってしまいましたが、粗さはなくなりました。影もちゃんと描画されています。Resolutionを2に戻してみても粗さが気にならない程度になりました。Resolutionが4というのはかなり高い値のようです。屋内の間接光表現が複雑になる空間でも2~3がちょうどよいと書いてありました。Resolution」に名称変更されたようです。Lightingして事前計算を行いはするものの、それをもとに実行時(リアルタイム)に間接光も含めた光の計算を行う、というものです。Resolution」が実行時のパフォーマンスに影響を及ぼしますのでご注意ください。STYLYにアップロードするでは、できあがった空間をSTYLYにアップロードしましょう。今回はUnityシーンごとアップロードします。STYLYにUnityシーンをアップロードする方法はこちらを御覧ください。Lightingして作成されたLightingの事前計算結果データも含めてアップロードされます。Lightは削除してしまいましょう。Gallery)で見ても反映されませんが、STYLYアプリでVRゴーグルをかけて見ると、Unityで見たままの光が反映されているかと思います。PCディスプレイでの見た目よりもVRゴーグルで見たときのほうが明るい気がしました。これは見るVRゴーグルによっても違いが出るかもしれません。Lightを使って間接照明のような表現をしてみました。UnityのLighting表現に関しては、設定箇所や学ばないといけないことも多岐にわたり、奥が深すぎてまだまだご紹介しきれないのですが、GIを意識してうまく使うことにより、より自然な表現や心地よい空間を作ることができるのではないかと思います。今回は動かない物体のみで構成された静的な空間でしたが今後、動く物体やライト自体に変化のある空間に関しても書いてみたいと思います。皆さんもぜひ色々と試してみてください。今回以下の記事を主に参考にさせて頂きました。STYLYを使って3次元空間での新たなクリエイティブ表現と体験のデザインを開拓するプロジェクト「NEWVIEW」にて、アーティストの創作をサポート。Venue」プロジェクトでんぱ組.incとXRクリエイターが協力し、渋谷スクランブル交差点で新しい音楽体験を創り出そう。総額300万円の還元金、制作アセットの提供、審査にはでんぱ組.incも参加!あなたのアイデアで都市をステージに変えましょう。スマホがなくなる日』(幻冬舎)10年後のテクノロジーを誰が想像できるだろうか──。2024年、ついに「空間を身にまとう時代」の実現を加速するデバイスが登場!人類はスマホの小さな画面から解放され、空間という無限のキャンバスを手に入れる。スマホがなくなる日、次世代デバイスでどんなミライをつくれるのか。スマホがなくなる日──。この先に続くミライは、本書を読んで創造してみてください。