2015年03月17日の日記です

目次

03-17 ジョン・バッカスの命日(2007)
03-17 手相開発時の技術話(3)


ジョン・バッカスの命日(2007)  2015-03-17 09:34:05  コンピュータ 今日は何の日

▲目次へ ⇒この記事のURL

今日は、ジョン・バッカスの命日(2007)。


虎は死んで皮を残す。人は死んで名を残す。

ジョン・バッカスは、FORTRAN と ALGOL と BNF を残しました。




FORTRAN は、世界最初のコンピューター言語。


これ以前にもアセンブリ言語はあるし、わずかながらアセンブラ(アセンブリ言語で書かれたプログラムを、機械語に変換するプログラム)もありました。


でも、アセンブラは必要に駆られて作られた「表記法」程度のもので、言語と呼ぶのはちょっと違う感じ。

人間にとっては無意味な「機械語」と、1対1対応だからね。



そんな時代に、バッカスは数学者が書いた数式を、ほぼそのまま計算できる言語を作り出しました。

それが FORTRAN でした。


人間にわかりやすいような…機械語でない言語でのプログラムなんて不可能だ、と明言する学者もいた時代。

プログラム言語が「可能」であることを示すには、ただそれを作ってみせればいいだけでした。


これは非常に難しいチャレンジでしたが、FORTRAN は成功しました。

ただ、この時は「実証する」ことが最大の目的で、使いやすさとかは考えてません。




もっと使いやすい言語ができるはず。

多数の計算機学者が集まり、「美しい言語」の設計が始まります。


バッカスも、当時唯一の「実際に動く言語を作成した経験者」として、この会議に加わっています。


そこで策定された言語が ALGOL で、文法構造は非常にシンプルになっていました。


この、シンプルな文法構造の表現に使われたのが、BNF 。バッカス・ナウア・フォーム(バッカス・ナウア記法)の略です。

ナウアは、バッカスと共にこの記法の策定にかかわった人物。



BNF は非常にシンプルで強力なため、今でもいたるところで使われています。

特に、インターネットのプロトコルなどは BNF で書かれるため、現代プログラマの必須知識。




現代の言語の多くが、BNF で記述できることを前提に設計されています。

その意味では、どの言語も ALGOL の子孫。


中にはそうではない変態言語もありますが…

perl なんて、単純に BNF で記述できない言語のひとつ。


でも、BNF で書けない、というのが悪いことではない。

BNF で書くと、厳密で強固な言語となる一方、回りくどい書き方をしなくては記述できないことがあります。


perl は、その回りくどさを無くすために、あえて BNF で記述できない文法を採用している。

だから、ややこしい処理を非常に簡潔に書くことができます。


80年代の BASIC なんかも、BNF で書けませんでした。

BNF で書かれた言語って、プログラマから見ると美しい一方、あまり初心者向けではないように思います。




…と、ここでは、ざっくりした説明にとどめておきます。

バッカスについては、過去に書いた記事に詳しいので。


もっと知りたい方は、是非以下の記事も読んでみてください。


ジョン・バッカスの誕生日(1924/12/3)

「計算機言語」が生まれた日(1956/10/15)



▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

コンピュータ

今日は何の日

別年同日の日記

04年 誕生日?

08年 いろいろ書く

08年 下の子入院

11年 自宅待機

11年 「輪番」停電について

12年 windows8

17年 長男卒業式

22年 【訃報】近藤淳さん

24年 国立西洋美術館


申し訳ありませんが、現在意見投稿をできない状態にしています

手相開発時の技術話(3)  2015-03-17 10:28:48  業界記

▲目次へ ⇒この記事のURL

手相では、CD-DA も使われました。

System32 から CD 制御して、音を流すのね。別に CD-ROM とかではなく、単に音楽再生しているだけ。


この事は以前に書いていますね。



企画の人から、占いの説明などをアニメっぽい動きで説明するから、音に合わせて動かしてね、と言われていました。

CD には、すでに音楽と一緒に、絵コンテに合わせたタイミングでナレーションなどが入っています。


#絵コンテには、アニメーションのタイミングを秒単位で指定してありました。




さて、音源が基板上にある物であれば、「音と映像」を同期させるのは、それほど難しくないです。


映像に音をあわせたいなら、効果音を出すようにサウンドドライバに指令を出すだけ。

逆に、音に合わせて映像を動かすなら、音楽の中に「タイミング」を示すデータを入れておいてもらって、サウンドドライバからタイミングを教えてもらいます。


でも、CD に合わせて、となると、タイミングの目安となるものがなにもありません。



安いポータブル CD プレイヤー買ってきて、音を聞きながら絵コンテに合わせてキャラを動かします。

何度も何度も、動かしながら調整していくしかない。


#この時点では、まだ CD を System32 から制御する基板を貰ってなかったように思います。

 だから、自分で CD プレイヤー買うしかなかった。


…デザインの人も、同じ絵コンテ見て絵を描いているのですが、どう考えてもこの動きが出来る絵ではないだろう、ということもしばしば。

どうやって動かそうと思ってました? と聞いても「え、特に考えてない。なんとなく動くかな、と…」。


しかし、このゲームやたらと絵が多かった。しかも、多数ある説明アニメの1枚で一瞬出てくるだけの絵、とかもある。

そういう絵にダメ出しして描き直させていたら、時間がもったいないわけです。


まぁ、そんな具合なので「無理やり動かした」ものも多数。

細かく動きを設定していると気になる、というだけで、普通に見たら普通に見られますので、問題ないです。



企画の方がアニメ好きで、同人誌なんかも描いている人だったので、それなりにわかりやすい絵コンテだったのが救いでした。

この時の、どんどん動きを作っていく作業は楽しいものでした。


#占いの内容に応じて、なので、数十種類作ったと思う。

 1か月くらい、ひたすらアニメの動きを作り続けていたのではないかな。




System32 から CD を制御できるようになってみると、思っていたのと少し違うタイミングで音が出てしまったりします。


「再生」を指示しても、そのタイミングですぐに音が再生されるわけではないのね。

読み取りヘッドがシークして、それから本当の再生が始まる。


ここで問題になるのが、シーク時間が一定ではない、ということです。

直前にかかっていた曲によって、ヘッドの位置が違うから、シーク時間も変わってくる。



これは、曲番号を指定して「再生」した後に、すぐに一時停止を指示することで解決しました。

一時停止が指示されても、シークは行われます。しかし、一時停止中なので演奏は始まりません。


0.5秒くらい待ってから一時停止を解除すると、すぐに曲が演奏されます。

その時点では、もうシークが終わっているから、すぐ演奏に入れるのですね。


これで、完全に曲と映像をあわせることができました。




企画の人のイメージでは、画面などは「全体にウゴウゴルーガっぽい感じで」でした。


#当時人気のあった、子供番組のふりをした番組。

 番組タイトルが、1993年の流行語大賞を受賞するくらい人気でした。

 ずっと後に、「日本のメディア芸術100選」にも選ばれています。



ウゴウゴルーガは、画面を常に「ガチャガチャとした動き」で動かしていました。


だから、これを目指して、アニメも余り滑らかすぎる動きをしない。

文字も常に動かし続ける。



先ほど書いた、アニメを無理やり動かした、という話も、この「全体の雰囲気」に助けられてます。

それじゃないと、不自然な動きはやっぱ不自然だもの。


文字は、ウゴウゴルーガでは手書きの文字を何枚も書いて動かしているのだけど、手間暇もかけられないし、時間もないので絵としては一つだけ。


ただ、常に座標を変えてガクガクと動かし続けています。

「読みにくくならない程度に常に動かす」のは、文字ごとにちょうどいい動きが違う。


最後の方には慣れて、見ただけでちょうどいいパラメータが思い浮かぶようになったけど、基本的に試行錯誤。




画面周りの技術面で、非常に細かなどうでもいい話。


System32 では、フレームバッファスプライトと、複数枚のスクロール画面が使えます。

サターンと似た構成


#サターンは、System32 の家庭用として開発が始まった、という噂もあります



この「スクロール画面」は、レジスタをいじると即座に(次のフレームで)位置が反映されます。

スプライトは、表示座標などを設定すると次のフレーム(1/60秒)で裏画面に描画し、さらに次のフレームで表示されます。


つまり、スクロールとスプライトは、1フレームずれて表示されるんだわ。

完全に表示を一致させたいなら、スクロール表示の設定を一時溜めるバッファでも用意しておいて、わざと1フレームずらせばいい。


でも、当時はそんな簡単なことを気付かず、やってません。

画面がカットインする(背景の上にキャラクターが乗ったものが、画面横から入ってくる)ような演出があるのだけど、スクロール時にスプライトが少しずれている。


まぁ、作った自分は気になっているけど、見た人は誰も気づかないだろう、という程度の問題です。



原因がちゃんと理解できていない時に、ずれるなー、なんでだろうなー、って何度も見ていたら、先輩プログラマ(手相の先輩とは別)に、「そういうハードだから合わせる方法は無い」って断言されました。


いや、合わせられないってことはないだろ。1フレームずれるだけだから合わせる方法はある。


常に1フレーム待って設定しようか、とか考えたけど、面倒なことになるからやめました。

後で考えると、バッファを数バイト用意すれば、それだけで済む話なんだけどね。



合わせる方法が無い、って言った人も、別に技術力が無いわけではないです。多くのゲームを作ってきた人だし。

ゲーム作るうえでは、こんな細かな話は「些細な事」で、気にする必要はあまりなかったというだけ。



同じ現象はサターン・ST-Vでもありました。

今は、スプライト+BGなんて環境が無くなったので、あまり気にすることは無いと思います。



▲目次へ ⇒この記事のURL

同じテーマの日記(最近の一覧)

業界記

別年同日の日記

04年 誕生日?

08年 いろいろ書く

08年 下の子入院

11年 自宅待機

11年 「輪番」停電について

12年 windows8

17年 長男卒業式

22年 【訃報】近藤淳さん

24年 国立西洋美術館


申し訳ありませんが、現在意見投稿をできない状態にしています


戻る
トップページへ

-- share --

2000

-- follow --




- Reverse Link -