Bulletでゲームを作ってみるPart1 舞台の準備

物理エンジンといえば、建物を破壊したりリアルな挙動を実現する派手なゲームを思い浮かべますが、その様なゲームでなくても十分物理エンジンを活用可能です。物理エンジンには、形状同士の衝突を検出する機能があり、多数の形状同士の衝突判定を高速に行うことができます。キャラクターの移動、攻撃判定、爆弾、イベントトリガなどを物理エンジンを利用すれば簡単かつ高速に判定することができます。使い方に少しコツがいるため判定処理の方法を中心に説明しながら、簡単な3Dゲームを作っていきます。

続きを読む Bulletでゲームを作ってみるPart1 舞台の準備

DirectX11 DeferredContextによるレンダリング処理の効率化

DirectX11のDeferredContextはマルチスレッドで並列にレンダリング処理(GPUコマンド生成)を行うことでレンダリング処理の時間を短縮する機能です。DeferredContextを使うには少しコツがいるため、使い方を解説をします。ImmediateContextと同じ感覚で使用すると大量のエラーログが出力されて何も描画されません。

続きを読む DirectX11 DeferredContextによるレンダリング処理の効率化

std::shared_ptrが内部で確保するメモリについての調査&スレッド対応について

C++11で追加されたstd::shared_ptrやstd::unique_ptrなどのポインタを管理するテンプレートクラスは本当に便利です。ですが、内部で確保されるメモリや処理について考えておかないと思わぬところで処理速度の低下やメモリ不足に陥ります。特にゲームプログラムのメモリ管理は厳しくなる傾向があるため、shared_ptrが内部で確保するメモリのサイズや回数について調べてみました。ちなみにunique_ptrはほぼデメリットはありません。生ポインタと同じサイズ、includeとテンプレート処理でコンパイルがほんの少し遅くなる程度です。
※VisualStudio2017 x86プラットフォームでの調査 他の環境では結果が異なる場合があります

続きを読む std::shared_ptrが内部で確保するメモリについての調査&スレッド対応について

Bullet Physics OpenCL版を試してみる(Bullet3 VS2017)

まだ開発中(?)のBullet3OpenCLを試してみました。GPUを使って剛体の計算を高速に実行できることは確認できましたが、開発中のためか問題も多いようです。剛体1個でも10ms以上かかったり、フリーズ、GPUフリーズ等々、実戦投入はまだ先のようです。
デモの実行方法、HelloWorldプログラムの作成、処理時間の計測結果などについて説明していきます。


続きを読む Bullet Physics OpenCL版を試してみる(Bullet3 VS2017)