8/18/2016

CG景観ソフト(1)

CGというものを最初にやったのはNECのPC-8001だった。
1976年だと思う。訂正:1979年だった。
ASCIIに載っていた海外のソフトを参考にしてBASICで作った。
当然速度は遅いのだけれど、当時としてはそれ以外なかった。
あれはよく作ったなと今思う。

ディスプレイに線や点を描くのはBASICが持っている機能を使うだけだが、
立体的なものを平面的なディスプレイ上にどう描けばいいかについては、ほとんど
参考書が無かった。
それで考えてわかったのは、PCのディスプレイが透明なガラスだったと仮定して、
ガラスを通して向こうに見えるもの、あるいは景色の上の1点は
そのガラスのどこを通るかを計算すれば良いのではないかということ。
中学・高校の数学の記憶を駆使して対象物の1点と自分の目を通る線分が
ディスプレイガラスのどこを通るかを計算した。

それで1点が決まる。
それで何点かを計算して描いてみると、なんとなくわかるが、
対象物を描いているようには見えない。
それで当時PCでやっと使われ始めた「ワイヤーフレーム」っていうのはどうやっている
のだろう?と考えた。
対象物の外形を線分で描くことを想定して、対象物を線分で分けてデータを作った。
最初に作ったのは単純な立方体だった。
その線分データの両端の各点がディスプレイガラスのどこを通るかを先の方法で
計算した。
全ての線分を計算してディスプレイに表示すると見事に立方体が表示された。
「おう、できるじゃないか!」とうれしかった。
この時点で遠近法的に表示するにはカメラレンズの焦点距離というパラメータが
必要だと気が付いた。

次に考えたのは、当時上映されていたスターウォーズのXファイターがデススターの
溝の中を飛んでいるシーンが作れないだろうか?と考えた。
それで広い平面データを格子状のデータとして作り、その中央を溝の形状にした。
そしてその溝の中ほどに橋(普通の橋の形状)を作って、ここをくぐろう、と思った。

それをやる前までは気が付かなかったのだが、なんとなくワイヤーフレームで
データを作って先の方法で表示すれば後はPC8001の表示機能がやってくれる。
と思っていた。
ところが、当然なのだが、対象物を遠くから見ている分には全体がディスプレイの
中に納まるのでちゃんと表示するのだが、
線分に近づいて線分が画面からはみ出した時はその線分は正常に表示されない。

当時のPC8001は640×480(だったろうか?)
訂正:160×100しかなかった。
の画素しかなかったからこの値を
超えた場合は、画面を飛び出して表示される線分を想定して、
線分のどこではみ出すかを計算して、その点を新たな線分の両端にしなければいけない。
その方法はどうしたらいいかは全く参考書が無かった。
言葉の上では「隠れ線消去」(と言ったろうか?)という言葉はASCIIなどでも
見られたが、それはどうすればいいのかが書かれたのはだいぶ後だった。

その隠れ線消去の計算が大変だったように思う。
左右上下にはみ出すのはいいとして、向こうから手前に(画面を)はみ出す場合も
ある。
そのすべての場合を設定して計算しないといけなかった。

で、それら全ての計算をさせた。
それを画面に表示させるのだが、当時のPCの画面は粗すぎてきれいに見えない。
そこで考えたのはXY-プロッターに出すことだった。
会社にローランドDGのプロッターがあったのでそれで書かせることにした。
そうすると隠れ線消去の画面幅が大幅に拡大することができた。
100分の1mm精度でA3横向きの大きさに出力できた。

それで描いた溝と橋の画像は非常に綺麗だった。
バンクをかけなかがら溝に入って、橋をくぐって外に出る。という一連の画面
を十数枚のA3用紙(会社の)に描かせた。
1枚を描くのにものすごい時間がかかったけれど、満足だった。
その描いた紙が1枚も残っていない。
たぶん引っ越しの時に処分してしまったのだろう。