“シムシティーの仕組み” By Will-Wright


ウィル・ライト 著 多摩豊 訳,ウィル・ライトが明かすシムシティーのすべて,角川書店,1991

アニメーションについて
 たとえば飛行機から眺めた街を、ディスプレイに表現しようと
 シムシティーを作り始めていちばん最初に考えたのは、街を一種の生き物のように表現できないかってことだった。
 僕が街についてどう考えているかはすでに説明したけど、大事なのは街を構成する建物とか道路じゃなくって、そこでどんな活動が行なわれているかってことだと思うんだ。道路を車が走り、電車が動き、人々が動き回り、常に要素が変化し続ける“動きのある”システム。街を表現する方法っていうと誰でも地図を思い浮かべると思うけど、僕は動きがない地図じゃなくって、たとえば飛行機から眺めた街、動きのある世界をディスプレイに表現しようって考えた。それこそが僕の考える街の姿だからね。

 それともう一つ考えたことは、プレイヤーに伝える情報をできるだけわかりやすく、それも“面白い”って思えるような形で表現しようってことだった。シミュレーション・ソフトっていうとたいてい数値や図表がたくさん出てくるけれど、数字が並んでいるのをじっと見てるよりアニメーションのほうが楽しい。それに、同じことを数値や図表で表現するより、グラフィックの変化で表現したほうが断然わかりやすいってケースもあるんだ。

 人口密度、ランド・バリュー、交通の量なんかのいろんな情報を一目で把握できて、おまけに街全体が一つのシステムになってるってことも表現できる方法。シムシティーで目標にしたのはこういったことができる表現方法だった。だからシムシティーの中でアニメーション表現されてることには、たいていなにかの情報が含まれているんだ。

イリュージョンを創造する
 本当に街がそこにあるんだって思えるような効果をねらってみたんだ
 アニメーション表現には、情報を直感的にわかりやすくするって役割だけじゃなくって、イリュージョン(幻影)を作り出すっていう大事な役割もある。
 イリュージョンを創造できるかどうかが大切だっていうのは、コンピュータ・ソフトだけじゃなくって小説や映画を始めとするエンターティメントすべてにあてはまる話だけれど、シムシティーに必要だったのはディスブレイの中の街が本当に存在してるってイリュージョンだった。ディスブレイの中に小さなシムたちが住んでいる街がある、プレイヤーがそう信じるようになればプレイに熱中する度合いもどんどん深くなる。本当の街だと思えば思うほど、街とのエモーショナル(感情的)な結びつきも深まるってわけだ。

 さっきも書いたけれど、普通は街っていうと地図で表現される。これに命を与えるために、グラフィックやアニメーション表現だけじゃなくって、効果音なんかもできるだけリアルな音、本当に街がそこにあるんだって思えるような効果をねらってみた。遂に少しでもウソっぽく感じるような表現は極力避けるようにしてね。

 シムシティーが普通のシミュレーション・ソフトとかなり違って見えるのは、たぶんこの表現方法の考え方あたりに原因があるんじゃないだろうか?

シミュレーションの仕組み
 たいていの場合、絶対的に正しいモデルなんて決めることはできない
 さて、いよいよいちばん難しいシムシティーの内部構造の話だけれど、その前にシミュレーションについて少し説明しておこう。
 シミュレーションっていうのは対象になる物事を数式で表せるモデルにして、そのモデルにいろいろな数値を入れて結果がどうなるかみてみる方法のことで、これはコンピュータが最も得意とする作業なんだ。

 たとえばある国の人口の推移をシミュレートしようと思ったら、年代別人口と年代別死亡率、毎年の出産数なんかの数字で人口推移のモデル式を作る。

 出産率+各(年代別人ロ−年代別人口×年代別死亡率)の合計

 このモデル式の中の数値をいろいろ入れ換えることによって、さまざまな条件のもとに人口がどう推移してゆくかが予測できることになる。これがシミュレーションの考え方だ。ところがここで問題になるのは、対象にする物事をモデル式に置き換える方法が一つではない、というより“唯一絶対の方法”なんてものがないってことなんだ。

 例に出した人口推移のシミュレーションにしても、もっと精度の低い式やもっと精度の高い式、考え方が違う式など、いくらでも異なる式が考えられる。
 たとえば(人口×人口増加率)って式は、さっきの例よりも精度が低い。逆にもっと細かいシミュレーションをしようと思ったら、年代別人口と年代別死亡率のかわりに年齢別人口、年齢別死亡率を使うって方法がある。考え方を変えて、州ごとの人口推移をシミュレートして合計するなんて手法もある。

 たいていの場合、絶対的に正しいモデルなんて決めることはできない。シミュレートしようとしているのがなんなのか、そのうちでどういった要素を変数(数値を入れ換えていろいろ試す部分)として考えているのか、どの程度の精度が必要なのかによって、モデル化に使う手法、使われる式も異なってくる。大切なのは必要にして十分なだけの正確さが得られる手法と式を選ぶことなんだ。

街をシミュレートする
 シムシティーの中身は多層構造になっている
 シムシティーがシミュレートしようとしたのは街っていうシステム全体の仕組み、動きがあっていろんな要素が複雑に絡み合っている生き物のような組織の全体像だった。大事なのはシステムを表現することで、細かい数値の正確さはそれほど必要じやなかった。これを表現するためにアニメーションをメインにするグラフィック表現を考えたわけだけど、残念なことにこれにそのまま使えるようなシミュレーション手法はどうもないみたいだった。

 なにしろシミュレートしようとしているシステムが相当に複雑な代物だったし、今までシミュレーションをアニメーションで表現しようなんて考えた人がいなかったから、ビックリくる手法もあるわけがない。そこで、シムシティーではいつくかのシミュレーション手法を複合して使うことにしたんだ。

 それでは、シムシティーの仕組みを説明しよう。
 シムシティーでは、街を構成するいろんな要素を14種類のアイコンであらわしている。プレイはこの要素をエディット・ウィンドに置いていくことによって進行するんだけれど、要素はマップ上に置かれるとその後は勝手に色々変化することになっている。要素にはそれぞれ他の要素に与える影響、他の要素から受ける影響など、いろいろなデータが含まれていて、いったんこれが置かれると、他の要素と相互に関係を持ち始めて状態が変化していくことになるんだ。

 さっき説明したシミュレーションの例では、人口っていう一つの数値をあらわすために一つの式を作ればよかった。ところが、街のシステム全体は式一つであらわせるようなもんじゃない。だから個々の要素が他の要素とどういう関係を持ってるかを一つ一つ式にして、それを組み合わせることによって街全体をシミュレートしようって考えたわけだ。

 この仕組みを効率的に動かしていくために、シムシティーの中身は多層構造になっている。チェスのボードみたいに縦横の線で区切られた層がいくつか用意されていて、それぞれが特別な数値だけを計算するようになっているんだ。

 プレイが行なわれるエディット・ウィンドウっていうのは階層の中でいちばん上にあるマップレイヤーのことで、プレイヤーが置いた各要素はここで他の要素に影響を及ぼしたり、他から影響を受けたりする。ところが、要素と要素の関係すべてを一つの層で計算していると、街全体の計算はとんでもなく複雑になってしまう。そこで、たとえば交通渋滞の具合だけを計算している階層や、犯罪の発生率だけをシミュレートしている階層なんかをいくつか用意したんだ。それも計算する数値によって、シミュレート精度を変えるようにしてね。

 マップレイヤーは1マス×1マス(道路や鉄道1要素の大きさ)の単位で要素と要素の関係を計算している。いちばん精度が高い。
 この下に、人口密度、交通渋滞、環境汚染度、ランドバリュー、犯罪発生率、それぞれの数値だけを2マス×2マスの大きさごとに計算している階層が用意されている。
 さらに、地形の状況を4マス×4マスで計算している階層、人口増加率、消防署、警察署、消防署の影響力、警察署の影響力なんかを8マス×8マスで計算している階層がある。

 こういった個別の階層で計算された結果が、またいちばん上のマップレイヤーにフィードバックされる。そうすると、画面上では次から次へといろんな変化が連続的に起きていくことになる。
 これがシムシティーの基本的な構造なんだ。

多層構造の意味
 公園を作ったからといって、すぐに周辺の空気がきれいになるわけでもない
 シムシティーでは、マップ上に置かれた要素同士の関係はいちばん上のマップレイヤーでチェックされている。たとえば、居住地域と発電所が送電線でつながっているかどうかなんてことはここで確認してるんだ。もしつながってなければ居住地域は活動しない。つながって始めて人口の増加が起きることになる。じやあ、なんですべての要素の関係を一つの地図上で計算しないのか?

 これには二つほど理由がある。

 まず一つは、数値によってはわざわざ1マス×1マスの精度で計算する必要がなかったり、逆にあまり精密に計算してしまうとうまく働かなくなるものがあるっていう理由だ。
 たとえば人口密度。シムシティーでは、居住地域のアイコンは3マス×3マスの大きさを持っている。ということは、わざわざ1マスごとに計算しなくてもいいってわけだ。

 多層構造をとったもう一つの理由には、特別の数値だけを別計算させて、エディット・ウィンドウに要素を置いてから影響が出るまでにある程度の時間的ズレを生じさせようってことがある。

 要素と要素の関係の中には、確実に関係はあるんだけれど影響が出てくるまでにある程度時間がかかるものものある。たとえば、工場を作れば周囲の環境は汚染されるけど、その影響っていうのはそんなにすぐに出るもんじゃない。公園を作ったからといって、すぐに周辺の空気がきれいになるわけでもない。ところが、すべての要素の関係を一つの階層で計算してしまうと、エディット・ウィンドウに要素を置いた途端にすぐ周囲の要素に影響が出ることになってしまう。
 もし、エディット・ウィンドウに置いた要素がいったん他の階層に影響を及ぼし、それがさらに元に戻ってエディット・ウィンドウの他の要素に影響するようにした場合、要素を置いてから他の要素に影響するまでにワンクッション分の時間的ズレが起きる。もっと複雑にして、エディット・ウィンドウに置いた要素が他の階層に及ぼし、それがまた別の階層に影響し、それからいちばん上の階層に影響が戻ってくるってことにすれば、時間的ズレはもっと大きくなる。こういう方法を使えば、要素と要素の関係の時間的ズレを作りだせるってわけだ。

 たとえば、エディット・ウィンドウで公園を作ると、次の段階でランドバリューを計算している階層に影響して、その周辺のランドバリューが上がる。さらに次にこれが犯罪発生率の階層に影響して、犯罪を抑えることにつながる。この間には時間的なズレがあって、おまけに階層ごとに精度が異なっているから影響もだんだん弱まっていく。

 街のシステムを一つの式にすることは不可能だけれど、要素同士の関係を一つ一つ式にしていくことならなんとかできる。それをうまく組み合わせるために、この多層構造の仕組みが必要だったんだ。

要素と要素、階層と階層
 ごく常識的に考えてくれれば、要素同士の関係がどうなっているかは理解してもらえると思う
 シムシティーの14種類のアイコンは、お互いにどういう関係になっているか? これを全部書いてしまうと、それこそ手品の種明しになってしまう。基本的に知っておいてほしい関係に関してはマニュアルにも書いてあるし、これからこの本でも説明する。それと、マニュアルについているユーザーリファレンスのチャートは、ほとんどが階層と階層の関係を表していると思ってくれて間違いない。

 目標は街のシステムをできるだけ本物らしく再現することなんだから、要素と要素の関係も僕らの日常の感覚にできるかぎり沿うように作ったつもりだ。ごく常識的に考えてくれれば、要素同士の関係がどうなっているかは理解してもらえると思う。
 階層と階層の関係にしても、たとえば交通渋滞は環境汚染と関係しているとか、犯罪発生はランドバリューと関わりを持っているとか、一つ一つの関わりはそんなに複雑じゃない。

 ただ、ここで一つ書いておきたいのは、シムシティーで街になにかの要素を置くとき、それがその後街全休にどんな影響を及ぼすのか正確な予測は僕自身にもできないってことだ。シムシティーに登場するそれぞれの要素の関係は僕が作ったものだけれど、組み合わさったときにどうなるかは、実際に手順どおりにシュミレートする以外に予測する方法がない。

 要素と要素、階層と階層の関係が何十にも組み合わさってできあがる複雑なシステム。それがシムシティーの街。一度動き始めたら、もう街は自分の力で成長し始めてしまうんだ。
 シムシティーは絶対の方法論も近道もない。今目の前にある街にいちばん必要なことはなにか、プレイするたびにそれを考えていかなければならないんだ。その中で、要素と要素や階層と階層の関係を越えて、街っていう大きなシステムの仕組みがおぼろげに見えてくるようだったら、僕がこのソフトを作った目的も達成されたってことになるわけだ。


ウィル・ライト 著 多摩豊 訳  「ウィル・ライトが明かすシムシティーのすべて」より 

戻る