Unity のライティングについて考えるときは、ライトに照らされたレンダリング対象を意味する コンテンツ と、シーンに存在し、照らされたアイテムやオブジェクトに影響を与えるライティングを意味する コンテキスト に分けて考えると、扱いやすくなります。
オブジェクトにライトを当てる場合、どの光源がオブジェクトに影響を与えているかを理解することが重要です。通常、直接光の光源はシーン内に存在し、シーン内のどこかしらに配置されていると思います。また、シーン内には、直接光の他にも反射や光のバウンスなどの間接的な光源もあります。これらのすべては、カメラがオブジェクトの表面を横切って見ることで最終的な結果を与えるために、オブジェクトのマテリアルに影響を与えます。
これは、しっかりとした分類ではありません。しばしば “コンテンツ” と考えられることは、別のオブジェクトにとってライティングコンテキストの一部になる可能性もあります。
これのよい例は砂漠の風景の中にある建物になるでしょう。この建物は Skybox から光の情報を取得し、おそらく周辺の地面から光の跳ね返りを受けます。
しかし、建物の外壁近くにキャラクターが立っているかもしれません。このキャラクターにとって建物はライティングコンテキストの一部です。すなわち、ビルが影をキャスティングするかもしれませんし、キャラクターに建物の外壁から跳ね返されたライトをキャスティングしているかもしれませんし、キャラクターが建物そのものを直接反映している反射パーツを持っているかもしれません。
起動時に、Unity は空のシーンを表示します。このシーンには、すでに、環境や天空ベースのリフレクションやディレクショナルライトで使用可能なデフォルトのライティングコンテキストが備わっています。そのシーンに配置されたすべてのオブジェクトは、デフォルトで、正しく表示されるために必要なすべてのライトを持っています。
デフォルトの lighting context のエフェクトを見るために、シーンに球体を追加してみましょう。
加えられた球体は、デフォルトでは標準シェーダーを使用することになります。球体の上にカメラの焦点を合わせると、このようになります。
茶色(底)から空の青色(トップ)までの微妙な環境はもちろん、球体の縁に沿っての反射に注意してください。デフォルトでは、空(から)のシーンでは、すべての照明コンテキストは skybox と(デフォルトで、シーンに加えられた)directional light に由来します。
もちろん、これはデフォルトの設定です。単一の照明や空の反射がある場合には十分ではありません。照明や反射プローブをより簡単に追加することができます。
どのように反射し、光プローブが仕事するかについての詳細は、ライトプローブ および リフレクションプローブ ドキュメントを参照してください。
ベイクした、または手続き的な Skybox は、照明のセットアップに不可欠な一部にすることができます。それは空のレンダリングに加え、オブジェクト内の ambient lighting や反射を制御するために使用することができます。 手続き的なスカイボックスはまた、ビットマップを使用するのではなく太陽円を直接色を設定して作成することができます - 詳細は、Skybox Documentation に記載されています。
skybox を反映すると、シーン、特に屋外のシーンで多くのオブジェクトのために役立ちます。オブジェクトが使用する反射を変化させる必要がある場合がしばしばあります。たとえば、路地や密林など屋外のシーンでの暗いエリアや、各部屋に合わせた反射を必要とする内部のエリアがあるかもしれません。
これらのさまざまな反射の要件のニーズを満たすために、Unity は、任意のオブジェクトのためのデフォルトの skybox の代わりに近いポイントに、周囲光と反射源として使用するために、空間内の特定のポイントでシーン内の環境をサンプリングすることができる reflection probes を持っています。反射プローブは、シーンの skybox が十分ではないか、適切ではない任意の場所でのシーンの周りに配置することができます。
The concept of Global Illumination is integral to Unity. Both the Standard shader and Unity’s global illumination systems have been designed to play well with each other. The global illumination system takes care of creating and tracking bounced light, light from emissive materials and light from the environment. You can find the details here.
コンテキストは、イメージの全体の外観の重要な部分です。この例では、コンテンツとカメラが同じままで、シーンのコンテキストの変化がどう反映しているかを見ることができます。
コンテンツは、レンダリングされているシーン内のオブジェクトを記述するために使用される用語です。その様子は、オブジェクトに適用されているマテリアルに作用した照明コンテキストの結果です。
標準シェーダーを使用しているインスペクターのマテリアルを表示すると、エディターは textures 、blending modes 、masking および secondary maps を含むマテリアルのすべてのパラメータを表示します。一目で使用している機能を確認し、マテリアルをプレビューすることができます。 標準シェーダーとしてはデータ駆動型です。 Unity はユーザーがマテリアルに設定した構成で必要なシェーダーコードを使用するだけです。言い換えれば、マテリアルの特徴やテクスチャスロットが使用されていない場合は、そのためのコストはありません。そして、シェーダーの組み合わせが舞台裏で最適化されます。
標準シェーダーでは、マテリアルの種類を豊富にするための多くの設定が可能です。テクスチャマップやカラーピッカーとスライダーで値を設定することができます。一般に UV マッピングでは、メッシュのどの部分がテクスチャマップのどの部分を参照するかの記述が、テクスチャとともに要求されます。標準シェーダーマテリアルは、したがって、specular や smoothness マップ、 metallic マップと組み合わせて使用するとき、同じメッシュを横断して異なるマテリアルプロパティを持つことができます。別の言い方をすると、スムーズな境界線とマテリアルの種類の遷移を可能にするポリゴントポロジーを、テクスチャ解像度が超える事ができるような1つのメッシュ上に、ゴム、金属、そして木材を作成することが可能です。もちろん、これによりワークフローがより複雑になる事が予測されますが、テクスチャの作成方法に依存します。
マテリアルのためのテクスチャは2つの方法のいずれかで生成される傾向があります。- Photoshop のような 2D 画像エディターか、3D パッケージからレンダリング/ベイクして、ペインティングまたは合成する方法です。アルベドや specular および他のマップに加えて、法線マップと occlusion マップを生成するために、より高い解像度のモデルを利用することができます。このワークフローは使用する外部のパッケージに依存して変化します。
一般的に、テクスチャマップは、固有の lighting ( shadows 、highlights 等) を含めることはできません。PBS ( Physically Based Shading ) の利点の1つは、期待したようにオブジェクトが光に反応するということです。そして、マップがすでにライティング情報を含んでいる場合は不可能です。