第7回 SOURCEエンジンマップのマップ構成について
ここの記事はSourceSDK wikiのコンパイルの高速化とパフォーマンスのアップ方法から抜粋して書いています。が元のwiki自体の編集が私がほとんどしているので画像なども流用しております。ただその記事もC-SECさんのサイトから参考にした部分もありますのでごめんなさい。
TF2やハーフライフ2などSOURCEエンジンのカスタムマップを作る際に非常に大事で、マップの描画範囲というのがあります。
3Dの表示でこのFPS系のジャンルでは自分の前の見える範囲で壁やオブジェクトが表示されますが、見えない範囲というのは描かれません。自分の後ろなどは表示されません。
描かれる壁やオブジェクトが多ければ多いほどPCのパワーが必要です。SOURCEエンジンは古いエンジンなのでスペックの低いPCでもある程度遊べるように見えない範囲というのは表示もされません。一度に表示されるオブジェクトが少ないほどいいということですね。でも少ないとマップの物足りなさを感じると思います。
ここではどうやって表示を少なく出来るかを書いていこうと思います。
SOURCEエンジンでは通常のブラシ(bursh)で区切られます。区切られたエリアのことをリーフと言います。リーフ単位でマップは表示するかしないかを判定されます。
下の画像は青線が区切られたところ。その中がリーフと思ってください。
WorldBurshというのがボックスで作った箱です。
自分から見てこの箱の向こう側は表示されてないということです。
コンパイルすると実行されるプログラムの3つのうちVVISというプログラムがこのエリアを区切る役目になっています。
このように単純なマップではすぐ終わるのですが、もしこのBurshが複雑な形だったらどうでしょう?
これは中をくりぬいた形のブラシですが、この線の内側一つに対して一つのエリアが作られるので複雑になってしまいます。またこれはコンパイルするのにも時間が掛かってきます。
家一つとっても柱で区切られたり、屋根で区切られたりと、brushが多いと重くなってしまいます。
そこでこのような複雑なbrushはエンティティ化するという方法があります。
Brushを選択して Tools→TietoEntity(CTRL+T)で
ブラシからfunc_detailに変換されます。
このfunc_detailのブラシはVVISによって分割されませんのでこのブラシの裏側は隠されていますが描画されています。なのでゲーム中ではFPSがそれなりに落ちています。(大量に後ろにあると数値としても現れる程度)
大まかな壁など箱型のものはBurshで、細かいディティール(柱や屋根など)はfunc_detailで作るといいでしょう。
具体的にマップと画像で説明しますと以下のようなマップ(CP_HOTROD)の1R目AエリアからBエリアの方面を見ることにします。
このマップの区切りというのが、簡易的になり高速にVVISを終わらすことができます。なのでブラシの裏にある見えない部分も全部抽画しています。そのために描画に時間が掛かりFPSが落ちるということになります。上のサンプルでもFpsが196から105まで落ちています。
この区切りを考えて作るとマップの高速化が図れます。
大まかに一番いいスタイルとしては一つのマップに大部屋を作りすべてそこに入れてしまう箱庭系のマップはSourceエンジンでは良くないということです。小部屋をたくさん作り、その小部屋をつなげる感覚がベストということです。もちろんゲームプレイに関してもスナイパーが有利な見通しが良すぎるマップというのも問題になります。