20211228_1150_20_0720w764_h472
 少し前のコラム 橘サーバー100万回突破! にて、「橘が実際にどう高速処理しているのか、開発担当者がそのうちきっと、07ダイレクトで書いてくれると思います。」とものすごいボールが飛んできていたので書こうと思ったのですが、どうにも速さのヒミツはこれです!と書くのは難しく、いつも通りのとりとめのない文章になってしまいましたがお暇でしたらお付き合いください。

 はじめにひとつお礼を。オーセブンCADコンテスト今年も多数のご応募ありがとうございました。「えっ これ本当にうちのCADでレンダリングしたの?」とびっくりするものもあり、こちらの想定以上に使いこなしてくださるユーザー様がどんどん増えているのは開発者冥利に尽きます。ありがとうございます。
 

GPUの進化(1)


 身も蓋もないのですが、橘がここまで速くなったのはGPUの進化のおかげです。
 GPUはプログラマブルシェーダを実装して以降「シェーダありき」の構造へ最適化されていきましたが、ひとつの完成をみたのが2016年のNVIDIAのPascalシリーズです。ちょうど橘の開発がスタートした頃で、「ライバルをぎゃふんと言わせるレンダラ」をどうやって実現させるか考えあぐねていたのですが、自宅PCに試しに導入したGTX1080をいろいろ試してみて、これはいけそうだ、と確信しました。

 

創意と工夫の初代橘


レンダリングは環境光を扱うと計算量が膨大になるため、それをどう抑えるかがカギになります。
利用できるハードウェアの性能の中で、エクステリアCADのレンダラとして必要十分なクオリティと計算時間を実現するべく機能を大胆に絞り込み、初代橘ができました。

 1レンダリング10分以内を達成した後も調整と最適化を重ね、通常のレンダリングであれば数分で処理できるようになりました。この辺の最適化作業は、どのプログラム開発でも行うボトルネックの特定とその改善という地道な作業の繰り返しです。
 この初代橘は間接光用の頂点毎の受光量計算は通常のレンダリングパイプラインで計算し、直達光の計算とピクセル毎のレンダリングはコンピュートシェーダでのレイトレーシングで行い、広い面は照度計算用に分割し、ポリゴンとポリゴンが交差するところも分割し。。。 と、創意と工夫、そしてそれに伴う苦労。。。 がたくさん詰まっていました。
でも過去のものになりました。次の進化がやってきたのです。

 

GPUの進化(2)


橘のサーバーレンダリングが軌道に乗って暫くしたころ、次のGPUの進化が唐突にやってきました。

ハードウェアレイトレーシング時代の幕開けです。

レンダリングの仕組みが根底から置き換わるもので、これには本当にびっくりしたので以前にも記事にしました。 グラフィックカードの大変革  古くて新しい“レイトレーシング”

このDXR(DirectXレイトレーシング)が使えたら、計算量的に諦めていたパストレーシングという手法でレンダリングでき、初代橘の抱える問題の一掃と高速化が同時にできそうだ。。。 ピンときてすぐに開発にかかりました。
できたばかりの技術で資料等がとても少なく苦労しましたが、プログラムをほぼ丸ごと書き換えて2021年2月にDXR版橘をリリースすることができ、レンダリング時間は半分以下になりました。

 

DXR版はできる限りシンプルに


 DXR版橘は基本的なところはびっくりするほどシンプルです。できるだけ簡素なレイトレーシングをただひたすら重ね合わせるという、標準的なパストレーシングというアルゴリズムを採用しています。実装もGPUにレイを投げる指令をして、面倒な交差判定はGPU任せ、ヒットしたらヒットシェーダが呼ばれるので、そこで処理するだけです。

DXR版橘のプログラムはこのシンプルさをできるだけ損なわないようにしています。当然その中でも調整と改良をできるところはたくさんあり、たとえば「ひたすら重ね合わせる」ところでもレイの投げ方をGPUの特性を踏まえて調整するのとしないのとでは速度に大きな差がでます。
プログラムは工夫を重ねていくとどんどんと複雑になっていってしまうのですが、シンプルさを保つことによってプログラムの動きが明快になり、次の工夫を入れる余地が広がります。
橘サーバーで複数PCでの分散処理ができるようにした際もこのシンプルさが役立ちました。

分散処理導入後はレンダリング時間は平均18秒にまで短縮することができました。

 

自社開発の連鎖


 というわけで橘の実現と高速化は「ハードウェアの進化の波にうまく乗れた」ところがとても大きいのですが、そのハードウェアを使いこなして波に乗るためにはプログラマがなんとかしなければなりません。その時にゼロから開発を始めていたら期間も人数ももっとかかってしまっていたことでしょう。
 幸いオーセブンは自社開発のeE-Painterでレイトレーシングをやってましたので、初代橘やDXR版橘でレイトレーシングを実装する際にその知見が大いに役立ちました。
 また橘サーバーはCADのデータをサーバに送り、結果を返すための仕組みが必要ですが、ここでもe-Boardのサーバ連携機能とNetPla10のウェブレンダリング機能をうまく組み合わせて、普通ならかなり時間のかかるネットワークまわりを短期間に構築できています。
 こうしたひとつの開発が次の開発へつながっていき、知見が資産となるのは、自社開発ならではです。オーセブンCADをはじめ自社で開発した全てのものがつながって、次の開発に活かされています。もしかしたらこれが一番の「速さのヒミツ」なのかもしれません。