LoginSignup
0
0

More than 5 years have passed since last update.

光ディスクとロード時間 @ゲームプログラマの小話[開発:IO]

Posted at

光ディスクとロード時間

2017年現在、光ディスクをメインメディアとして扱うゲーム機は昔と比べて減ってきました。国内で浸透している現役ハードだとPS4、(Switchに移行しつつありますが)WiiUぐらいですね。それ以外はフラッシュカード。

BDディスクを扱うPS4もHDDにデータインストールして基本はそこから読むソフトが主流だったりして、今回扱うトピックはもはや役に立たない時代になりかけています。

時代的にそんなあんまり重要じゃないトピックですが、知っておくと光ディスクのロード時間最適化の役に立つかもしれません。

光ディスクとは

DVDやBD(ブルーレイディスク)のことを今回は光ディスクと呼ぶことにします。

光ディスクはレーザー光をディスクに照射し、反射された光をレンズで読み取りデータをロードします。レーザー光を出したり、それを読み取ったりするのはDVDドライブやBDドライブが行っています。

光ディスクには2層と呼ばれる形式のものがあり、2層式だと1層式よりも多くデータを格納することができるようです。照射するレーザー光を変えることで反射するデータを1層目か2層目かを切り替えているようです。

円周とデータ格納量の関係

さてそんな光ディスク。ご存じの通り円盤でその円盤にデータが格納されています。

円盤にはレコード盤のように何周ものデータの列があります。

また、円盤ですから内側に行くほど円周の長さは短くなり、外側に行くほど長くなります。光ディスクのデータの格納量はこの円周の長さに比例します。

つまり、1周という単位で見ると、円盤の内側よりも外側の周のほうがデータをより多く格納できます。ここがポイント。

読み取りヘッドとシーク時間

円周の話はいったんおいておきまして、もう1つ大事な話。ドライブ側の話です。

レーザー光を出してディスクに反射させデータを読み取るパーツをヘッドと呼んだりピックアップと呼んだりします。ディスクの内側のデータを読む場合はこのヘッドを内側に移動させ、外側のデータを読む場合は外側に移動させます。

このヘッドが移動する時間をシーク時間と呼びます。シーク時間は実際にデータを読んでいる時間ではなく読むために準備している時間ですので、シーク時間を少しでも減らせられればデータのロード時間も減ることになります。

データの配置場所は指定できる

さて、ここからロード時間を短くする話をしていくのですが、まず大前提の話をします。

これ以降の話は、『各データを光ディスクの円周のどのあたりにおくか』ということを指定する手段が用意されているプラットフォームでのみ通用する話になります。(※代表的なプラットフォームでは用意されています)

そんなこと指定できるんですねぇ。私もコンシューマ機のプロジェクトに参加したときに初めて知りました。

配置を工夫してシーク時間を減らす

ロード時間を減らす1つの方法としてシーク時間を減らす方法があります。

例えば データA、データB、データC を順番に読み込むとします。

もし、このような配置だったとき。

  • データAの配置場所:内側
  • データBの配置場所:外側
  • データCの配置場所:内側

この場合、データAを読み込んだあと、データBを読み込む際にヘッドが内側から外側に移動します。つまり、このとき長めのシーク時間が挟まってしまいます。データBが読み終わったあとのデータCを読み込む際も同様の現象が起こります。

この例ですと、3つのデータを内側に置くか、外側に置くか統一できるとシーク時間をぐっと減らすことができ、結果ロード時間が短くできます。

ちなみに、ヘッドが大きく動くとき、ディスクドライブによっては「キュッキュッ」という音が鳴ります。この音が聞こえたら何かしら無駄な時間が発生している証になります。もしゲームをプレイしていてキュッキュッ音が聞こえないのでしたら、それはエンジニアさんががんばっている証拠です。

外側のほうがロード時間が短い

ディスクの外側のほうが円周が長いため内側と比べデータを多く格納できる、という話をしました。

そして、ディスクの回転スピードは基本的に一定です。

つまり、データを外側に置くだけでロード時間が短くなります。特に内側にしたい理由がなければぜひ外側に置きましょう。

2層対策

(注意:筆者は2層式光ディスクを実際に使ったことがないので想像で話している内容が含まれます)

1層目から2層目、2層目から1層目に照射するレーザー光を変化させる際にもヘッドのシーク時間と同様に待ち時間が発生する、という話を聞いたことがあります。ですので、一度に読み込むデータはどちらかの層になるべく固めておけるとよりロード時間は短くできます。

もし、どうしても両方の層にまたがったデータをロードしないといけないときは、1層目のデータを全部ロードしおわってから2層目のデータをロードする、といったような対策をとり、レーザー光の変化回数を最低限に抑えるようにしましょう。

あと、そもそも2層式は1層式と比べてロード時間が長くなりがち、という話も聞いたことがあります。ですので、あとちょっと容量を減らせば1層式に収まるというケースであればその方法を検討してみることもありかもしれません。

おわり

リンク:ゲームプログラマの小話-目次

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0