忍者ブログ
ゲームを作ったり、ゲームを遊びまくったりしている せっき~の生き様。   まずは目次をご覧ください
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2012年8月21日 にあった、CEDECの講演についての記事です。


『GRAVITY DAZE/重力的眩暈:上層への帰還において、彼女の内宇宙に生じた摂動』
携帯型エンタテインメントシステムゲーム機 PlayStationレジスタードトレードマークVitaにおけるオープンワールドゲームの作り方




GRAVITY DAZE


講演内容を 大きく2つに分けて まとめました。
主に データの管理の手法 についてです。

(スクリプトについてはこちら  http://sekigames.gg-blog.com/Entry/244/ )


-------------------------------------------------------------------

●まず オープンワールドの定義

ジャンル?
街を自由に移動できる?
ステージに境目が無い?
ロード時間に切れ目がない?

→ いろいろな物がシームレスに繋がっている と言う事



●『GRAVITY DAZE』のオープンワールド性について

GRAVITY DAZE

・ゲームの世界が立体的な構造を持つ

 水平方向に ±1km
 上下方向に ±7km  

の広さを持たせている。
(普通のゲームの場合 水平方向にのみ 世界が広がっているけれども)



全方位アクション

重力方向を変える空間移動

主人公は壁に立てる。
→ 全方向に落ちて大丈夫なよう、コリジョンを設定



・大量のオブジェクトを配置

→ できるだけ壊せるようにした。



●オープンワールドのデータの持ち方について

ゲーム世界は、連続性のあるデータで構成されている必要がある。

→ 原点が1つだけ
  プレイヤーの座標系も1つだけ


地形の連続性に従って、データを連続的に バックグラウンドで読み替えるように実装しないといけない。



-------------------------------------------------------------------

●オープンワールドを作るのは 難しい?

できるのだろうか?

→ やった事がない
 ボリューム的に) 作りきれるのだろうか?
 (通常の開発では) ステージを分けるなどして、分割統治をしてトラブル解決するのだけれども それと全く逆のやり方だ 



めんどくさそう、扱いにくそう

→ 特殊対応や、その場のごまかし が向いていない
  全体として一定の水準を保たせた、厳しい品質管理が必要
  全体ボリュームの見積がやりにくい


オープンワールドのゲーム作成は、チームにとって 大変なチャレンジだった。



●オープンワールドにして (結果的に)良かったこと

・世界は一つだけ と言う事

 概念として 理解しやすい
 一貫性に優れる
 見た目の統一感
 無駄な重複がない  (一つの町に、同じ形の建物を置きたくない とか)
 効率を重視するようになった


など、オープンワールドは 意外と良かった



-------------------------------------------------------------------

●広大な街を表現するデータ構造と読み込み戦略


メモリに入りきらない

→ プレイヤーに移動に合わせて、エリア毎にデータを読み替えていく
→ AABBでエリア分割した。
  (Axis Aligned Bounding Box 軸に並行な直方体)



・遠くまで見える

→ LODが必要  (Level of Detail)
→ ワールドをツリー構造にして管理した。

 

・プレイヤーが高速で空を飛んで移動する

→ エリアを通り抜けた時や、読み込み遅延が起きた時に問題となるので
 対応が必要



-------------------------------------------------------------------

●データ構造について

ツリー構造にした

こんな感じ
15ed6729.jpeg
エリア一つは 大体80m
一つの街は、12~32個のエリアで構成されている との事




・アルゴリズム

(図は 灰色はダミーモデル 、は 詳細モデル を示しています)

プレイヤーがエリア外に居る時、ダミーモデルを読み込む
→ 読み込みが完了次第、ダミーモデルを表示
GRAVITY DAZE


プレイヤーが接近したら 詳細モデルを読み込む
→ ここで、子エリアダミーモデルも読み込み始める
GRAVITY DAZE


プレイヤーがエリア内に入ると、詳細モデルを表示する
→ 子エリアのダミーモデルを表示
  近くにある子エリアの詳細モデルを読み込み
GRAVITY DAZE

→ と、次々必要な詳細モデルを読み込み 出していく

(ダミーモデルは、詳細モデルを読み込み次第 捨てていく)



・プレイヤーが高速移動で通り過ぎた場合
GRAVITY DAZE
→ 子エリアの読み込みを中止する



●まとめ

この仕組みはシンプルで、実装は容易だった

→ 概ね問題なかった
→ 後は データの調整、ブラッシュアップで うまくできた。
 (重そうなところは エリアを分割したり など)



-----------------------------------------

●緊急読み込み処理 について

プレイヤーが高速移動している時に、データの読み込みが間に合わなかった時

→ 最悪、建物をすり抜けたり 壁に中に入ってしまったりする。
GRAVITY DAZE

→→ 大問題


各エリアに「緊急読み込み発動領域」を用意した

→ このデータは 全てオンメモリ

→ プレイヤーが まだ読み込みが完了していない所の 「緊急読み込み発動領域」に侵入しようとした場合 
 ゲームを停止させ、データを完全に読み込み終了するまで待った。
  (ゲームが 数フレーム ~ 数秒止まる)
GRAVITY DAZE

→→ これは、あくまで緊急用処理

→→ 基本的には こういう事が起きないように レベルデザインを心がけてもらった
  (しかし、メディアの読み込み状態に依存するため いつ問題が起きるかわからないので、必要な処理)



●最終的に どうなったか?

歩く速度なら 全く問題なし

もの凄い速度で飛ぶと (ゲーム終盤、キャラクターの成長によってなど) 間に合わない事も起きた


読み込みのスケジューリングの制御がうまくできない事もあり、100%期待通りのスペックにはならなかった

→ 個人的には まだ足りない所を感じつつも、製品としては 問題ないレベル

→→ 今後とも 研究は継続して行っていく



-------------------------------------------------------------------

●パフォーマンスの最適化

とにかく 物が多い

→ 至るところで破壊可能

  1エリアで 1000もの動くオブジェクトが
  5000ほどの背景オブジェクトがある

→ それらを全部ちゃんと動かしていたら、処理落ちでゲームにならない



・プレイヤーの周りの物しか動かさないようにした

→ プレイヤーの近くかどうか? は、AABBによって判定

→ 近くにないオブジェクトは システムの大元から強制的に処理をさせないようにした


→→ プレイヤーから離れたオブジェクトは 地形を貫通するおそれある
  (当たり判定チェックしないので)

  遠くの敵はコリジョンチェックをせず、あらかじめ設定されたパスを動くのみ
  物を遠くに投げた場合、遠くの電柱をすり抜けてしまったりする


→→ レベルデザイナー、AI担当者 は苦労した

  プレイヤーから離れた場合、処理が行われない事を理解した上で 物を配置したり、ルーチンを書く必要がある



→→→ しかし、処理は物凄く速くなった!!!



●つまり

処理しない と言うのが一番早い

絶対的に数が多いので、思い切る所が必要



-------------------------------------------------------------------

●量産効率のためのスクリプトの利用


これについては、 http://sekigames.gg-blog.com/Entry/244/ にて まとめました。




-------------------------------------------------------------------

●まとめ

やってみて、オープンワールドのための 特別な技術 と言うのは無かった
(全て 既存のゲームで使う技術)


一番重要なのは、シームレスである事を 常に意識すること


PS VITAで、オープンワールドを作ることは可能だ」 と言う事を証明することができた

→ 十分な性能、大きいメモリ、シリコンメディア

→→ オープンワールドは怖くない!!



 

拍手[2回]

PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
» 無題
素晴らしいです
プログラマさん達は、ユーザーの知らない所で色々考えてやってるんですね
NONAME 2012/09/25(Tue)19:43:32 編集
» supreme
I have to point out my affection for your kindness giving support to those people that need guidance on that theme. Your personal dedication to getting the solution across became certainly advantageous and have regularly empowered some individuals much like me to reach their objectives. This informative report entails a whole lot to me and substantially more to my fellow workers. Thanks a ton; from all of us.
supreme URL 2017/08/04(Fri)22:51:58 編集
プロフィール
HN:
せっき~
性別:
男性
職業:
ゲームプログラマ
自己紹介:
古いパソゲー、ボードゲーム、カードゲームを熱狂的に遊んでいます。


ついったー
http://twitter.com/seki_seki_seki

連絡先は
sekisekiseki(あっと)gmail.com
最新コメント
[08/13 sites de filmes online]
[08/13 nike air force]
[08/12 http://www.linux.net]
[08/12 evcilanlar]
[08/11 receitas detox liquid]
カウンター
ついったー

Copyright © [ せっき~のゲーム屋さん ] All rights reserved.
Special Template : 忍者ブログ de テンプレート and ブログアクセスアップ
Special Thanks : 忍者ブログ
Commercial message : [PR]