俺の話を聞け!!LT大会 in Tokyoの発表資料です。 https://orehanatokyo.connpass.com/event/82057/
オッサンの話を聞け!!いにしえの開発話!!カワハラ ヒデアキ
View Slide
自己紹介川原 英明(0x31歳)Twitter @sapi_kawaharaFacebook kawahara.hideaki.0204働いて、来月でいよいよ30年目に突入です、この激動の中で、多くの経験をしてきました。Web系の仕事では、Perlから始まり、Java、PHP、Pythonなどを駆使し、現在、小さな会社で契約社員をやり、とある所で仕事してます。
いにしえの開発?みなさんは、何を思い浮かべますか?
こんなのですかね?
これかな?
唐突ですが、オッサンあるある!1. フロッピーディスクの話をする。2. カセットテープの話をする。3. ハードディスクがMBしか無い時代の話をする。4. メモリーがMBしか無い時代の話をする。5. 総称してPC-9801の話をする。6. インターネットに接続する「モデム」の話をする。7. パソコン通信時代の話をする。8. テレホーダイの話をする。9. 技術系の話では16進数の話をする。10. DOS(Windowsが登場する前のOS)の話をする。
それを聞いて面白く無いですよね?
だから、面白くないので、オッサンあるあるの話はしません。
じゃあ?どんな「いにしえの開発話」をするのか?その前に!
自己紹介に追加しますWeb系の仕事をする前は、コンシューマーゲームのアプリ開発をしていました。アセンブラでの開発は、6502(ファミコン)、GB80(ゲームボーイ)、Hu6502(PCエンジン)、65816(スーパーファミコン)、68000(メガドライブ)、SuperH(セガサターン)、R3000(プレイステーション)でしてました。C言語での開発は、セガサターン、プレイステーションでしてました。C++での開発は、プレイステーション2でしてました。
と言うことで、コンシューマーゲームの開発話をします。
アジェンダ若い人が多いので、プレイステーションの話をします。1. 開発側から見た環境についての説明です。2. バグ多いぞ!プレイステーション!3. 倍速CDで快適な読み込み、そんなもん夢です。4. モーションJPEGの悪夢。
プレイステーション開発環境1. DOS/V機で、OSはWindows95です。2. IDEは、Visual Cを使ってました。3. 開発マシンは、ISAバスを2本使います、CD-ROMエミュレーターを合わせると、ISAバスは3本使います、お値段150万円です。4. C言語は、意外と思われますが、gccです。5. ライブラリーは、ソニー提供です。6. 基本的なところから、パッドの入力、CDコントロール、音楽再生、動画、2D画像ライブラリー、3D画像ライブラリー、ほとんどをC言語から呼び出すことが出来ました。7. ライブラリーマニュアルは、辞書並みに暑くて、タオルを巻いて枕にしてました。
バグ多いぞ!プレイステーション!1. 盛りだくさんのライブラリー、当然ながらバグも多かったです。2. バージョン2になるまでは、全てのライブラリーにバグが有ると言っても過言では無いです。3. 小さなバグでは、音声ボリュームで、音量を下げるというプログラミングすると、音量が上がると言うシャレみたいなバグまで有りました。4. 3D画像ライブラリーでは、テクスチャーの裏面とか表示しなくて良いところも、表示するとか処理速度的にクソな実装が有りました。5. 一番インパクトが有るバグは、glibcにバグが有りました、なぜインパクトが有るのかと言うと、glibcはプレイステーション本体のBIOS ROMに焼かれているからです。6. Glibcのバグで、mfreeが行えないと言うバグは、最初は冗談かと思いました。(Java開発的に言うと、GCしてもフリーメモリーが増えません)
倍速CDで快適な読み込み、そんなもん夢です1. CD−ROMの仕様で最大の欠点は線速度一定(CLV)です、常にCD-ROMの回転速度を変えるためキュルキュル音が鳴り、読み込める速度になるまで、アプリは待たないといけない。2. セガサターンのGD-ROMはCD-ROMを容量増やして角速度一定(CAV)にしたのでよ読み込みだけは早かったです。3. 基本的なCD-ROMのフォーマットで作られておりFATも有り、PCエンジンのCD-ROMのようにFATが無い構造よりは、作りやすかったのです。4. しかし、バグが多いプレイステーション!ここにも罠が有りました!
FATをキャッシュしない!FAT: FILE ALLOCATION TABLE
FATにキャッシュが無いと、どうなるか?1. アプリがファイル名を指定して、ファイルをオープンする。2. プレイステーションが、FATを読み見に行く。キュルキュル!3. アプリがオープンしたファイルのデータを読む。キュルキュル!4. アプリがファイルをクローズする。5. アプリが別のファイルをオープンする。6. プレイステーションがFATを読みに行く。キュルキュル!7. アプリがオープンしたファイルのデータを読む。キュルキュル!8. アプリがファイルをクローズする。9. 以下、ファイルを読みたびに、これの繰り返しです。
この罠の対処方法1. 初期アプリは、対応してないのが多いので、画面切り替え時、遅くなかったですか?原因は、これです。2. 自分は、しょうがないので、独自のFATを持ち、独自のファイル関数を作成して対応しました。3. 多くの会社で、このような対処をしていたと聞いていますが、ソニーさんは最後まで、この問題は仕様として対処はしないまま、プレイステーションの歴史が閉じられました。
モーションJPEGの悪夢1. プレイステーションの動画はモーションJPEGです。2. 簡単に説明すると、JPEG画像を高速に切り替える、それだけの仕様です。3. 読み取り速度は、倍速なので、1秒間で0.3MB、300,000B / 30 = 10,000B が一コマに使えます。4. ちなみに、今のスマホで写真撮影すると、2MBぐらいです。5. 320 x 240 の解像度と言っても、かなりタイトなサイズです。6. 更に、ここにも罠が有りました!
ソニー提供のツールが使えない!
ソニーは、高圧縮ツール1. ソニーのツールは、1コマを10,000Bに収めるため、一番圧縮しにくい画像を基準に、圧縮率が決めらていました。2. つまり、静止画でも、物凄い高圧縮されます、そのためモアレがひどかったです。3. 自分たちは、解析の結果、プレイステーションの再生側の圧縮パラメータが可変であることに気づきました。4. 画像にあった圧縮パラメータで圧縮するツールを作成しました!5. でも、ツールを作ったのは良いのですが「画像にあった?」と言う部分は、どうしたのか?
時は1996年の春
20世紀の話1. 1996年当時、今から20年以上の前の話です。2. 当然ながら、AIとか機械学習なんていう時代の前です。3. 一応、努力して画像判定などはやりましたが、半分ぐらい、うまくいくぐらいでした。4. しかも、この当時は、アナログキャプチャーの時代で、どうしても取り込みノイズが出てしまい、これがモアレの原因になりました。5. そんな時、大人の事情で発売が半年伸びました。6. せっかくだから、動画をもっと綺麗にしようということなりました。7. しかし、自分は、既に別のプロジェクトの作業なので、画像判定は、そのままで、どうしても綺麗にならないところを!
人海戦術で対処!
人海戦術のレシピ1. 画像1枚1枚を見て、キャプチャーノイズを手作業で除去!2. 作成された動画と比較して、モアレが出ているところも、手作業で平坦な色に塗り替える!3. 画像1枚ごと、圧縮後のサイズが最大10,000Bになるように、圧縮パラメータを変更して圧縮を行う。4. 1秒30枚なので、3分動画だと、3 x 60 x 30 = 5,400枚 を人海戦術でクリアしました。5. 自分は、土日に手伝ったなー。
まとめ1. こんな苦労をして、ゲームのアプリは世の中に出てます。2. プレイステーション時代は、多人数で開発してたので、人海戦術とか使えました。3. 今は、自分はゲームは作っておりませんが、恐らく今も変わらないでしょう。