プチメタ3.0

刺激を受けた物事に対する感想や考察、自己成長や資産運用、ゲーム作りに関することなど。


ゲーム業界のいろいろな歴史をまとめた動画が面白い


www.youtube.com


ファミコン誕生からすでに40年以上が経ち、
ゲーム業界の歴史も結構なボリュームとなってきたが、
そのあたりをトピックごとに紹介するYouTubeチャンネル
【ゲーム会社史】そのゲ」が非常に面白い。


動画ごとに特定の作品や企業、クリエイターに焦点を当て、
非常にテンポよくわかりやすい構成で作られていて
NHKの番組のような見ごたえを感じる。


どの動画も全体的にクオリティが高いが、
誰にとっても馴染みのあるものを紹介しておく。

「バイオハザード」シリーズの進化の歴史


初代プレイステーションから今なお続く
人気シリーズ「バイオハザード」について、
作品ごとの違いや技術の発展が非常に綺麗にまとめられている。
3Dゲームの進化の歴史が感じられるだけでなく、
ゲーム性や作風が人気にかなり影響を与えることもよくわかる。

ポケモン開発会社の成長の歴史


バイオハザード同様に巨大なIPであるポケモンだが、
それを生み出した開発会社のゲームフリークが
非常に弱々しかった時代からどう成長していったかがわかる。
まさにクリエイターの夢が詰まった歴史。

クリエイター桜井政博の全歴史


スマブラやカービィの生みの親という印象が強いが、
こうやって手掛けてきた作品のまとめを見ると
そのどれもがきっちりと成果を出していて
クリエイターとして改めて尊敬してしまう。



mclover.hateblo.jp

mclover.hateblo.jp

mclover.hateblo.jp

mclover.hateblo.jp

mclover.hateblo.jp

mclover.hateblo.jp

mclover.hateblo.jp

mclover.hateblo.jp

Webサイトでゲームのような画面揺れ演出を試作してみた


 


ゲームではダメージを受けたり何かが爆発したときに
画面を揺らす演出がよく使われるが、
それがWebサイト上で再現できないか考えてみた。


いろいろ調べてみたが、Javascriptで

document.body.style.transform = "translateY(100px)";

を使ってbody要素内をすべて移動させる方法が
一番楽で実用的なのではと思う。

<input type="button" value="一定の振動" onclick="InitVibrate();">

<script>
var count;
var width;

function InitVibrate()
{
  count = 150;  //持続時間
  width = 4;  //揺れ幅
  Vibrate();
}

function Vibrate()
{
  var offset;
  //プラスマイナス方向にズラす量を決める
  offset = Math.floor(Math.random()*(width*2+1)) - width;
  document.body.style.transform = "translateY(" + offset + "px)";

  count--;  //持続時間減少
  if(count > 0)
  {
    //一定時間後に再度関数を実行
    setTimeout("Vibrate()", 10);
  }else{
    //本来の位置に戻す
    document.body.style.transform = "translateY(0px)";        
  }
}
</script>

検索してもこういう事例がほとんど見つからなかったので、
もしこういう処理を実現したかった人は参考にしてみて欲しい。



mclover.hateblo.jp

運営型ではなくクリア型のゲームが見直される日が近いのではないか


ファミコンの誕生から40年あまり、
ゲーム業界はゲーム機の進化にとどまらず
その遊び方やビジネスモデルもさまざまに変化してきたが、
ここへきてまた大きく様相が変わりそうな気配を感じる。

運営型ゲームのコストと利益


スマートフォンのゲームを中心に、
無料でプレイしてもらった上で必要に応じて課金していくような
「フリー・トゥ・プレイ(F2P)」と呼ばれる収益モデルが多い。


消費者からすれば、一旦、試しにプレイしてから
遊び続けるかどうかを決められるので
好みの合わない作品に金を払うようなリスクを取らなくて済む。





しかしそういうスマホゲームも開発費はかかっているので、
利益を上げるためには、ある程度の人が
それなりの金額を課金してくれないと成り立たない。


また、このタイプのゲームは常にサーバーに接続するため、
ゲームが遊べる状態を維持するだけでもコストがかかるし、
新しいキャラクターやアイテムを追加したり
イベントを開催するための追加の開発費も必要になる。




つまり、「平均課金額×プレイヤー数」で得られる利益が
リリース前の開発費+追加要素の開発費+サーバー維持費×運営期間」を
上回っているかどうかがポイントになる。


特にサーバー維持費をはじめとするランニングコストが厄介で、
プレイヤー数が一定数を下回ったり
なかなか課金してもらえなかったりすると赤字となり、
遊んでいる人がいたとしてもサービス終了の判断が下る。
(オンライン対戦を主としたゲームも同様)

同時に遊べるゲームは限られている

ではサービス終了したゲームはデキが悪かったのかというと、
必ずしもそうとは限らないのだ。


売り上げが「平均課金額×プレイヤー数」で決まるということは、
儲かっているゲームはなるべく長期で運用して
課金してもらえる機会を作り続けようとする。
そうすると、新しいイベントやステージを定期的に追加して
プレイヤーを逃がさないことを狙った作品ができあがる。




しかし、遊ぶ側が覚えておけるルールや操作方法には限界があるのだ。
何本ものゲームを代わる代わるプレイするのは無理なので
掛け持ちできるゲームはせいぜい5本程度だろう。


つまり、新しいゲームを始めるには
今抱えている中から1本手放す必要があるが、
それまでに資金や時間を投入していればいるほど
やめる決心をするには勇気がいる(サンクコスト効果)。




その結果、安定した利益を出せる限られた枠は
ごくわずかな人気ゲームに占有され、
運営期間が長くなるほどその存在は盤石になっていく。
新しい作品がそこに入り込む余地は限りなく小さく、
同様の作品の山に埋もれたまま誰にも気づかれずに消えていく。


そうなるとゲーム自体が無料なだけに
開発費が回収するチャンスがほとんどないので
運営型のビジネスモデルだと一部の強者しか生き残れないのだ。


大手企業が運営しているゲームであっても
サービス終了を発表することが珍しくなくなり、
そろそろこのビジネスモデルは限界が近いように思う。
言うなれば終わらないゲームの終わりだ。

クリア型ゲームにはメリットが多い

そのあたりを踏まえると
「ある程度までプレイしたらクリア」という従来のスタイルの方が
開発する側にも遊ぶ側にも優しい
のだ。




買い切り型なので最初に売り上げが見込めるし、
発売後に運営を続けるランニングコストも必要もない。
また、クリアしたらプレイヤーは次のゲームに移るので
特定のゲームばかりにずっと居座られることもない。





遊ぶ側は最初に代金を支払う必要はあるが、
いつまでもダラダラと時間を奪われることがないし、
クリアした段階でスッキリとやめることができる。
「ソシャゲ疲れ」のような本末転倒な状態も避けられる。


かといって莫大な資金を投入した超大作はコストの回収が難しいので、
そこそこのクオリティとボリュームで作られた
クリア型のゲームに回帰していくのではないか。
インディーゲームが勢いづいているのも似たような理由だろう。


スマホゲームを毎日立ち上げ、義務感でプレイしているような人は
自分がゲームに何を求めているのかを振り返り、
クリア型の作品にも目を向けてみて欲しい。
達成感とともに作品から解放される気持ちよさは格別だろう。



mclover.hateblo.jp

mclover.hateblo.jp

note.com

視界の内外判定を活かす3Dゲームの事例


2Dゲームと3Dゲームは開発する上でかなり大きな違いがあり、
「上下左右に奥行きが追加されるだけ」と思うかもしれないが、
特に意識しなければいけないのがカメラの存在だ。




2Dゲームは画面というキャンバスに描いていくイメージなので
表示した画像は必ずプレイヤーに見える状態になる。




しかし3Dゲームは立体空間に配置された物体に対して
カメラが見ている内容が画面に表示される。
たとえ3D空間に「描画」されていても
カメラの視界に入っていなければ画面には映らないのだ。




カメラが見ている範囲は台形が立体になったような形になり、
これを「視錐台(しすいだい)」と呼ぶ。


3Dモデルが視錐台の中にあるかどうかを判定すれば
その物体が画面に映っているかどうかが判別できるわけだが、
それによって描画負荷を下げる視錐台カリング以外にも
さまざまな利用方法があるのでいくつか紹介してみる。

死んだ敵をさりげなく消す


多くのゲームでは敵キャラクターが出てくるが、
倒した敵(=死体)は特に役に立たないし、
描画することで処理負荷がかかるので
プログラマーの立場から言えばさっさと消してしまいたい。


かといって死んだときにパッと消すと変に目立ってしまうし、
半透明になってジワジワ消えていくのも
リアルな世界観だと不自然に感じる。


そこで視錐台の外に出たタイミングで死体を消すのだ。
そうすれば消える瞬間が見られることはなく、
死体から目を離したタイミングでさりげなくいなくなる。

見えている敵だけが攻撃してくるようにする


複数の敵が主人公を取り囲むようなゲームは多いが、
画面外の見えない場所から敵の攻撃が飛んできたりすると
避けるチャンスがなくて理不尽に感じてしまう。


そこで視錐台の中にいる敵にだけ攻撃させるのはどうだろうか。
これなら見えていない場所から攻撃されることはないし、
敵キャラは視錐台を目指して移動するよう処理すればいい。


プレイヤーが戦いやすいよう
敵が配慮するのは違和感があるかもしれないが、
時代劇で敵が1人ずつ順番に斬りかかるのと同じようなものだ。

見ているときにイベントを発動する


ストーリー性の強い作品だと、いろいろなイベントが
リアルタイムに展開されることがあるが、
3Dゲームの場合はカメラの向きがプレイヤー任せなので
物事が起きている方向を見ていない可能性がある。


ムービーシーンに移行すれば見せたいものを見せられるが、
ゲームとして操作できない状態に切り替わるのは
プレイヤーの感情移入が途切れてしまうデメリットがある。


そこで視錐台に入ったタイミングでイベントを発動するのもいいだろう。
そうすることで肝心なところを見逃される可能性がなくなり、
プレイヤーが目を向けている間にイベントを再生できる。

まとめ

枯れた技術の水平思考」と同様の考え方だが、
ある目的のために習得した技術を
それとはまったく別の用途で利用することができれば
その価値を何倍にも引き上げることができる。


持っている知識や技術が同じでも
いろいろな使い道が提案できるだけで
他の人より役立つ人材になれるのだ。



mclover.hateblo.jp

mclover.hateblo.jp

3Dゲームではいろいろな手段で描画するポリゴン数を減らしている


3Dゲームではキャラクターも建物も
原則として立体的な3Dモデルとして作られている。




たとえばこういう3Dモデルの場合、



小さな板をつなぎ合わせて各部が表現されており、



その最小単位は「ポリゴン」と呼ばれる三角形だ。


ポリゴンがたくさんあるほど
綺麗な曲面や複雑な形が表現できるが、
枚数が増えるにしたがって処理が重くなる。
そこで、いかにゲームを遊んでいる人にバレないよう
描画するポリゴン数を減らすかが勝負になる。


これには先人たちが編み出したいろいろな工夫が詰まっているので
代表的でわかりやすいものを紹介してみよう。

覆われていて見えないポリゴンはサボる


立体物を眺めるとき、背後にある面は見えない。
手前に見えている面だけを見て
「きっと向こう側にも同じような面があるんだろう」と思うわけだ。




通常、立体物はポリゴンで覆われた「閉じた状態」にあるので
どの方向から眺めても外側の面が見える。




手前のポリゴンを取り除けば内側の面が見えるが、
これらのポリゴンは普段は隠れているわけだ。


そこで3D空間を眺めるカメラに対して
内側(正確には裏側)を見せているポリゴンは
描画しないようにする。これを「隠面消去」などと呼ぶ。




どうせカメラからは特定の方向しか見えないわけだから
隠面消去すれば描画が必要なポリゴン数は半分ほどになる。
シンプルな割に効果的な手法だ。

遠くて見えないモデルはサボる


ポリゴンを豊富に使ったモデルは「ハイポリ」と呼ばれ、
見た目は滑らかで美しいが、描画したときの負荷が高い。




対して少ないポリゴン数で作った「ローポリ」は
描画するための処理は軽いが、見た目が貧相になる。




しかしカメラに対して遠くに表示されていれば
ローポリとハイポリの違いはほとんどわからない。


そこで遠くにあるときはローポリを描画し、
ある程度カメラが近づいたらハイポリに差し替えるのだ。
これを「Level of Detail」、略して「LOD」と呼ぶ。


とりあえず最初に高精細のハイポリを作っておき、
ツールの機能などを利用してローポリに変換すれば
それほど大きな手間をかけずに両方がそろう。
これも非常によく使われる定番の手法だ。

視界の外で見えないモデルはサボる

3D空間の中には敵や建物、植物やアイテムなど
世界を形成するたくさんのものが存在しているが、
カメラの視界に入っていなければ画面に映ることはない。




遠い景色ほど広く見渡せるわけだから
カメラが見ている範囲は奥の面が大きい台形のような形になる。


直方体を変形させたようなこの立体は
四角錐台(しかくすいだい)というものだが、
視界を表す四角錐台は特に「視錐台(しすいだい)」と呼ぶ。


この視錐台に接していないモデルは画面に映らないわけだから
描画しなくてもなんの影響もない。




たとえば水平方向の視野角が90度だとすると、
カメラを取り巻く360度の世界のうち
わずか4分の1しか見えていないわけで、
大半の描画を省略するチャンスがある。


この方法は「視錐台カリング」と呼ばれ、
視界の外にあるものを描画しないことで
大幅な処理軽減をすることができる。

まとめ


最近の3Dゲームでは他にもいろいろな工夫がされているが、
とにかく「バレないように処理をサボる」ところがポイントで、
現実世界と同様に描かれているように見えて
実はさまざまなところで手抜きをしているのだ。
そういった視点でゲームを遊んでみるのもまた面白い。



mclover.hateblo.jp

mclover.hateblo.jp