Light は,ゲームに個性や特色を与えます。 ライトを使用して,シーンやオブジェクトを照らし,完璧な視覚的ムードを作り出すことができます。 ライトを使用して,太陽や,燃えるマッチの明かり,閃光,銃火または爆発などをシミュレートすることができます。
Unity では,次の 4 種類のライトが用意されています。
ライトは,Shadow と投影することもできます。 影は,Pro 専用の機能です。 影プロパティは,ライトごとに調整可能です。
プロパティ: | 特徴: |
---|---|
Type | ライトオブジェクトの現在のタイプ。 |
Directional | かなり遠くに配置されたライト。 シーン内のすべてを照らします。 |
Point | 配置場所から全方向に光らを放つライトで,その「Range」内のすべてのオブジェクトを照らします。 |
Spot | 「Spot Angle」と「Range」で定義される円錐内のすべての場所を照らすライト。 この領域のオブジェクトのみ照らされます。 |
Area | 平面の片側の四角形の範囲で全方向に照射されるライトである。四角形は Width および Height プロパティで決定される。エリアライトはライトマップの焼き込みをのときのみ利用可能であり,リアルタイムではレンダリングされない。 |
Range | オブジェクトの中心から放出される光の範囲。 「Point」/「Spot」のみ。 |
Spot Angle | 円錐の角度をど決定します (単位: °)。 「Spot」のみ。 |
Color | 放出される光の色。 |
Intensity | 光の輝度。 Point/Spot/Area のデフォルト値は 1 です。「Directional」のデフォルト値は 0.5 です。 |
Cookie | このテクスチャのアルファ チャンネルが,異なる場所での光の輝度を決定するマスクとして使用されます。 ライトが「Spot」または「Directional」の場合,これは,2D テクスチャである必要があります。 ライトが「Point」の場合,これは,Cubemap である必要があります。 |
Cookie Size | Cookie の投影を縮小拡大します。 「Directional」のみ。 |
Shadow Type (Unity Pro のみ) | このライトによって投影される「No」,「Hard」または「Soft」の シャドウ。 ソフトシャドウ(モバイルでは利用出来ない)はより高価になります。 |
Strength | 影の強さ。 値は,0 と 1 になります。 |
Resolution | 影の詳細なレベル。 |
Bias | 明るい場所でのピクセル位置と,影マップからの値を比較する際に使用されるオフセット。 下記の「Shadow Mapping」と「Bias Property」を参照してください。 |
Draw Halo | チェックを入れると,ライトの球体状のハローが「Range」に等しい半径で描画されます。 詳細については ハロー および レンダリング設定 ドキュメントもあわせて参照して下さい。 |
Flare | ライトの位置でレンダリングされる Flare へのオプションの参照。 |
Render Mode | このライトの重要度。 これは照明の忠実度とパフォーマンスに影響します。下記の「パフォーマンスに関する検討事項」を参照してください。 次のオプションが含まれます。 |
Auto | このレンダリング方法は,近くの光の輝度や現在の Quality Settings に応じて,ランタイムで決定されます。 |
Important | このライトは常にピクセルごとの品質でレンダリングされます。 これは非常に重要な効果にのみ使用します (プレイヤーの車のヘッドライトなど)。 |
Not Important | このライトは常により速い,頂点 / オブジェクト ライト モードでレンダリングされます。 |
Culling Mask | オブジェクトのグループがライトの影響を受けないように選択的に排除するのに使用されます。Layers 参照。 |
Lightmapping | Lightmapping モード: 「RealtimeOnly」,「Auto」または「BakedOnly」があります。Dual Lightmaps を参照してください。 |
Width | (エリアライトのみ)四角形のライトエリアの幅 |
Height | (エリアライトのみ)四角形のライトエリアの高さ |
Unity では,次の 4 種類の基本的なライトが用意されています。 それぞれが,ニーズに合うようカスタマイズできます。
アルファ チャンネルを含むテクスチャを作成し,ライトの「Cookie」に割り当てることができます。 Cookie はライトから投影されます。 Cookie のアルファ マスクは光の量を調節し,面上の明るい点と暗い点を作成します。 シーンに複雑さや雰囲気を付け加えるのに便利です。
Unity の ビルトイン シェーダ はすべてどの種類のライトともシームレスに機能します。 しかし,VertexLit シェーダは,Cookie や Shadow を表示できません。
Unity Pro では,ウェブ プレイヤーまたはスタンドアロンのビルド対象で,すべてのライトが選択的に Shadows を投影します。 これは,個々のライトの Shadow Type プロパティに対して,Hard Shadows または Soft Shadows のいずれかを選択して行います。 シャドウの詳細については,Shadows を参照してください。
ポイント ライトは,ある点から全方向を等しく照らします。 コンピュータ ゲームで最も一般的なライトで,通常,爆発や電球などに使用されます。グラフィック プロセッサでの費用は平均的になりますす (ポイント ライトの影は最も費用がかかりますが)。
ポイント ライトは Cookie - アルファ チャンネルつきの Cubemap テクスチャを持つことができます。 このキューブマップは,全方向に投影されます。
スポット ライトは,1 つの円錐で,1 方向のみを照らします。 閃光や,車のヘッドライトまたは街灯に最適です。 グラフィック プロセッサでは,最も費用がかかります。
スポット ライトも Cookie - ライトの円錐に投影されるテクスチャを持つことができます。 窓から差し込んでくる光の効果を作成するのに適しています。 このテクスチャは端で黒くなっており,「Border Mipmaps」オプションを持ち,ラッピング モードを「Clamp」に設定している必要があります。 詳細については,Textures に関する項目を参照してください。
「Cookie のあるスポット ライト」
ディレクショナル ライトは主に,屋外のシーンで,日光や月光を再現するのに使用されます。 これは,シーン内のオブジェクトのすべての表面に影響します。 グラフィック プロセッサでは,最も費用がかかりません。 ディレクショナル ライトからの影 (影をサポートするプラットフォーム用) このページ で詳細に説明しています。
ディレクショナル ライトが Cookie を持っている場合,ライトの Z 軸の中心に投影されます。 Cookie のサイズは,「Cookie Size」プロパティで制御されます。 Cookie のテクスチャのラッピング モードを,Inspector で「Repeat」に設定します。
Cookie は,大型の屋外のシーンに素早く詳細を加えるのに便利です。 シーン上で,ライトをゆっくりとスライドさせることで,動く雲の様子を付加することができます。
デフォルトで,ディレクショナル ライト で Cookie があり Forward Rendering が使用される場合,シャドウは無効化されていることに留意して下さい。しかしカスタムシェーダを記述して fullforwardshadows タグを用いてシャドウを有効化することが出来ます。詳細については このページ を参照して下さい。
エリアライトは平面の片側の四角形の範囲に光を照射する。
ライトは照射範囲のなかのすべてのオブジェクトに投影される。四角形の大きさは Width,Height プロパティで決定され,平面の法線マップ(すなわちライトの投影面)はライトの正のZ方向と一致する。ライトは四角形の表面全体から放射され,オブジェクトが受けるシェーディングおよびシャドウのはポイントライトやディレクショナルライトに比べるとやわらかいものとなりがちである。
ライティング計算はプロセッサ負荷が大きいため,エリアライトはランタイムで使用することは出来ずライトマップに焼きこむ必要があります。
ライトのレンダリングは, vertex ライティングか pixel ライティングのいずれかで行います。 Vertex ライティングは,ゲーム モデルの頂点でのライティングを計算し,モデルの面上へのライティングを補間します。 Pixel ライトは,画面のピクセルごとに計算されるため,より費用がかかります。 古いグラフィック カードは,頂点ライティングのみサポートしています。
ピクセル ライティングはレンダリングに時間がかかりますが,頂点ライティングではできない効果を生み出すことができます。 法線マッピング,ライト Cookie およびリアルタイムの影はピクセル ライトにのみレンダリングされます。 スポットライト形状およびポイント ライト ハイライトは,ピクセル モードでのレンダリング時でもずっといい状態でレンダリングされます。 上記の 3 つのライトは頂点ライト モードでのレンダリング時は次のように見えます。
ライトはレンダリング速度に大きく影響するため,ライティングの品質とゲームの速度の間のバランスを取る必要があります。 ピクセル ライトは頂点ライトよりもはるかに費用がかかるため,Unity では,ピクセルごとの品質で最も明るい光をレンダリングするだけです。 ウェブ プレイヤーおよびスタンドアロンのビルド対象に対する実際のピクセル ライトの数は, Quality Settings で設定できます。
「Render Mode」プロパティで,ライトを頂点またはピクセル ライトのいずれかでレンダリングするかを明確に制御できます。 デフォルトでは,Unity はオブジェクトがライトのライトの影響をどれだけ受けるかに基づいて,自動的にライトを分類します。
ピクセル ライトとしてレンダリングされる実際のライトは,オブジェクトごとに決定されます。
詳細については グラフィックス パフォーマンスの最適化 のページを参照して下さい。
Cookie 作成の詳細については, 「スポット ライト Cookieはどのように作成しますか?」 を参照してください。
影は,シャドウマッピングとして知られている手法で実施されます。 これは,カメラが,どの面を他のカメラによって隠されるかを決定する深さマッピングに似ています。 シーンは,ライトの位置で,カメラによって内部でレンダリングされ,ライトによって照らされる各面までの距離を格納する深さマップを作成します。 この種の深さマップは,シャドウマップとして参照されます。 シーンがメインのビュー カメラにレンダリングされると,ビュー内の各ピクセル位置がライトのスペースに変換され,その距離を影マップ内の対応するピクセルと比較できます。 ピクセルが影マップのピクセルよりも遠くにある場合,おそらく,別のオブジェクトにより光から隠されてライトに照らされません。
ライトで直接光を当てられている面は,部分的に影があるように見える場合があります。 これは,ちょうど影マップで指定した距離にあるピクセルが,遠くにあるように見なされることがあるためです (低解像度の画像を使った結果)。 その結果,実際には光が立っているはずが,「影アクネ」として知られる視覚効果が生じ,ピクセルの任意のパターンに影が生じてしまいます。
影アクネを防ぐには,バイアス値を影マップの距離に追加し,境界線上のピクセルが通過するはずの比較を確実に通過するようにすることです。 これは,影が有効になった場合に,ライトと関連付けられた Bias プロパティが設定した値です。 しかし,影を投影するオブジェクトの近くにある影の部分は間違って照らされることがあるため,バイアス値を大きくしすぎるのは間違いです。 この効果は「ピーター パニング」として知られています (つまり,つながっていない影により,オブジェクトがピーター パンのように地面から離れて飛んでいるように見えるということです)。
ライトに対して,バイアス値を微調整して,影アクネもピーター パニングも発生しないようにする必要があります。 一般に,計算するよりも,目で正しい値を測る方が簡単です。