トックのCG部屋-トップ別室へ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

もう少し早くするために…

前回のモデルをレンダリングするのにかる時間
47秒強
まぁ一枚の画像を奇麗に仕上げるってんなら最終的な作画に1時間かかろうとかまわないんだよ
でもアニメーションをレンダリングしようと思ったらそうはいかない
レンダリングするのに1秒かかるものと5秒かかるもの
まぁ一枚だけレンダリングするだけだったら大した違いはない
あーいや、気分的にはそうでもないかもしれないけど…
でも作業に影響するほどの差はでない
が、これを使って60fpsで1秒分のアニメーションを作るとする
そうすると前者は1分、後者は5分かかる
まだこれくらいならいいかもしれないが1分分作るとするとその差は4時間にもなる

とまぁこんなくだらない前振りをだらだらとやって何が言いたいかって言うと
もう少しスピード上げなきゃなぁ…とそれだけ

んでコードを見直して速くできそうなところを探してみようと
まず速くできそうなのがfor文
下は特に意味もないけど配列に値を代入するだけのしょりを二通りの書き方で書いたもの

for(int i=0;i<3;i++){
   a[i]=i;
}

a[0]=0;
a[1]=1;
a[2]=2;

上の二つの実行結果は全く同じ
でもこれ何万回かループさせて時間を計るとわかるけどかかる時間が倍位違う
下は何もなくただ配列の三カ所に1つずつ代入するだけだけど
上は一回値を入れるたびに変数のインクリメントと条件の判定をしてる
まぁfor文の中でいろいろ処理してるんならそこまで差はでないだろうし並べて書くのも大変、
ループ回数がとんでもなく多かったり、そもそも変数で回数がかわったりしたら並べては書けない
そういうときは素直にfor分使えばいいんだけど上みたいなのとかは並べて書いた方がいい
それが何回も呼ばれる可能性があるならなおさら
んで、これ結構使っちゃってるんだよねぇ…
RGBそれぞれに同じ値かけたり、XYZそれぞれを足したり
そんなのが頻繁にあって全部上みたいなfor文使ってるわけだ

後は配列の初期化
これが普通に重い
メモリ食って頻繁にガベコレするからさらに重い
これもたくさん使ってるんだけど…
これをなくすのは結構難しいんだよなぁ…
for文は楽だから使ってるのが多いんだけど
こっちは必要だから作ってるのがほとんどだからなぁ

と、とりあえず上の二つをどうにかして少なくしようというわけで
まずどこを改良するのが一番効果的か
そりゃまぁ一番多く呼ばれてるところを改良するのが一番だわな
そうすると結局行き着くのが交差判定をするメソッド
んでそこをよく見たら無駄なfor文、配列の初期化の二つを併せ持つメソッドを4回も呼んでた
これは二点からベクトルを作るメソッドなんだけども
交差判定するには
視点→視線到達点、視点→頂点1、頂点1→頂点2、頂点1→頂点3
の4つのベクトルが必要
どれも消すわけにはいかない…
とりあえずfor文だけを書き直したら47秒強→45秒強と約2秒縮まった
あとはどうにかして配列の初期化を減らせないか…と考えてふと気づいた
上の4つのベクトル
全部メソッドが呼ばれるたびに作ってたけど
よく考えたら視点→視線到達点はどのポリゴンと判定しようとかわらないし
頂点1→頂点2、頂点1→頂点3も視点がかわろうとかわることはない
つまりその3つを先に計算しておけばこのメソッドで作らなきゃいけないのは
視点→頂点1のベクトルだけということになる
まぁ計算した値をずっと持ってる分メモリは食うだろうけど
そんな感じで改良した結果36秒台まで縮まり
他のところも頻繁に呼ばれてるfor文を削ったりした結果
最終的に34秒強まで縮めることができた
やっぱり見直してみるもんだね…
ちなみにVMの設定変えたりして試したときのモデルは11秒でできたよ

さて3割近く早くできたとはいえまだまだ時間がかかってるわけで
あとはどこを改良すればいいかね…
といってもレンダリング時間の大半を交差判定にかけてる以上
それとは関係ないところを改良しても大した効果は見込めないだろうなぁ…
  1. 2009/06/30(火) 07:44:54|
  2. 自作レンダラ
  3. | トラックバック:0
  4. | コメント:0
<<敵ドローン作り直し | ホーム | エクスポーター仮完成>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://took.blog72.fc2.com/tb.php/572-9f65d195
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

トック

Author:トック

プロフィール(仮)

twitter:elgraiv_took
└ブログ更新情報

twitter:elgraiv_take
└無駄な日常つぶやき用

FC2カウンター

コンテンツ一覧

本棚

最近の記事

カテゴリー

月別アーカイブ

ブログ内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。