lucille v.s. 3delight: raytracing performance.

by syoyo

lucille is near to next release and I am freezing features and cleaning up codes.
Since codebase of lucille become stable for next release, I did small benchmark comparison with lucille & 3delight, especially for comparing raytracing performance.

The condition is ambient occlusion scene(using naive but true raytracing for both renderer).

lucille_ao_speed_test-2.png
(lucille, 57 secs)

3delight_ao-1.png
(3delight 8.0.1, 134 secs)

Condition

– Intel Mac, Core2 2.16GHz
– Rendering with 2 threads(2 cores)
– 512×512 pixel output.
– 2×2 subsamples(ShadingRate 0.5, PixelSamples 2 2)
– 128 gather rays per shading point.
– “box” 1×1 filter

Scene data

Here’s RIB and RSL used to render the image.

lucille’s raytracing is 2x faster than 3delight’s one.

The result shows lucille is about 2.3 times faster than 3delight for identical rendering condition.

In case of lucille, unfortunately, lucille has not yet been merged with JIT shader engine, thus gather shader was hard-coded in lucille. But I guess there would be a small performance differences when gather shader runs onto JIT shader engine merged with lucille, compared to hard-coded shading.

It is stated that 3delight is fast and employs fast raytracing, but still lucille is 2x faster, hehe 🙂
More to say, there’s still much room for optimization in lucille’s raytracing engine.

[Ja]

lucille のコードベースもひとまず落ち着いてきたので、ちまたではレイトレが早いと言われている 3delight とレイトレの速度を AO 処理で比較してみました.
gather() シェーダを使って、両方とも確実に普通のレイトレが行われるようにしています.
「確実に普通の」、というのは、たとえば occlusion() などでやってしまうと、たとえば pixie ではレイトレでなく近似で AO を計算したり放射照度キャッシュを使われてしまったりするため、確実にシェーディング点あたり一本一本レイトレをする方法で、という条件に設定した、ということ.

各レンダラの画像は目視レベルですがほぼ同じなので、同じ量のレイトレ処理がされていると見なしていいでしょう.
lucille は pure raytracer なので ShadingRate は関係無くて PixelSamples だけしか見ていないのですが、
3delight は reyes + raytracing ですので ShadingRate = PixelSamples としないと、同じサンプリング量 == 同じシェーディング量になりません.
(ま、ほんとは raytracing context でも ShadingRate は考慮しないといけないのですけどね… ただ、ShadingRate を指定しなくても自動で最適 rate でシェーダサンプリングできるようにしたい. いくつかアイデアはあります)

あと、lucille はしかしまだ JIT シェーダが本体に組み込まれていないので、今回はハードコードなシェーダを利用しました.
(が、JIT シェーダで実行したとしても、ハードコードとほぼ同じ速度になるでしょう)

結果

結果は lucille のほうが 3delight に比べて 2 倍くらい早い.
激的に lucille のほうが早い、というわけではなかったのでちょっと残念です…

ただ、lucille の方はレイトレ処理についてはまだまだ無駄に処理している部分が多いので、
そこをちゃんと最適化すれば 3delight に対して 5 倍くらいにはなるかなぁと思っています.
(パケトレとか、アルゴリズムが根本から変わるという高速化をしなくても)

Advertisements