今回は、球面と平面だけを使って、ひな人形の三段飾りを作ってみます。
まあ、ポリゴンがそうであるように、AND/OR/NOT演算を使って平面を細々と組み合わせていくと、どんな形でも作れてしまうのですけどね。ずっと昔、8ビットパソコンのBasicでレイトレーシングを作っていた時を思い出して、シンプルに作ってみます。ちなみに、当時作ったデータがこちら。
球面も平面も、すべて手で(紙と鉛筆で)計算してデータを作っていたので、あまり複雑なことはしたくなくて、後ろには1枚ペラの平面を立てて「金屏風」と思い込んでみたり、雪洞に見立てた局所光線源を空中に浮かせてみたり……。当時のPCの非力さも相まって、こんな感じだったのを、もう少しまじめにリメークしてみようかと思い立った次第です。
もちろん今のXi-TRACEでも、ある程度は手で計算しなくてはならない場合もありますが、データに数式や手続き(procedure)などを使えるし、回転・拡大・縮小・平行移動といった一次変換も記述できるので、データの記述は相当楽になりました。
レイトレーシングのコード自体はそれほど複雑なことは無いので、今では、データ記述言語MODELAの方が圧倒的にコード量を喰っています。
MSX2とか言うマシンでしたか?当時、数10,000円で購入できて、256色のグラフィック性能に惹かれて購入しました。それまでは、同じ8ビットパソコンだったけど、8色しか表示できないマシンでした。もっと色数の多いパソコンもありましたが、当時の作者としては、なかなか手が出せないほど高価でしたので。
さっきのデータ(画像)を当時のパソコン性能に合わせて作り直してみると、こんな感じ。まずは8色のパソコンの場合(エミュレートですので、実際の色数と異なる場合があります(1^^;))。
ディザリングという手法を使って、疑似的に多色表示してます。それが、MSX2(256色)だと、こんな感じ(↓)。
緑と赤が8諧調、青が4諧調の計8×8×4=256色表示。今のPCは1,677万色(フルカラー)が基本なので、8色とか256色とか言われてもピンときませんよね?でも、ディザリング自体は、今もバリバリ、プリンタなどで使われています。だって、プリンタのインクの色数は4色とか、6色とかですものね?
最近のインクジェットプリンタは、噴出するインクの量を変えることで諧調を表現する上、4,800dpi(1インチ=25.4mmの中に4,800ドット)だの、それ以上だのと細かいので、「ドット」が見えるようなことはありませんが……。
安いプリンタだと、噴出するインク量制御による諧調表現が無い(あるいは諧調数が少ない)ものがあり、単純にDPIのスペックずらだけ比べて「変わらないじゃん」と思って買うと、期待外れになる場合があります。上に示した「8色」と「256色」の差みたいな感じ(8色より256色の方が諧調数が多い)です。上の2枚もドット数(DPIに相当する)は同じですから。
当時は、長時間かけて計算で求めたレイトレーシング画像を、限られた色数で如何に綺麗に表示するか?というテーマで、ディザリング手法もいろいろと研究しました。パターンを使ったもの、乱数を使うもの、誤差拡散法、網点(印刷)、等々。集大成(パターンと誤差拡散を同時に使用可能)もOlive+に搭載されていますので、時間があったら、試してみてください。
そして、X68000なわけですよ!65,000色表示できるパソコン。もう一度言いますが(1^^)、今のPCときたら1,677万色がデフォルトですから、それに比べたら「まだまだ」な色数です。それでも、ようやっとディザリング無しで、そこそこな表示ができるようになったわけです。感動でした。
Xi-TRACEの「バージョン…」ウインドウを開くと、「X68000 ray-tracing rendering system」と表示されるのですが、昔のパソコンの名前ですよ、X68000って。
X68000の65,000色はちょっと使い難くて、結果、32,768色(=32×32×32、RGB各32諧調)として使っていたんですが、その表示がこちら。
一番最初にご覧に入れたフルカラー画像との違いがわかりますか?緑の部分が、わかりやすいと思いますが、濃淡が帯のように見える部分(マッハバンド)が、はっきりわかってしまいます。
時に、X68000なのに、65,000色?とか思いました?まさか?思いませんよね?
ハッ。今回のテーマを忘れてしまうところでした。「球面と平面(と、その組み合わせ)でひな人形の三段飾りを作る」が、今回のテーマでした。
完成したデータと動画です。
Xi-TRACEデータ | hina_dolls.xitr |
プリミティブとしては、sphere(球面)とplane(平面)しか使用していません。
モデリングは簡単だったので、「変形!」させてみました。10個の半球体からモコモコパカッと変形して、三段飾りが完成します。うーん、どうでしょう?
今、1台だけWindows 10のマシンがあって、動画を計算させるときにサーバを立ち上げていました。まあ、計算中は特にすることもないので、放っておいて別なことをしていたのですが、ふと見たら、Windows 10のマシンにログイン画面が……。
あれ……?
何が起きた?→ → → どうやら、Windows Updateを実行して、勝手にリスタートされたらしい。Windows 10では、「インストールは確認する」とかいう設定ができず、勝手にUpdateをかけるのだけど、一応、「稼働時間」?を指定できて、その時間内はリスタートがかからないようになっている。勝手にリスタートされたのも、「リスタートOK」な時間内だったので、まあ、「設定通り」といえば設定通り……。
そうか?そうなのか?
うーん、サーバが起動して、バリバリとレイトレーシングしてたのに、勝手にリスタートするか?Windows 10マシンが働らかなかった分、動画の計算に少し多めに時間がかかってしまった。
「サーバが起動している間は、リスタートに待ったをかける」仕様にしてやろうと、いろいろ調べた所、どうも、Microsoftのポリシィ的には「シャットダウンプロセスを、アプリケーションソフトウェアごときが妨げるな」みたいな感じ……。
感じ悪い。
それを言うなら、ユーザの許可も取らず、作業中のアプリケーションソフトウェアを勝手に終了させてリスタートするとは、何事?
まあいいや。ちなみに、Xi-TRACEは、途中で応答しなくなったサーバがあっても、そいつだけ無視して処理を続けます。逆に、「エラーだよ!サーバが応答しないよ!」とは、言ってくれないので、今回の作者の様に、しばらく気づかないことがあります。
あと、リスタートのかかったPCで実行していたのがサーバなら、それで済みますが、もし、そのマシンでクライアントの方を動かしていたら、リスタートかかるとアウトです。皆様も、ご注意ください。