はかせのラボ

私の頭の中を書いていく雑記ブログです

プログラミング ReleaseビルドとDebugビルドでのパフォーマンスの差がえぐいw

あいさつ

どうも、はかせです。
今回はFPS改善のために色々やった話です。

行列計算の削減

とりあえず何がボトルネックになってるのか
処理時間計測したところ描画のための行列計算と、
実際の描画がそれぞれ7~8msぐらいかかっていました。

なので描画のための行列計算削減をしてみました。
具体的な理屈とかは下記のサイトで
ameblo.jp

そしてこのサイトにならって書いたコードです。

XMMATRIX DXCamera::GetDXCameraParam(TRANSFORM* transform)
{
	//x軸中心回転
	XMMATRIX worldX = XMMatrixRotationX(ToRadian(transform->Rotation.y));
	//y軸中心回転
	XMMATRIX worldY = XMMatrixRotationY(ToRadian(transform->Rotation.x));
	//z軸中心回転
	XMMATRIX worldZ = XMMatrixRotationZ(ToRadian(transform->Rotation.z));
	//移動計算
	XMMATRIX move = XMMatrixTranslation(transform->Position.x,transform->Position.y,transform->Position.z);
	//スケール計算
	XMMATRIX scale = XMMatrixScalingFromVector(XMVectorSet(transform->Scale.x, transform->Scale.y, transform->Scale.z, 0.0f));
	DirectX::XMMATRIX matrix = worldX * worldY * worldZ;
	matrix.r[0].m128_f32[0] *= transform->Scale.x;
	matrix.r[0].m128_f32[1] *= transform->Scale.x;
	matrix.r[0].m128_f32[2] *= transform->Scale.x;
	matrix.r[0].m128_f32[3] = 0.0f;
	matrix.r[1].m128_f32[0] *= transform->Scale.y;
	matrix.r[1].m128_f32[1] *= transform->Scale.y;
	matrix.r[1].m128_f32[2] *= transform->Scale.y;
	matrix.r[1].m128_f32[3] = 0.0f;
	matrix.r[2].m128_f32[0] *= transform->Scale.z;
	matrix.r[2].m128_f32[1] *= transform->Scale.z;
	matrix.r[2].m128_f32[2] *= transform->Scale.z;
	matrix.r[2].m128_f32[3] = 0.0f;
	matrix.r[3].m128_f32[0] = transform->Position.x;
	matrix.r[3].m128_f32[1] = transform->Position.y;
	matrix.r[3].m128_f32[2] = transform->Position.z;
	matrix.r[3].m128_f32[3] = 1.0f;
	//転置行列を計算
	return XMMatrixTranspose(matrix * mView * mProj);
}

要は行列を素直に計算した結果を見たところ、
差分がそんなになかったから差分のとこだけピンポイントで計算して
計算量減らそうってやつですね。

変更の少ない変数のメンバ化

毎フレーム実行されるけどそんなに結果が変わらないものを
メンバ変数に上げて処理量を減らそうという取り組みです。
(カメラのview行列やproj行列とか)

結果

さて色々な微調整を行った上での実行結果です。
f:id:hakase0274:20190629223318p:plain
ショボ━(´・ω・`)━ン

ちなみに

一応ダメもとでReleaseビルドでもやってみました。
f:id:hakase0274:20190629223550p:plain
( 'ω' )ファッ!?

あとがき

今回はFPS改善のため色々やってみたものの
結局Releaseビルドが最強なんだなって話でした。

ぶっちゃけ他の人にやってもらうのはReleaseビルドなんで
ReleaseビルドさえFPS担保されてればいいんじゃないかなぁ
とか思い始めてきました・・・

ただこういった細かい調整も後々生きてくれると信じて
今後も続けていきたいと思います。

それでは今回はこの辺でノシ