OpenCASCADEの最新バージョン6.7.0が開発者サイトでアナウンスされています。
記事によると、6.7.0では特に visualization が強化されたようで、簡単かつ高速に高品位のレイトレーシング・レンダリングがビューで可能になったとのことです。
現行リリースの最新版である6.6.0までは、正直に言うと、お世辞でも「綺麗な見た目」は提供されていませんでした。OCCT自体、三次元幾何演算部分が中核となっているライブラリですので画面表現については後まわしになっていたのかもしれません。
結果的にCATIAやRhinocerosといった商用CADに、第一印象(見た目)で劣るように思われがちになっている感触がありましたが、今回の6.7.0では、商用CADにも負けない美しいビューを表現できるようになったようです。
OpenCASCADE 6.7.0 の新機能
記事をかいつまんで要約しますと、
- phong シェーディングに対応
三角形ピクセルベースの法線補完と高度な照明モデルを使用して、高品質なシェーディングができるようになったらしいです。これまでは、近似などでごまかしながらシェーディングを行なっていたみたいですが、今回はしっかりとポイントライト(点光源)とディレクショナルライト(平行光源)を使って陰が出来るようになったことで、見た目が大幅に向上したとのことです。
- 鏡面反射と環境マッピングの対応
レンダリング画面の品質を大きく左右する鏡面反射と環境マッピングもサポートされたようです。レイトレーシングがまともに実装されて初めて実現できる機能です。完全な鏡を表現しなくとも、プラスチックや塗装された金属にうっすらと映り込む周りの風景は、より直感的に利用者にイメージを伝えることができるようになると思います。
- アンチエイリアス処理の改善
6.6.0までは、アンチエイリアス処理を有効にすると、アンチエイリアスであるにも関わらずジャギー(物体の境界のギザギザ)が目立つようになっていました。全然美しくない上に、無駄な処理をするわけで全く使っていませんでしたが、今回の改善でまともに使えるようになった模様です。
- 半透明オブジェクトの表現の改善
これまでは、半透明オブジェクトを重ね合わせると物体の順序がめちゃくちゃに表現されていました。これは、まともにレイトレーシングをしていなかったため、視点から、手前から順に並んでいるはずの物体の位置を上手く表現できていない事が原因です。今回、これも改善されたようで、CADでなくてはならないこの表現も上手く行きそうです。
- OpenCLでの処理
レイトレーシングを実装するにあたり、画面の描画コストはこれまで以上に大きくなることは明白です。そのため、並列処理を行うOpenCLをサポートして描画速度の改善を図っています。
レイトレーシングを有効にするコーディング
レイトレーシングモードでの描画を有効にするには、従来のコードをほとんど書き換えることなく、簡単にできるようです。
記事では、V3d_View::SetRaytrasingMode() を実行するだけで有効にできると書いてあります。また、レイトレーシング実装に伴なって DRAW コマンドも追加されており、利用方法もソースコードレベルで示されているみたいです。
今のところの制約事項
6.7.0では、レイトレーシングに関する次のいくつかの機能がまだ制限されているとのことですが、次回以降のリリースで順次利用できるようになっていくそうです。
- テクスチャーマッピングは今のところ未サポート、従来のテクスチャもレイトレーシングには移植されていない。
- レイトレーシングが使えるのはポリゴン形状のみで、点や曲線はサポートされていません。(つまり、ワイヤフレームなどもレイトレーシングが使えません)ここで言うポリゴン形状とは、平面分割されたポリゴンメッシュではなく、OpenGL 描画時における面、すなわち自由曲面も含まれているものだと思います。
- 三角形メッシュの一致問題(OpenGLと同様)。描画時におけるポリゴンメッシュ分割による幾何誤差の事だろうと思います。分割精度を上げれば実用範囲において回避できるだろうとの注釈も。
- CPU(つまり、ソフトウェアレンダリング)とIntelのGPU(Intel HD Graphicsなど)でテストされていません。
- また、MacOS Xでもテストされてません。ユーザがこれらの環境に関するパッチ(やレポート)を提供することを求めています。
- レイトレーシングさせる形状は、今のところOpenGLのVBOを利用せずメインメモリ上から生成するため、メモリ使用量が多くなってます。
** 2倍から3倍以上のメモリ使用量になってます。2GBのVRAMで、3,000,000ポリゴン程度。
これらの事は次期リリースに期待しつつも、現状だけでも充分に表現力がアップすると思われます。
DirectXのサポート!?
また、本記事とは別にOCCTのDirectXサポートについての議論も記事になっていました。
曰く、
- OpenGL に加えて Direct3D レンダラを搭載するのは面白そう。
- ただ、DirectX を大規模な開発をしてサポートするなら、それなりのメリットが必要。
- Direct3D レンダラは特定のプラットフォームでしか動かない。
- レンダラが二つになるということは、バグも倍増されてメンテが大変になる。
とのことでした。ここでは、OCCT本体に実装するのではなく、サードパーティ製の visualization ライブラリとして開発ターゲットにするのは良い方法とも述べています。
個人的には、DirectX の需要はまるでないのですが、90年代後半から今まで培われてきた技術があることは否定しません。終焉を迎えつつある技術でも選択肢が多くなることは良いことだと思います。
[…] OpenCASCADE 6.7.0 ではレイトレーシング方式のレンダリングをサポートしている事を前回紹介しました。今回は、実際にコーディングをして試してみたものを紹介します。 […]
[…] OpenCASCADE 6.7.0 ではレイトレーシング方式のレンダリングをサポートしている事を前回紹介しました。今回は、実際にコーディングをして試してみたものを紹介します。 […]