Best use of 1 Infinite Loop

無限ループの最高の使い方

受賞者:Qiming HOU

引用元:https://www.ioccc.org/2013/hou/hou.c

審査員・作者による説明:https://www.ioccc.org/2013/hou/hint.html

動作

シェーダがプログラム可能な3Dレンダラ。

次のように実行して待つ。

$ gcc -o tmp hou.c

$ ./tmp > tmp.c

$ gcc -o hou tmp.c -lm

$ ./hou BIG
please  wait...

そのうち、画像を書き出したというログが出る。

$ ./hou BIG
please  wait...
31    reopen    luna.ppm

luna.ppmを開くと次のようになっている。

最初に書き出された画像
図:最初に書き出された画像

画像を書き出してもレンダリングは走り続け、定期的にファイルを上書きしていく。 画像は徐々に高画質になっていく。 一晩くらい走らせ続けると、このくらいの品質になるとのこと。

一晩程度走らせた結果
図:一晩程度走らせた結果(引用元:https://www.ioccc.org/2013/hou/luna.jpg)

小ネタとして、上の棚は白い部分が”IOCCC”になっている。

引数にシーンデータを指定することで、別の画像もレンダリングできる。 詳細はhintファイルを参照。 添付されている生成画像へのリンクを置いておく。

解説

元のhou.cは、本体コードを圧縮したデータと、それの解凍を行うプログラムになっている。 この圧縮は、Prediction by Partial Matching(7-zipのベースとなっているデータ圧縮アルゴリズム)に基づいている。 なお、出力文字のうち空白文字の重みを大きくしたり、'"''\'の文字を出さないようにしたりして、IOCCCのサイズルールをパスするように工夫している。 出力がPPMなのは、これにかけた洒落とのこと。

hou.cコンパイルして実行すると、本体コードが出力される。 これをコンパイルしたものが3Dレンダラとして動く。 本体はシェーダのプログラムのインタプリタと、3D-DDAによるレイトレーサと、PSSMLTの光線パスサンプラの組み合わせとのこと。 知識がないのでほとんどわからない。

[[2004/gavare]]から始まったレイトレーシング系作品の終着点だろうか。 レンダリングの品質でこれを明確に(素人でもわかるように)上回るのは難しそうなので、新たなひねりを考える必要がありそう。