NEUROMANTIC

自分でC/C++/UE4/Graphics/ゲームなどをやったことをメモするブログ

CPUレイトレイサープロジェクトの進捗報告。

f:id:neuliliilli:20190715195840j:plain

「Assassin's Creeds オデッセイ」やりながらゆっくりと実装しています。

実装した機能・雑談

f:id:neuliliilli:20190715194233p:plain

  • Dielectric(誘電体)を実装しました。もともとは最初から実装して提供するべきだったんですが、アルゴリズムに混線が来てしまって今こそになって実装しました。誘電体はIOR(屈折率)がなければならないんですので、IORによる屈折を実装してみました。
    • 環境の空気のIORも設定できるようになりました。デフォルトは1.002です。

f:id:neuliliilli:20190715194537p:plain

  • 被写界深度(Depth Of Field)も実装しました。被写界深度を実装するには、既存のカメラモデルであったピンホールカメラでは実装が出来なかったんです。ということでインターネットでちょっと調べて、Thin Lensに基づいたレンズ型カメラモデルを実装して被写界深度を実装しました。
    • ということでカメラのモデル構造のFocal DistanceLens Sizeがちゃんとした役割を果たせるようになったのです。

f:id:neuliliilli:20190715194938p:plain

  • HDR(High Dynamic Range)機能を実装しました。デフォルトはオフで、環境の構造ファイルからオンすることでHDRを適用することが出来ます。元のアルゴリズムはリアルタイムレンダリングに使われるものでしたが、ちょっとレイトレにも適用するように変形して実装してみました。
    • この機能の実装によって照明の実装によっての例外が埋めるようになります。

f:id:neuliliilli:20190715194838p:plain

  • 照明も実装しました。照明は別のロジックを組む必要がなく、ただ新しいマテリアルを定義するだけでオッケーとなりました。
    • 照明の機能を実装するにはどう考えてもHDRの機能が切実でした。HDRと照明は同時に実装しました。

f:id:neuliliilli:20190715195532p:plain

  • Path Tracingのロジックを変えて、Job Systemに対応するようにしました。適用したJob SystemはJob Stealingまで支援するので、複雑な環境をレンダリングするときには既存のロジックより速い処理速度が得られると思います。