Bullet Physicsのマルチスレッド対応について(Bullet2.87 VS2017)

Bullet2.86は対応途中で2.87から対応するようです。Githubから開発中の2.87を取得してマルチスレッド対応について調べてみました。結論から言えば、ゲームプログラムでは使えそうにありません。できるだけマルチスレッドに有利な状況を作っても、それほど処理時間は短縮されませんでした。大量のオブジェクトを扱う3DCGレンダリングなどで効果を発揮するかもしれません。
検証は4コアCPU(AMD A8-7650k)で行いました。CPUの種類、メーカー、PC環境で結果が大きく変わる可能性があります。また、使い方が間違っているだけかもしれません。

続きを読む Bullet Physicsのマルチスレッド対応について(Bullet2.87 VS2017)

Bullet Physicsを使ってみる (Bullet2.86 VS2017 DirectX11)

最新(2017年6月現在)バージョン2.86のBulletPhysicsにはPythonでのBullet利用、VR用のサーバー/クライアントプログラム、新API(Bullet3)の物理計算やOpenCLによる剛体計算などが追加されているようです。Bullet3やOpenCLによる計算はゲームプログラムで使えそうですが、複雑でサンプルも少ないようなので、まずはその前にVisualStudio2017でライブラリのビルドと従来API(Bullet2)の剛体計算、DirectX11を使用したデバッグ表示まで作成してみます。

続きを読む Bullet Physicsを使ってみる (Bullet2.86 VS2017 DirectX11)

Multi-Layer Weighted Blended Order-Independent Transparency

前回紹介したWeighted Blended OITは、ポリゴンの距離が離れすぎると半透明の重ね合わせが不自然になる問題があるため、それを解決する方法を考えてみました。
カメラからの距離でポリゴン(ピクセル)をレイヤ分けして描画、最後に遠くのレイヤから合成していくことで問題を解決します。同一レイヤ内にポリゴンが複数存在した場合は、Weighted Blended OITを利用してレイヤの代表値を1つ求めて、その値でレイヤ合成を行います。
レイヤ分けするためにはレイヤ数だけ繰り返し描画する必要がありますが、MSAAの機能を利用して1回の描画で行う方法を考案できたため、比較的簡単に実装できるようになっています(裏技的な使い方です)。

続きを読む Multi-Layer Weighted Blended Order-Independent Transparency

Weighted blended order-independent transparencyの実装

順番に依存しない半透明の描画技術(Weighted blended order-independent transparency)をDirectX11で実装してみました。
半透明を重ねて表示する場合遠くから順に描画する必要がありますが、この技術を使えば描画順序に関係なくソートした描画結果に似た結果が得られます。

続きを読む Weighted blended order-independent transparencyの実装

DirectX11アルファテストはどこへ? discard/clip命令とAlphaToCoverage

DirectX10以降、レンダリングステートからアルファテストがなくなり、シェーダーで同等(またはそれ以上)の処理が行えるようになっています。OpenGL3.0以降でもシェーダーで対応するようです。
シェーダーでアルファテストを行う方法、処理結果をまとめてみました。また、アルファテストを適用させた場所にも、アンチエリアス処理を行えるAlphaToCoverageという機能についても調べてみました。

AlphaToCoverageという機能は知っていたのですが、こんな便利な機能だとは知りませんでした……。

アルファテストとAlphaToCoverage

続きを読む DirectX11アルファテストはどこへ? discard/clip命令とAlphaToCoverage