「とりあえず」やっておく描画設定について考えたり試したりしたことの記録です。設定の項目は主に、ライトマップ影ライトプローブといったあたりになります。それについても触れることにします。私のスマホ(京セラS2)では満足なフレームレートが出ません。重いコードを書いたつもりもないので、CPUが遅いわけはありません。実際プロファイラをつなぐと1フレームあたり4msで終わったりしています。なると、犯人はGPUです。頂点が多いはずはないので、完全にピクセルです。この全画素に3Dの照明計算をするのはかなりキツいでしょう。PLAYSTATION3のような据置きゲームですら耐え難かった解像度です。「解像度詐欺」と(一部で)呼ばれる手法が普通に行われていました。性能が下の方のスマホにはあまり配慮してくれていません。普通に作ると結構豪華なシェーダがバンバン走ってしまいます。「こりゃちょっと真面目に考えないとダメだな」と思ったのです。照明計算の概略ここでは、3DCGにおける照明計算を、ひどく乱暴に説明しましょう。照明計算は粗く言って以下の6要素の計算結果を足して行われます。2つの種別の組み合わせで6通りです。「直接(Direct)」というのは、光源から直接光が飛んできた時のことです。太陽があって、何にも遮られずに地面に当たれば、これが「直接」ということになります。一回どこかで反射したり屈折した光に照らされた時のことです。「遠く」の「全方位」から来る光のことです。シーンの中で動き回っても変化しないものとみなせます。いうのは、粘土みたいにテカテカしていない時の計算方法です。どこから見ても同じに見える、とします。真面目にやる場合は、金属でないものでだけ計算します。いうのは、テカッキラッとした感じの奴です。頭を動かすとまぶしくない、というアレです。どこから見ているかで見え方が大きく変わります。物の色と関係なく、光の色を反射します。黒っぽいマンホールも、太陽を反射すれば黄色く光ります。真面目にやる場合、金属はこの鏡面反射しかしません。違ってきたりもします。役に立つ分類と言えるでしょう。6種類の特性ではこの6種類の特性をそれぞれ見ていきましょう。斜め上にある太陽を向いているあたりが明るく、反対は暗くなっています。光なので、経路は一つしかありません。どこかで反射したり曲がったりすることは考えないからです。処理負荷は光源の数に比例します。(「ベイクする」「焼く」と言う)実行時はそれを使うだけ」という最適化ができます。光源からの経路が何かに遮られていれば、そこは影になります。これを計算するのは結構重い処理です。全てのものを、余計に一回づつDrawCallすることになります。影もろともライトマップに焼くことができます。この場合、実行時の負荷は影があろうがなかろうが変わりません。光の鏡面反射テカテカと太陽の光が映り込んでいますね。拡散反射と違って「どこから見るかで大きく変わる」という特性があります。基本的にはライトマップに焼けないと考えて良いでしょう。焼いてしまう選択もありえます。それなりに重くなります。マテリアルにこれを有効化するかどうかのフラグがあります。Highlights"というのがそれです。切ってしまってもいいかもしれません。それと、鏡面反射で出てくる色は「物の色とは関係ない」という特性があります。赤い物だろうが黒い物だろうが、光が白ければ白です。影に関しては拡散反射と同じです。普通は同じシェーダで一緒にやります。左に緑の壁があるため、左を向いた面は緑に染まっています。逆に、右に赤い壁があるため、右を向いた面は赤く染まっていますね。赤い壁や緑の壁、といった光源から光が届く経路は無限にあります。いうだけでも選択肢は無限です。スマホで実行中にこの計算を毎フレームやるのは無理です。拡散反射ですので、どこから見るかで色が変わりません。ライトマップに焼くことができます。これにも影があります。正確に言えば「陰」です。陰影といった感じになります。奥まった所は暗いですよね?鼻の穴の中は黒く見えます。ライトマップに焼くことができます。いうのを計算してたくさん保存することで、代わりにすることもできます。動く物に対して間接拡散反射の計算をするのが、LightProbeです。いうようなことができるわけです。間接光の鏡面反射ところどころ、赤い所、緑の所、白っぽい所がありますね。緑は右の壁から来たものです。このように、キラリと周囲が映り込みます。ライトマップに焼くことはできません。それなりにそれっぽいことができます。