■サイト[SilverSecond]トップ
■開発日誌トップ
■ 2009/02/13 (金)  言語とモノリスの速度 ■
クリスマスにさえ何ら衣装を着込んでなかった
某保険屋さんの巨大アヒルちゃんを見たら今日はケーキをかぶってた、
何を言っているのか分からないと思いますがウルフです。マジです。

今日は色んなものの速度について検証してみました。

【C言語とRubyとウディタの計算速度】

前回もウディタの処理速度についてチラっと触れましたが、
実は裏で詳しく検証したデータを取っていたので、そのお話をします。
比べるのはC++とRubyとウディタの3種類の単純な変数処理についてです。

まず、C言語直打ちでX = X+Y;をコンパイルしたものを計算させた場合と
ウディタの変数操作1回分を比較すると、さすがに1300倍くらいCの方が速いです。
また、Ruby(ツクールXP)のスクリプト内で「$X=$X+$Y」だけを行うと、
ウディタの変数操作の約13倍くらいの回数、計算することができます。
以下は100ミリ秒(0.1秒)あたりの単純な計算可能回数です。
(RGSSは時間計測関数が分からなかったので、ハングアップエラーが出るまでの
10秒間に何回計測できるかを算出し、逆算しています)

【100ミリ秒あたりの計算回数】(CPU 2.5GHz環境下)
※どれもfor文または回数指定ループ内で実行したもの
C++ : X=X+Y[※要コンパイル] 4500万回
Ruby(RGSS) : スクリプト $X=$X+$Y 45万回
ウディタ : 変数操作V[0]=V[0]+V[1] 3.5万回

ウディタの変数操作は、変数値を数値に変換する処理とか
元の値を拾ってくる処理とかオーバーフローを避ける処理だとか
バージョン違いを吸収するための処理だとかエラー時の処理だといった風に
おまけがいっぱい必要になるので、どうしてもその分だけ重くなります。
よく考えたら、配布状態のデータをプレイする際だけ余計なエラーチェック処理を
行わないようにするといった工夫で、処理速度が少し速くなるかもしれませんね。
余裕があったらこの辺りもチェックしてみたいところ。

にしてもこれ見ると、ウディタは元より論外として
Rubyの処理が思っていたより遅いなあという印象です。
ツクールVX・XPはこのRubyでイベントコマンド処理を作っているので、
例えば変数操作とイベントコマンド制御部分の1回分を足して14行以上使ってしまうと、
イベントコマンド同士の比較ではウディタより時間がかかることになります。
逆に、13行以内で作れればツクールの方が速いことになります。
XPは変数操作内だけで150行(※といってもほとんどwhenの分岐なので詳細不明)ほど
記述されているので、数値が不要な場合は、4行だけで構成されている
「スイッチの操作」を使ってねということなんでしょう。
まあそれ以前に、複雑な自作システムは全部Rubyで組めって話だと思いますけれど。

でもそのRubyと比べても、やっぱりC++の方が100倍速いので、
速度を追求してスマートに動くゲームを作りたいならばC++でどうぞ、ってことで。
C++なら、弾幕ゲームを作るとしても単純にウディタで作る場合の1000倍、
Rubyで作る場合の100倍の弾が出せるわけです。まさに桁違い。

ただ私の中では、高速な「書き換え→テスト」作業が容易な
イベントコマンド型はやはり捨て切れません。
RubyやCみたいに、構文が間違ってたら動かないとか、コンパイルを要するとか、
そういうことがないのが特にいいです。あとはウディタの高速化が課題ですね。
ゆっくりできるようになったら、もっと処理高速化の検討を行いたいです。



【女神モノリスの速度】
お次は全然実用的じゃないお話!モノリスフィアのお話です。
空想科学なんちゃら読本的な意味で女神モノリスの速度を
マジメに計算したレポートがあったので公開しておきます。

【単位 まずは1ピクセルの大きさを算出する】
モノリスの身長が165cmだと仮定した場合。
ゲーム内では彼女の身長は36ピクセルなので、1ピクセルは約4.5cmと推定できる。

【本題:モノリスの最大速度を算出する】
モノリスグラビティがレベル10の場合、モノリスは、真横、または真下方向に
最大速度で秒間960ピクセル移動できる。
その時の秒速は43m、つまり時速は約155 kmである。

だがゲーム内物理法則では、斜め45度で移動すると縦横ベクトル共に
秒間960ピクセルの速度が出るため、その場合の最大速度は時速約220km。

つまりモノリス様は生身で時速220kmで移動できます。
こんな速度で頭ぶつけてもノーダメージとかどう考えてもゴム人間。
以上、知らなくてもよかったモノリス様の最大速度でした。


以下は前々回の黒ウリユ記事に対するコメントです。
>あれ…ウリユならデフォルトでこれくらいは
>言ってきそうなイメージなのですが!    

知らない間に人の記憶の中で黒くなってるウリユ。

>・ウリユの見た目が少し成長したようにみえます 
>・ロリじゃない・・・だと?                 
>・ていうかシル学ウリユはいくつくらいなんでしょか?
> 成長してるぽいので中高生くらい?         

言っておきますが、ウリユはロリキャラじゃなくて妹キャラですよ!?
劇中では14歳(中3)から始まって17歳まで成長する予定なので、
使い回せるようにあんな感じにしています。

>・黒ウリユも本編にでないでしょうか?
>・これはいい毒舌・・・何らかの形で実装してもらえると嬉しいです
>・黒いウリユもまた良しです!

こんなウリユいやだぁぁぁってご意見が一件だけありました。
つまりそれ以外は全部こんな感じ。皆さんMのかたが多いんでしょうか。

>うちの業界ではご褒美でござる>黒ウリユ
どこの業界でござるか。

>ところで今回のデフォ名はゴンベエとナナシじゃないんでしょーか?
ゴンベエとナナシの他にアランスミシやジェーンドゥなどをご用意!
ということは別に考えてませんがゴンベエとナナシでいいような気がします。
サラさんに名前付けてもらおうとしたら「ゴキブリ」とか「うすのろ」とか
付けられたりするのもイヤじゃないですか!?

>シル学の登場キャラ募集してますけど、名前のある
>キャラって大体登場確定してたりするんでしょうか?

どっちかというと何もないところから増やしている感じなので
最後までうっかり忘れられているキャラが続発する予感です。

>リクレールさんをお風呂に入れてもあまり大騒ぎになってない・・・
>つまりリクレールさんは男の娘だったんだよ!!          

なんだってー
関連記事

▲追記を閉じる▲

 
>あれ…ウリユならデフォルトでこれくらいは
>言ってきそうなイメージなのですが!    

知らない間に人の記憶の中で黒くなってるウリユ。

>・ウリユの見た目が少し成長したようにみえます 
>・ロリじゃない・・・だと?                 
>・ていうかシル学ウリユはいくつくらいなんでしょか?
> 成長してるぽいので中高生くらい?         

言っておきますが、ウリユはロリキャラじゃなくて妹キャラですよ!?
劇中では14歳(中3)から始まって17歳まで成長する予定なので、
使い回せるようにあんな感じにしています。

>・黒ウリユも本編にでないでしょうか?
>・これはいい毒舌・・・何らかの形で実装してもらえると嬉しいです
>・黒いウリユもまた良しです!

こんなウリユいやだぁぁぁってご意見が一件だけありました。
つまりそれ以外は全部こんな感じ。皆さんMのかたが多いんでしょうか。

>うちの業界ではご褒美でござる>黒ウリユ
どこの業界でござるか。

>ところで今回のデフォ名はゴンベエとナナシじゃないんでしょーか?
ゴンベエとナナシの他にアランスミシやジェーンドゥなどをご用意!
ということは別に考えてませんがゴンベエとナナシでいいような気がします。
サラさんに名前付けてもらおうとしたら「ゴキブリ」とか「うすのろ」とか
付けられたりするのもイヤじゃないですか!?

>シル学の登場キャラ募集してますけど、名前のある
>キャラって大体登場確定してたりするんでしょうか?

どっちかというと何もないところから増やしている感じなので
最後までうっかり忘れられているキャラが続発する予感です。

>リクレールさんをお風呂に入れてもあまり大騒ぎになってない・・・
>つまりリクレールさんは男の娘だったんだよ!!          

なんだってー
関連記事