Visual Studio向けに使うCMake

CMake Visual Studioのバージョンを固定できず,複数のバージョンでビルドをしなければいけない場合があります。 slnファイルやprojファイルのXMLを直接編集したり,Visual StudioのUIからビルド設定を手作業で編集するのはとても面倒な作業ですが, そんなとき…

Temporal Anti-Aliasingの実装

Temporal Anti-Aliasing Temporal Anti-Aliasing(TAA)とは,アンチエイリアスの一種です。 前に組み込んだ,FXAAとかSMAAは1フレームの情報から, スクリーンスペースで画像処理的に行うアンチエイリアスでした。TAAは過去のフレームも使ってサンプリング数を稼…

RICHO THETAでHDRIの作成

RICHO THETA 360度カメラである,THETA SCを買いました。 解像度は静止画で5376x2688で,だいたい4K相当です。 マルチブラケット撮影もできるので,Photomatix ProみたいなHDRIの合成ソフトを使ってみたら,すぐHDRIができました。 http://cgcompo.blog134.fc2.…

モーションブラーの実装 その2

前にも,モーションブラーの実装を行いました。 このときは「A Reconstruction Filter for Plausible Motion Blur」という論文をそのまま実装したのですが, 余りにもそのまま実装しただけだったので,もう少しモーションブラーを考えてみます。 カメラモーショ…

トーンマップのLUT化

トーンマップパスの修正 以前,トーンマップや カラーコレクションを実装しましたが, 思うところあって,パスを次のように修正しました。 前は,パス内部で直接トーンマップ関数の計算をしたり,色行列を乗算していました。 それだと,組み合わせが膨大になり,用…

歪曲収差の実装

歪曲収差 レンズを通した光が,像となるときに歪んでしまう収差のことです。 大雑把に言えば魚眼レンズみたいな歪みです。 https://en.wikipedia.org/wiki/Distortion_(optics) http://www.nikon-instruments.jp/jpn/learn-know/microscope-abc/learn-more-mi…

SMAAの組み込み

SMAA スクリーンスペースのアンチエイリアスとして,FXAAを組み込みました。 今回は,もう少し綺麗になるらしい,スクリーンスペースのアンチエイリアスであるSMAAを組み込んでみます。 http://www.iryoku.com/smaa/ https://github.com/iryoku/smaa UnityのPos…

ImGuiでデバッグツール

以前,ImGuiの導入をしてから, 簡易的なプロファイラを作ったりしていたのですが, 思うところあって,いろいろ作り直しました。 いかにも開発中って感じの画面になって良いです。 プロファイラはツリー表示を導入したり,再帰構造を縦に並べて見やすくしてみた…

地形のテッセレーション

ワンダと巨像を遊んでいたら地形を作りたくなりました。 テッセレーション https://msdn.microsoft.com/ja-jp/library/ee417841(v=vs.85).aspx http://www.nvidia.co.jp/object/tessellation_jp.html テッセレーションはシェーダーパイプラインのステージの…

小ネタ : スクリーンスペースの矩形描画

小ネタです。 以下,DirectX系を考えています。 1つの三角形で矩形のUVを描画する 普通四角形のテクスチャを画面全体に表示しようとすると,こんな感じでスクリーンスペースで2つの三角形を描くかと思います。 これと同じことを,大きな三角形一つで実現できま…

周辺減光の実装

周辺減光 カメラで撮った絵の画面中心から離れるほど暗く見えるような効果を周辺減光と言います。 最近のゲームでもよく見かける効果です。 アーティスティックな効果の他にも,グレア効果など スクリーンスペースのエフェクトにおいて,画面端の境界によるア…

ライトシャフトの実装

ライトシャフト 前回のフォグで, レイリー散乱やミー散乱のような,視線方向と光源方向から光の散乱の度合いが変わる現象を実装しました。 しかしながら,前回までの方法では,遮蔽物のことを何も考えていなかったので,光源が遮蔽されている場合でもレイリー散…

フォグの実装

フォグ ゼルダの伝説を遊んでいたら,フォグを作りたくなりました。 レガシーな定数フォグ,高さフォグから実装して,ゆくゆくは大気散乱,ライトシャフトが出来たら良いなと思っています。 本来は,レンダリング時にフォグの計算も同時に行うべきだとは思います…

残像の実装

残像の実装 グレア効果の一つとして,残像効果を実装します。 実装自体は簡単で,ブルーム効果で利用した高輝度成分をソースとして, 残像用のバッファに一定割合で加算合成を繰り返していくだけで実現できます。 1秒あたりに,残像の効果はどれだけ減少するかの…

モーションブラーの実装

モーションブラー ゲームのフレームとフレームの間の動きに応じて,ブラーを与える効果がモーションブラーです。 レンダリングされた一枚のシーンがカメラによって撮影されたものと考えて,露出時間からブラーを計算します。 https://docs.unity3d.com/ja/curr…

FXAA3の組み込み

FXAA スクリーンスペースのアンチエイリアスの処理として,NVIDIAのFXAAが有名です。 ソースはNVIDIAのGameWorksのサンプルにあります。 https://developer.nvidia.com/gameworks-directx-samples 現在FXAAのバージョンは3.11のようで,FXAAの3系はマクロによ…

レンズゴーストの実装

レンズゴースト レンズゴーストを実装します。 レンズゴーストはブルームと違って,レンズ内部で反射を繰り返した光がハッキリと像となって写り込んだものです。 http://av.jpn.support.panasonic.com/support/dsc/knowhow/knowhow15.html 今回は以下のサイト…

シェーダー管理

シェーダー管理 今までいろいろとシェーダーを書いてきましたが,現在行っている管理の仕方を紹介します。 https://www.slideshare.net/siliconstudio/cedec2005-kawase http://research.tri-ace.com/ Shader Package 前提としてDirectX11環境でHLSLでShader …

Screen Space Ambient Occlusion : Alchemy AO

Ambient Occlusion アンビエントオクルージョンをやってみます。 http://frederikaalund.com/a-comparative-study-of-screen-space-ambient-occlusion-methods/ http://ambientocclusion.hatenablog.com/entry/2013/11/07/152755 アンビエントオクルージョン…

Compute Shader でFFTと畳み込み演算でブラー

はじめに 前回,ComputeShaderを利用してSummed Area Tableを作りましたが, 今回はFFT(高速フーリエ変換)をしてみたいと思います。 フーリエ変換ができれば,大きなカーネルの畳み込み計算を現実的な時間で出来て, Unreal Engineで言うところの,Convolution Bl…

Compute ShaderでSummed Area Table

Summed Area Table コンピュートシェーダーに興味が出てきたので,練習がてらSummed Area Table作成してブラーをかけてみます。 https://docs.nvidia.com/gameworks/content/gameworkslibrary/graphicssamples/d3d_samples/d3dcomputefiltersample.htm https:…

プロファイラの作成

ImGuiを使って,フレームのCPU時間とGPU時間を可視化するプロファイラを作りました。 それだけです。 プロファイラを作ってわかったのですが,被写界深度処理が重いので,やはり最適化の余地ありという気がします。

ImGuiの導入

ImGuiとは ImGuiとは,楽に組み込みができて,簡易的なGUIを提供するライブラリです。 https://github.com/ocornut/imgui 例えば,このようなコードを書くと, ImGui::Begin("Stats", nullptr, window_flags); ImGui::LabelText("", "FPS:%4.2f (%4.2f ms)", s_F…

スキャッターベースのボケ

ギャザーベースとスキャッターベース 前回までの被写界深度処理は,ギャザーベースと呼ばれているカテゴリの方法です。 周囲のサンプリングして集めて一つのピクセルの色を決定するという意味でギャザーベースと言われているのだと思います。 ただし,ギャザー…

倍率色収差の実装

倍率色収差 今回は簡単に出来そうな倍率色収差を実装してみます。 収差とは,レンズを通る光の波長の違いによるズレによる現象のことですが,倍率色収差は画面の周辺部にかけて色がズレていく現象のことだそうです。 http://cweb.canon.jp/eos/special/dlo/fac…

フラットなブラー

ボケの形 被写界深度表現を実装しましたが, なんとなくガウスブラーで画面をボカシていました。 実際はカメラのボケというようのは,ガウシアンのボケではなく,カメラの絞りの形状による円形だったり六角形のフラットなボケとなるはずです。 今回はガウスブラ…

ディザリングの実装

ディザリング トーンマップやガンマ補正を行うと, Float精度のHDRテクスチャから8bit精度のSDRテクスチャへのマッピングができるわけですが, シーンによっては精度不足であったりしてバンドが見えてしまうことがあります。 上の図は,画面の左から右にかけて,…

カラーコレクション

カラーコレクション 今度は最低限のカラーコレクション(ColorCorrection)を実装します。 カラーコレクションを行うことも踏まえて,今までのフローをおさらいします。 カラーコレクションを行う場合は,トーンマッピング前後における,HDR空間()かSDR空間()での…

光芒の実装

光芒 グレア表現として,ブルームを実装しましたが これだけでは寂しいので光芒(スター)を実装してみます。 光芒は物理的には,カメラの絞り羽根による光の回折現象によって特定の方向に光が伸びていくような現象のことを呼びます。 https://www.bhphotovideo.…

オートフォーカスの実装

オートフォーカス 被写界深度表現を実装したので, 現実のカメラとかスマホにあるオートフォーカス機能を実装してみようと思います。 Depthテクスチャから中央付近のピクセルをサンプリングすれば,カメラから画面中心の物体までの距離が取得できるので, この…