Rust+Wasm+WebGLはじめました 環境構築=>Hello World =>画面クリアまで(Windows10)

投稿日:

Rustというプログラム言語が面白そうなので使い始めてみました。Rustから直接WebAssemblyコードを出力できるので、実行環境はWebブラウザに、グラフィック処理はWebGLを使用します。Webブラウザ上で3Dゲームが作成できるようになることが目標です。それとWebプログラム初心者なので、npm、wasm-bindgenなどのツールやバインダーは使用せず、基本的に手作業で作成していきます。というか使い方がよくわかってないだけですが…… 

今回行うこと Rustの環境作成&ビルド、ブラウザ上で実行、Rust⇔JavaScript間の関数呼び出し、WebGL導入まで

続きを読む Rust+Wasm+WebGLはじめました 環境構築=>Hello World =>画面クリアまで(Windows10)

Bulletでゲームを作ってみるPart3 キャラの移動

投稿日:

前回解説したBulletのコリジョン判定処理を使ってキャラの移動処理を作成します。複雑な状況でも正確で安定したコリジョン判定と移動がストレスにならない良好な操作性が目標です。
判定処理の検証や実験でいくつかキャラ移動処理を試作したので、キャラ移動処理テクニックと合わせて解説していきます。最終的な移動処理は、かなり複雑になってしまったため詳細は省略します。サンプルソースコードにできるだけ解説、問題と解決法など詳しくコメントしているので参考にしてください。


続きを読む Bulletでゲームを作ってみるPart3 キャラの移動

Bulletでゲームを作ってみるPart2 キャラ移動の準備

投稿日:

今回は、Bullet用意されているコリジョン判定を利用してキャラクターの移動処理を作成する準備をします。コリジョン判定を実装するには数学的な知識や特有なテクニックが必要になりますが、Bulletを使えば基礎的な数学知識だけで複雑なコリジョン判定を行うことができます。コリジョン判定関数の解説、使用上の注意など説明していきます。
続きを読む Bulletでゲームを作ってみるPart2 キャラ移動の準備

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)

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

投稿日:

前回Bullet2.87のマルチスレッド機能の検証を行いましたが、思ったほど効果が得られませんでした。今回はスレッド使用の方針を変えます。Bullet内部のマルチスレッド機能ではなく、外部で用意したスレッドでstepSimulation関数を実行することで並列処理を行いました。結果は、一部デバッグ機能で問題がありましたが問題なく動作し、条件は限定されますが3コアでの並列実行により2倍以上の高速化が実現できました。ゲームプログラムでの描画処理、ゲーム判定用物理計算、物理エフェクトの3つ処理を想定した検証プログラムを作成します。

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

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)