1. HOME
  2. テックブログ
  3. 『Mabusu Technology』とは?ゲームの処理最適化から”塗す”技術を実験する

『Mabusu Technology』とは?ゲームの処理最適化から”塗す”技術を実験する

「塗す」という技術について考えています。課題感の共有のため、最初にゲームの処理最適化についてから始めたいと思います。

ゲームではプレイヤーの操作に応じて、どの様な画面をレンダリング(描画)するか、ということが決まりますので、あらかじめ計算をして画面(画像)を用意しておくことができません。そのため、毎秒ごとに数十枚の画像をCGによって合成して、それを連続再生します。アニメのセル画を1秒間の間に何枚も書くのと同じ様なものと考えてください。もし、画像の描画にかかる時間が、フレームの実時間を超えてしまうと「処理落ち」といって、画面がグワッと遅くなる様な不快な現象が発生します。

これを防ぐために様々な技術が存在します。3DCGはたくさんの細かい平面が組み合わさって表現されていますが、コンピュータはこの平面を一枚ごとに計算して描画するので、この平面の数が多いほど(CGは詳細に、綺麗になりますが)、処理負荷が増えてしまいます。画面にはキャラクターが写っていますが、その距離はまちまちで、遠くにいるキャラクターと近くにいるキャラクターに同じ平面の数を割り当てるのは効率が悪いです。例えば遠くにいるキャラクターは少ない平面数で、近くで詳細な描画が必要なものには、多くの平面を割り当てることができれば、処理能力を節約できます。

キャラクターの造形は平面で描かれますが、その表面のキメといった細かい描写は、テクスチャーといって平面の上をラッピングする画像として処理することが一般的です。つまり、平面による造形の上に、皮を被る様に画像が貼り付けることによって、形+表面の質感を表現し、キャラクターが造形されています。キャラクタやリアルな背景の造形に欠かせないテクスチャーですが、このテクスチャーも、サイズを小さくすることができれば、メモリの節約につながり、余剰分を他のものの表現に回せます。

コンピュテーションの世界には「時間と空間のトレードオフ」といった法則があります。つまり、何かを計算する際に「処理速度」とそのために使える「メモリ空間」(メモリ容量)はトレードオフの関係にあるというのです。つまり何か複雑な計算の速度をあげようと思えば、あとで役に立つ計算の途中結果などを一度メモリに保存しておいて、後から再利用するという様な方法で可能です。
逆にメモリを節約したいと思ったら、一時保存をせずに毎回計算する(処理時間を消費する)選択肢が取れます。しかし、メモリと処理速度の両方を節約するということは虫が良い話ということになります。そのため、ゲームではメモリと処理速度の両方をトレードオフしながら様々な技術で節約するのです。

ゲームの背景について、考えを巡らせましょう。ここでは例えば、日本のお城が登場するようなゲームを考えてみてください。お城には「石垣」がつきものですが、この石垣を表現する際に、デザイナーが石垣のテクスチャーを作って、それを石垣の造形に貼り付けます。石垣の見えている表面と同じ面積を持つテクスチャーを使えれば、デザイナーの好きなだけ細かい石垣を描写することができますが、メモリを無駄遣いするのは良くありません。そのため、一般には小さいテクスチャーを繰り返し描画する(ループさせる)様な処理が行われます。


前置きが長くなってしまいました。今回は、このループ処理についてが話の中心になります。
もしこのテクスチャーが小さすぎたら、石垣には同じ様な石が繰り返し描かれることになり、不自然さが出てしまいます。工事現場のパネルの様に、人工物的な繰り返し感がでてしまうのです。これは望まれないループ感です。そのため、この繰り返し感が出ない範囲で、かつ、できるだけ小さい画像を作りたい。というニーズが出てきます。

同じサイズの画像でも、それを繰り返した時に、よりループ感の強いものとそうでもないものがあります。テクスチャーの持つ意味を変えずに、ループ感の少ない画像を作るにはどの様に考えれば良いのでしょうか?

体には器官のレベルでパターンを読み取る能力が備わっていますので「同じものの連続である」ということを無視するのは難しいことです。特徴点を自動的に発見して、そのループであるという様に嫌でも認識してしまうのです。この特徴点をどの様にわからなくするか?ということが論点になっていくでしょう。

その方向性には二つあります。
(1)特徴を消したり目立たなくする。
(2)周囲に同じような特徴点を増やし目立たなくする。

人の感覚を頼りに、ある平面中でパターンを感じるに至る部分というのを1、2の方法で特徴を消していくことでループ感の少ない画像が作れます。CG制作の現場ではその作業をするためのツールが存在し活躍しています。

このことに因んでというと唐突感がありますが、むかしに茶道の先生に興味深い話を聞きました。向かい合った相手にお茶を出すときに、二人の真ん中にお茶を出すのは、さも「どうぞ」という感じが出てしまうから無作法だというのです。あえてずらす。めちゃくちゃ美しい作法ですよね。

ではどこにずらずのか?これは難しい問題です。1本の棒があり、それを幾何学的に意味があるポイントで二つに分割するとしたら、そこには二つのポイントしかありません。一つは中心。もう一つはあの有名な「黄金比」のポイントです。およそ「68:32」のポイントになります。中心ではポイントで分割した二つの棒の長さが等しくなり、黄金比では、最初の棒:分割した棒の長い方の比率と、長い棒:短い棒の長さの比率が等しくなります。

意味のある場所にお茶を置けない。しかし、中心から大きく外れると、これはまた別の意味が出て来ますから、ずらすのは中心と黄金比の間に限られてきます。
例えば、中心と黄金比の間でおよそ「56:44」たしかに絶妙に意味がない数字に思えてきますね。

1次元の棒について幾何学的に意味のあるポイントを考えましたが、これは2次元に応用することができます。2次元の平面にランダムにポイントを散りばめます。その上で、その幾何学的な意味が増えも減りもしないポイントを一つ増やすということを考えます。

幾何学的な関係による特徴の量の計算について、細かい計算方法は除きますが、限られた矩形の中に配置された点のそれぞれの関係で現れる幾何学的な特徴の量(=幾何学ポイントとしましょう)を計算し、そこに新たな一点を加えることで、その量が増えるか減るか?ということです。

平面に点をばら撒き、その後任意の場所に1点を加えることでの幾何学ポイントの変化をヒートマップで表示します。幾何学ポイントの変化が多い箇所は赤もしくは緑で表されています。このとき、赤色と緑色の境界はそこに点を増やしたとしても幾何学ポイントが増減しにくい箇所になります。

すこし話を戻します。人がループを感じる特徴を減らすという話をしていました。その方法には(1)特徴点を消す方向。(2)同じ様な特徴点を増やすことで目立たなくするというものがありました。
(2)の方向性を一般的には「塗す(まぶす)」と言いますが、この塗しに上記のポイントが応用できないでしょうか。

実験してみると、確かにループ感が緩和された様に思えます。この体系をもう少し追求していくと塗すためのテクノロジー(Mabusu Technology)が獲得できるかもしれません。
小さいシームレステクスチャを作る以外の何に利用するか、そのことについてのアイデアがありますが長くなってしまったので、また次の機会に紹介したいと思います。

この記事を書いた人

大西 秀典
プロダクト開発本部 IT戦略統括部長兼CDO
大西 秀典

おすすめの記事