Rendering with Proce55ing.

by syoyo

rwp.jpg

Ambient Occlusion rendering (Java applet. Java is launched)

[En]

I’ve been planning to write a good introduction to theory and practice of global illumination rendering with literate programming style and seek for good language to implement, teach and learn global illumination algorithm.

And now, I finally found Proce55ing is a good candidate for the language. Although Proce55ing is primary designed for media art programming, I also found it could be enough to implement simple render as well.

Benefit of using Proce55ing.

– It has GUI facility in default. This is very important for renderer newbie.
– It is easy to install. Dowload and just run.
– It is cross platform.
– It is fast enough to execute compute-intensive global illumination computation program.

I investigated many languages other than Proce55ing, but nothing else fits my requirements:

JavaScript: it is widely used in web, easy to program and execute in web, and can be used in conjunction with GUI(html), but unfortunately it is very slow to execute numeric program.
ActionScript(Flash): Same as JavaScript.
C/C++: Fast to execute but it does not have GUI and the code become nasty.
Java: It has versioning nightmare (compiler/runtime version mismatch problem. “Write once, run anywhere” is a Myth!). It is very difficult to make reader/lerner’s language environment same.
Python: Syntax is very clean and easy to learn, but it does not have default GUI and slow to execute.
Other LL language: Has same problem of Python, especially slow to execute.

Rendering with Processing

I wrote a simple renderer which renders the scene with ambient occlusion with Proce55ing.
(Click above link)

You’ll found rendering speed is not so slow.
In my core2 2.15GHz, it finishes about 40 seconds for 256×256, 256 AO samples, 4 subsamples per pixel setting(i.e. 1024 rays per pixel).

Don’t you think Proce55ing is a nice language(IDE) for teaching rendering?

[Ja]

Proce55ing で簡単な大域照明レンダラを書いてみました. アンビエントオクルージョンを計算しています.
上記リンクの applet では視点からのレイがヒットした場合、 ヒット点から 256 rays を飛ばして遮蔽率を計算しています.
4 サブピクセルサンプリングしているので、 1pixel あたり 1024 本レイを飛ばしていることになります.

Proce55ing は基本的にはインタラクティブメディアアートに使われる言語(環境)ですが、
レンダリングアルゴリズムとその実装を初心者に教えるプログラミング環境をずーっと探していたのですが、
最近 Proce55ing がその目的にとても適しているのではないかと思っています.

理由は,

– GUI がデフォルトで付いている
– すぐに使える. ダウンロードして起動するだけ
– クロスプラットフォーム(Win, Linux, Mac)
– 十分な処理速度. Proce55ing は中身は実は Java なので、処理速度は JVM の性能次第になります. 最近の JVM は性能がいいのでネイティブに比べてとても遅いというわけではありません. 特に Java6 からはモダンな JIT 最適化が行われています(参考資料 . とくに Chris Wimmer 氏の修論は必見. SSA + リニアスキャンレジスタアロケーションの JDK6 における practical な実装方法が涙が出るほど詳細に解説されています). 処理速度は大域照明レンダラなどの演算がメインになる計算には重要ですから、ネイティブ同等とまではいかなくても、それなりに早く動くというのは必須用件になります.

なので、取っ付きやすさと実行速度を兼ね備えている点ではベストな教育用言語かと.

取っ付きやすさという意味では JavaScript や Python という手もありますが、いかんせんやはり大域照明レンダリングをするには実行速度が遅すぎました(ただ、いずれ数年後もしくはFlash10 では、 JS などの LL で動的な言語もネイティブと変わらないくらい早くなる可能性もあります. 待てなかったら数値演算に最適化を特化した オレ JS 実装を用意するのもアリ?).

Proce55ing の言語は Java ベースなのでプログラミングの点からちょっと初心者には取っ付きづらいですが(オブジェクトの new の振る舞いとか)、まあ Java ほど複雑ではないし OO 指向も強制ではないので難しすぎるということはないでしょう.

関数型言語で教える?…

ちなみにゲーム屋さんもだんだんと「関数型がいいべ、手続き型や OO 指向は良くない」ということに気づきはじめてきていますね(こことか).
私も 8 年くらい前に OO 指向は実はグラフィックスには必要ない概念(グラフィックスアルゴリズムは struct によるデータのまとめ + 簡単な関数ポインタ程度で十分実現可能)であると分かってからは、なるべく OO 脳に冒されないように注意し(無駄に深かったり多種なクラス階層は保守性が絶望的に低下する)、C++ はどうしようもないとき以外には近づかないようにしています 🙂

これから 5 年 10 年後と時代を先取りして、と考えると関数型言語でレンダラ実装を教えるというのもありかもしれない.

Proce55ing みたいに GUI が標準で付いた関数型プログラミング環境(ただし lisp 系は除く)ってないのかな?

Advertisements