Yocto/GL は、MIT ライセンスの下でリリースされた、物理ベースのグラフィックス アルゴリズムを構築するための小さな C++17 ライブラリのコレクションです。 Yocto/GL は、開発と使用を容易にするために、意図的にデータ指向のスタイルで書かれています。 Yocto/GL は、コードのナビゲーションを容易にするために小さなライブラリに分割されています。ドキュメントについては、各ヘッダー ファイルを参照してください。
yocto/yocto_math.{h}
: 固定サイズのベクトル、行列、剛体フレーム、変換yocto/yocto_color.{h}
: 色変換、色調整、トーンマッピング関数、カラーグレーディング、カラーマップ、カラースペースyocto/yocto_geometry.{h}
: レイ、境界ボックス、ジオメトリ関数、レイとプリミティブの交差、ポイントとプリミティブのオーバーラップyocto/yocto_noise.{h}
: パーリンノイズyocto/yocto_sampling.{h}
: 乱数の生成、点と方向の生成、モンテカルロ ユーティリティyocto/yocto_shading.{h}
: フレネル関数、bsdf ローブ、透過率ローブ、位相関数の評価とサンプリングyocto/yocto_image.{h,cpp}
: 単純な画像データ型、画像サイズ変更、トーンマッピング、色補正、プロシージャル画像、プロシージャル太陽空yocto/yocto_shape.{h,cpp}
: 単純な形状データ構造、三角形メッシュ、四角形メッシュとラインセットを操作するためのユーティリティ、法線と接線の計算、線形とキャットムル・クラークの細分割、手続き型形状の生成、光線交差と最近接点のクエリyocto/yocto_scene.{h,cpp}
: シーン表現とプロパティ評価yocto/yocto_bvh.{h,cpp}
: 2 レベルのバウンディング ボリューム階層を使用した、三角形メッシュ、四角形メッシュ、ライン セットおよびインスタンス シーンのレイ交差および最近点クエリyocto/yocto_trace.{h,cpp}
: エリアと環境の照明、マイクロファセット GGX と表面下散乱、多重重要度サンプリングをサポートするサーフェスとヘアのパス トレースyocto/yocto_sceneio.{h,cpp}
: 画像、形状、シーンのシリアル化yocto/yocto_modelio.{h,cpp}
: Ply、Obj、Stl 形式の低レベルの解析と書き込みyocto/yocto_pbrtio.{h,cpp}
: Pbrt 形式の低レベルの解析と書き込みyocto/yocto_cli.{h}
: 印刷ユーティリティとコマンドライン解析yocto/yocto_parallel.h
: 同時実行ユーティリティ (非推奨)ライブラリをテストするために作成された次のアプリケーションで、Yocto/GL が動作しているのを確認できます。
apps/ytonemap.cpp
: 画像の変換と表示apps/ycolorgrade.cpp
: 画像のカラーグレーディングapps/yconvert.cpp
: シーン変換apps/yconverts.cpp
: 形状変換apps/ytrace.cpp
: オフラインおよびインタラクティブなシーンのレンダリングapps/ycutrace.cpp
: CUDA を使用したオフラインおよびインタラクティブなシーンのレンダリングapps/yview.cpp
: インタラクティブなシーン表示パス トレーサーを使用してレンダリングされたいくつかのテスト イメージを次に示します。プロジェクトサイトにはさらに多くの画像が含まれています。
Yocto/GL は、データを明示的にする「データ指向プログラミング モデル」に従います。データは単純な構造体に保存され、無料の関数を使用して、または直接アクセスされます。すべてのデータは公開されているため、カプセル化は試みられません。これを行うのは、これにより Yocto/GL の拡張が容易になり、学習が早くなり、並列コードを記述する際により明示的なデータ フローが容易になるためです。 Yocto/GL は主に研究と教育に使用されるため、明示的なデータはハッキング可能であり、理解しやすいものです。
Yocto/GL のほぼすべてのオブジェクトには値セマンティクスがあります。これは、すべてを簡単にコピーしてシリアル化することができ、メモリ管理の必要がないことを意味します。これには、偽のコピーが発生する可能性があるという欠点がありますが、メモリ破損が発生しないようにするという利点もあります。これは、このような非常に小さなライブラリであっても、初心者 C++ ユーザーにとって大きな問題であることが判明しました。
コード スタイルに関しては、オブジェクト指向ではなく関数型のアプローチを好み、クラス メソッドよりも自由な関数を好みます。すべての関数とデータはyocto
名前空間で定義されるため、ライブラリは簡単に相互に呼び出すことができます。
Yocto でのテンプレートの使用は、テンプレートなしから大量のテンプレートを使用するまで、多くのリファクタリングの理由でした。この時点で、Yocto は読みやすさを考慮していくつかのテンプレートを使用します。将来的には、多くの API を明示的に型指定したままにしつつ、数学コードでのテンプレートの使用を増やす予定です。
IO でのエラー処理の場合、ステータス オブジェクト、またはブール値フラグとエラー文字列を使用するインターフェイスを返します。外部ライブラリによって使用される場合は内部的に例外が使用されますが、それ以外の場合は例外は使用されません。現時点では、例外は「プログラマ エラー」を報告するためにのみ使用されます。つまり、関数内で事前条件または事後条件に違反した場合、標準ライブラリが行うだけです。
ライブラリは MIT ライセンスに基づいてリリースされています。ディストリビューションにはさまざまな外部依存関係が含まれており、それぞれが独自のライセンスを持ち、選択したライセンスと互換性があります。
このライブラリには C++17 コンパイラが必要で、OsX (Xcode >= 11)、Windows (MSVC >= 2019)、および Linux (gcc >= 9、clang >= 9) でコンパイルできることがわかっています。
CMake とmkdir build; cd build; cmake ..; cmake --build .
Yocto/GL に必要な依存関係はディストリビューションに含まれているため、個別にインストールする必要はありません。
Yocto/GL は、オプションで OpenGL デモの構築をサポートします。 OpenGL サポートは、cmake オプションYOCTO_OPENGL
を定義することで有効になります。 OpenGL の依存関係はこのリポジトリに含まれています。
Yocto/GL は、オプションで、レイ キャスト用の Intel の Embree の使用をサポートします。リンク方法については、メインの CMake ファイルを参照してください。 Embree サポートは、cmake オプションYOCTO_EMBREE
定義することで有効になります。 Embree は別途インストールする必要があります。
Yocto/GL は、オプションで、ノイズ除去のための Intel の Open Image Denoise の使用をサポートします。リンク方法については、メインの CMake ファイルを参照してください。 Open Image Denoise のサポートは、cmake オプションYOCTO_DENOISE
を定義することで有効になります。 OIDNは別途インストールする必要があります。