トップページgamedev
1001コメント322KB

シューティングゲーム製作技術総合 17機目

レス数が1000を超えています。これ以上書き込みはできません。
0001名前は開発中のものです。2008/11/27(木) 10:18:19ID:bBI1A+d5
ゲームプログラマなら誰もが通る、もしくは、通った道。青春の香り?
それは「シューティングゲーム製作」・・・。

このスレでは、そんなシューティングゲームの製作技術や技術の検証、成功談
失敗談笑い話、難易度の設定方法論、多弾の是非などについて語り合いましょう。
もちろんBulletMLなどで弾幕を作成してみたり、自分の作ったシューティングを
晒してみたり、プロジェクトをはじめてみるなどもOK!

ただし、シューティングの未来とか既存のゲームの話題などは、関連する他の
スレでやってくれ。

過去スレ,関連スレは >>2-3で。
0967名前は開発中のものです。2009/03/31(火) 11:20:46ID:NJFMHqzD
関数のほうは、#pragmaとかで処理系の最適化を効かせた?
まあそれでもテーブルの方が速いってことは十分ありえるが
0968名前は開発中のものです。2009/03/31(火) 17:37:45ID:AlfaWHG9
繰り返す話題だけど、環境依存があって当然の物の話だろ?
>>966のPCで特殊な結果が出たなら、珍しいねとしか言えない
0969名前は開発中のものです。2009/03/31(火) 17:52:51ID:oMQsq3DX
環境が分からんから話が交錯するのです。
速度とか書き込む前に少なくともOS・CPUスペック・RAM容量・言語・住所・氏名を明示しましょう。
0970名前は開発中のものです。2009/03/31(火) 18:03:17ID:EoCekJlW
この手の話題、過去に何度も出てくるけど、
ベンチマーク用のサンプルソースが示されないのはなんで?

論ずるよりもそれ実行すれば一発で納得できると思うんだけど
そんなに特殊なプログラムなの?
0971名前は開発中のものです。2009/03/31(火) 18:08:55ID:wt58uqRX
描画以外の速度なんざ誤差
可読性重視
0972名前は開発中のものです。2009/03/31(火) 18:35:26ID:YrEQyE+G
sinfじゃなくてsinを使うとコンシューマーでは遅くなるが。
0973名前は開発中のものです。2009/03/31(火) 18:55:24ID:DdunG5bw
ああ俺はDXライブラリを使ってたから…
DirectXなら当然のことなのか
ついでに動的使う負荷も無視できるのかな
あれってvirtual宣言した時点で動的と判断されて負荷かかるのかな
0974名前は開発中のものです。2009/03/31(火) 19:30:48ID:e23bhJED
コイツってさ、質問が意味を成してないよな
設計する為に継承したり、インターフェース用意したりしてるんじゃねーの?
手元に1行も自分が書いたソースねーだろw

まさに>>888
0975名前は開発中のものです。2009/03/31(火) 20:01:42ID:eRxRYNY8
// sin関数
dblData = 0.0f;
intTime1 = GetTickCount();
for ( i = 0; i < 100000; i++)
{
dblData = sin ( 0.5f);
}
intTime2 = GetTickCount();
intKekka1 = intTime2 - intTime1;

// グローバルメモリ参照
dblData = 0.0f;
intTime1 = GetTickCount();
for ( i = 0; i < 100000; i++)
{
dblData = dblSin[i];
}
intTime2 = GetTickCount();
intKekka2 = intTime2 - intTime1;

これで、intKekka1が16、intKekka2が0
コンパイラ VS C++ 2008
Dual core 1.6GHz メモリの速度は忘れた。
C++のsinが多項式でいってるのかとか、どこまで精度だしてるかは不明。
0976名前は開発中のものです。2009/03/31(火) 20:04:29ID:eRxRYNY8
100000→1000000で
intKekka1が188、intKekka2が15
VS C++のsinだとメモリ参照したほうが早い
他のコンパイラは、ここになかったんで不明

0977名前は開発中のものです。2009/03/31(火) 20:07:14ID:C8QskIEz
関数がvirtualであることと擬似sinとライブラリ組み込みsinの速度が違うことに関係は無い……
0978名前は開発中のものです。2009/03/31(火) 20:07:31ID:AlfaWHG9
どう見ても釣りです。 本当にありがとうございました。

キャッシュを一言も挟まない辺り狙ってるなw
09799782009/03/31(火) 20:11:04ID:AlfaWHG9
>>975
>Dual core 1.6GHz メモリの速度は忘れた。
Dualとか関係無いのはさすがに判るよね?

そこに書かなきゃいけないのは、CPUの2次キャッシュの大きさと、dblSin配列の大きさ
0980名前は開発中のものです。2009/03/31(火) 20:12:13ID:EVrWm6RK
>>978
文句ばっか言ってないでお前の環境での結果を見せればいんじゃね?
0981名前は開発中のものです。2009/03/31(火) 20:12:53ID:C8QskIEz
>>975
いや、sin[i]じゃないだろjk。
public double sinex(double rad)
{
for(int i=1;i<tbl.size();i++)
{
if(rad>tbl[i-1] && rad<tbl[i])return tbl[i];
}
return 0;
}
とかこんな感じじゃね?
0982名前は開発中のものです。2009/03/31(火) 20:14:58ID:C8QskIEz
いやごめん忘れて。角度に関して、最初から整数で丸める実装にすればいちいちテーブル範囲参照しないでいいんだな。おkだ。
0983名前は開発中のものです。2009/03/31(火) 20:22:33ID:ZKYAtsRN
>>975
テーブルを頭から走査したら駄目だろw
それでベンチマークになってると思ってるのかね。

それと、そのコードって最適化かかるとまずいんじゃない?
変数をvolatileで宣言してれば平気かもしれんが。
0984名前は開発中のものです。2009/03/31(火) 20:23:51ID:C8QskIEz
>>979
整数実装にすれば(0が0度、64が180度(1PI),96が270度(1.5PI)みたいな設計にしてるなら配列のサイズ関係ないっぽいぜ。
もちろん、それの前処理としてのiが渡ってくる過程が重要になるけど。

それにしたって*1000くらいしたあとに %128とかで片付ければいいだけなのでそんなにコストがかかってるとは思わないけどな。
0985名前は開発中のものです。2009/03/31(火) 20:33:35ID:eRxRYNY8
>>979
2次キャッシュが1024Kbyte
dblSinの大きさは、8000000byte

>>983
for ( i = 0; i < 1000000; i++)
{
intNo[i] = ((float)rand() / (float)RAND_MAX)* 1000000.0f;
}

dblData = 0.0f;
intTime1 = GetTickCount();
for ( i = 0; i < 1000000; i++)
{
dblData = dblSin[ intNo[i]];
}
intTime2 = GetTickCount();
intKekka2 = intTime2 - intTime1;

ランダムいれてみて、intKekka2が31。
今のやり方だとまだテーブルのほうが速い。
0986名前は開発中のものです。2009/03/31(火) 20:38:11ID:eRxRYNY8
>>983
volatileはつけてる。

0987名前は開発中のものです。2009/03/31(火) 20:40:53ID:eRxRYNY8
>>977
ライブラリ組み込みのsinの求めかたってコンパイラが違っても
計算のやり方同じなん?
gccでもVCでも同じ?
0988名前は開発中のものです。2009/03/31(火) 20:47:49ID:DdunG5bw
別にvirtural とsin との問題に絡めて聞いたわけでなく
速度繋がりでついでに別個の問題として聞いたわけだが
0989名前は開発中のものです。2009/03/31(火) 20:49:04ID:C8QskIEz
ライブラリ組み込み関数って大抵はgccの方が圧倒的に遅いんじゃないかなw
0990名前は開発中のものです。2009/03/31(火) 21:14:20ID:+ipl15Vv
つーか、全体の処理の中でボトルネックになってるかどうかを確認するべきだと思うんだが。
今時三角関数省いたくらいで喜ぶなよ。
0991名前は開発中のものです。2009/03/31(火) 21:35:55ID:WEsXEB63
シューティングなんぞループと加算と描画と三角関数くらいしか使わないもんだし、その中の一つ が削れただけでも影響は結構大きいかもだ
0992名前は開発中のものです。2009/03/31(火) 22:05:59ID:yOP/w+uJ
「テーブル参照より三角関数の方が早い」って言う人がいて、
「サンプルプログラム示して実行させれば誰もが納得するだろ」って話になってるのに
「環境で変わるから〜」とか
「三角関数省いたくらいで喜ぶな」とか意味わからん。
0993名前は開発中のものです。2009/03/31(火) 22:16:26ID:AlfaWHG9
現実にはミスキャッシュが起こるわけで、ソレの再現をすればよい
734msのダミーコードを追加した

intKekka1   750  実質 16ms
intKekka2   766  実質 32ms

for ( i = 0; i < 100000; i++)
{
 for ( j = 0; j < 100000; j++)
   tt = otherMemory[j]; //ダミーコード
}
intTime2 = GetTickCount();
dummyOnly = intTime2 - intTime1;

for ( i = 0; i < 100000; i++)
{
 dblData = sin ( 0.5f);
 for ( j = 0; j < 100000; j++)
   tt = otherMemory[j];
}
intTime2 = GetTickCount();
intKekka1 = intTime2 - intTime1;

// グローバルメモリ参照(←ヒープでいいよね?)
dblData = 0.0f;
intTime1 = GetTickCount();
for ( i = 0; i < 100000; i++)
{
 dblData = dblSin[ intNo[i]];
 for ( j = 0; j < 100000; j++)
   tt = otherMemory[j];
0994名前は開発中のものです。2009/03/31(火) 23:04:17ID:0FYQSp1G
現実には割と続けて使われることも多いわけで、
そこまで明らかにミスキャッシュを誘発させるベンチはどうなんだろうね。

あと、dblSin[ intNo[i]]; だとテーブル二段階アクセスになるから
ちょっと不利な計測の仕方でしょ。
0995名前は開発中のものです。2009/03/31(火) 23:15:34ID:WEsXEB63
誰か次スレたのむ
0996名前は開発中のものです。2009/03/31(火) 23:35:56ID:AlfaWHG9
>>994
doubleData[i] = (double)rand() / (double)RAND_MAX;
なる配列を加えて、
dblData = sin ( doubleData[i]);
にした

kekka1 734
kekka2 781

確かに、画像の回転ぐらいやらせんと説得力ないな
0997名前は開発中のものです。2009/03/31(火) 23:57:28ID:oMQsq3DX
妊娠してしまいますが
0998名前は開発中のものです。2009/04/01(水) 00:02:19ID:NFPupAwb
埋め
0999名前は開発中のものです。2009/04/01(水) 00:10:27ID:LuCgRd4k
シューティングで使う角度って10万も分割するのか……。
1000名前は開発中のものです。2009/04/01(水) 00:12:11ID:HvCh7B+t
http://pc11.2ch.net/test/read.cgi/gamedev/1212237657/
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。