日記

正式なブログは現在準備中。いや、放置中。
しばらくはHTML直接入力で頑張るか…

2009.06.09 忘れてた
しばらくホームページの存在を忘れてました。最近は音楽系のソフトを作ったりいじったり仕事が忙しかったりで、前回予定してたアニメーション実装が完了して止まっています。
リグは面倒なのですっ飛ばしてグラフィック周りに手をつけようかと思ってたんですが、全くやってないですね^^;
そろそろDirectX11も出ちゃうし、どうすっかな…

2009.02.18 アニメーション実装中
GUI だいぶレーシングとしてまともに遊べるレベルになってきました。別にこれで何かをつくろうってわけじゃないんですけどね^^;
アニメーションの実装はそろそろ出来そうですがリグ周りの実装がどうなることやら。IKなんてもうチンプンカンプンでPhysXのジョイントに頼ろうかと思っているくらいですorz

2009.01.26 1月もおしまい
GUI また前回から1ヶ月経ってますね。これはホームページ消滅の危機でしょうか。最近余裕が無いんです^^;
しかし開発はやってますので進捗報告。ゲーム製作用基盤の作成は、 外部ツールから出力したデータをインポートして簡単に操作して遊ぶくらいならあっという間に出来る所まで進みました。
次の作成予定はアニメーションと、簡易的なリグの実装で、1ヶ月以上はかかりそうです。気長にやりまさぁヽ(´ー`)ノ

2008.12.26 2008年もおしまい
はやいです。あっという間。前回更新から時間経ちすぎですみません^^;あれ?前と同じことかいてますね。
前回気になっていた話題「Core i7、Direct3D11SDK、NFSUC、MGO2MEME」はもう過去の話のようで。

Core i7で一台組みたいと思っていましたが、CPU以前にDDR3の値段が高すぎるため、諦めて今格安のDDR2でRAMドライブを作ることにしました。 とは言っても今のマシンはDDR1世代のマシンなので、マザーとCPUが余計に必要なんですけどね。でもまあこれでようやくビデオカードとつりあいそうです。

2008.10.31 10月もおしまい
はやいです。あっという間。前回更新から時間経ちすぎですみません^^;
リトルビッグプラネットが発売されましたね。個人的に面白いかは同であれ、コンセプトは興味深いので今後の動向に注目です。
11月は気になる話題が色々。Core i7の発売、Direct3D11SDKリリースの噂、ゲームに関してはNeedForSpeedの新作、MGO2拡張等がありますね。たのしみだぁ!

2008.09.17 マルチスレッドタスクシステム
EffectiveC++,STL,EfficientC++を読んでいるうちに、今作ってる基盤システムがダメダメに見えて作り直しています。もうこれで4回目くらいですかね。 今度はちゃんと最適化を重視する所と生産効率を重視する所を明確にし、例外を効率よく使い、マルチスレッドに耐えうるシステムを作りたいな。
またこういうことが起こりかねないので、もう実装方法が明確な物は取りあえず実装しないで型だけ作っていくことにしました。これがいわゆるスケルトン?

これまでタスクシステムの必要性がよく分からなかった私ですが、マルチスレッドに対応するには無くてはならない存在と感じ製作中。 関数ひとつ呼び出すにもいちいちスレッドなんて作ってられないし、あるスレッドの終了をメインスレッドや他の処理が待機したり、コア数分のスレッドを効率よく使ったり使用と思えばなおさらタスク化する必要がありそうです。

それにしてもデバッグが死にそうだorz

2008.08.28 インライン化条件
D3DXのソースを参考に試しにベクトルクラスを作ってみた。しかし処理時間に倍近くかかってます。全く同じ処理をしている関数で何故ここまで速度に差があるんでしょう。
ためしにビルドしたソースをアセンブラで除いてみると、なんと関数がコールされてました。インライン化されていないようですね。 そこで警告レベルを最大に設定してみると、やはりインライン化出来なかったと言う警告が出てます。さて何がいけないのか・・・

調べて見ると、インライン化失敗条件に「コピー構築されたオブジェクトを値で受け取る関数を、-GX/EHs/EHa でコンパイルした場合」と言うのがあります。
確かにオブジェクトを値で返していて、例外処理(-GX/EHs/EHa)も有効だけど、それはD3DXとて同じこと。

結論から言うと、空のデストラクタを宣言していたのが原因のようです。コピーを返す際の例外発生時にデストラクタを呼ばないといけないから…って事なのかな?^^;

2008.07.27 カテゴリー分け
されてました。ビックリw
GUI

2008.08.27 PhysXちょっと更新
と言うわけでPhysXのページがageia時代のままだったのを、nVidia用に変更しました。あんまり変わってないんですけどね^^;

2008.08.27 アクセス解析
久しぶりにアクセス解析してみると、検索エンジンによるアクセスでphysxが一位になってますね。これは更新しなくては^^;
あと、ばんばんじいって言うワードで結構来てます。なんぞww

2008.08.26 高速化
そろそろD3DX付属の算術クラスに依存したコードを書くのをやめて、勉強がてら自分で作るべきかと。 しかし、高校数学レベルの頭で悩んでみてもD3DX付属の物にかなう訳がないので、何かを参考にする必要があります。

実は今更知ったんですが、高速処理系はインライン定義されているはずなので、ヘッダーファイルにソースが丸々あるはず。 D3DX内を調べてみると、略全てのソースが丸見えでした。んじゃこれをパク…参考にして、作れば何とかなりそうですね。

で、同じように実装したつもりが速度が大分違う…30%位違う。 よくよく見てみるとD3DXの物は通常のinlineじゃなく、forceinlineという得体の知れない物を使ってるようで、 ためしに使ってみた所同じ速度になりました。まだまだ知らないことが多いなぁ…。

2008.08.22 DirectX11
DirectX11に関する話題が少しずつ上がってきました。NVIDIAが公開、DirectX 11世代の次世代GPUについて
nVidiaは10.1に興味がなさそうだったので11はどうなる事かと思ってましたが、こっちに焦点を絞ってたのかな?

どうやらテッセレータは本当に追加されるようです。DirectX8世代辺りから何度も失敗して来ましたがいよいよ現実化しそうですね。
具体的には、頂点シェーダとジオメトリシェーダの間に「ハルシェーダ」「テッセレータ」「ドメインシェーダ」が追加され、ハルシェーダで分割情報を与えてテッセレータで自動的に分割し、ドメインシェーダで分割後の頂点を再編集するんだとか。
テッセレータを使用する場合は、ポリゴンではなくパッチと言う単位で情報を格納するようですが、四角形が使える用になるかもしれません。また、説明を見る限りレベル1からレベル2へのスムーズな変化も可能かもしれません。

これでピクセルシェーダも含めてシェーダが五つ。汎用シェーダーになってからやりたい放題ですねw

2008.08.20 算術処理のベンチマーク
自前で算術系クラスを作るのは骨が折れるので、他のライブラリの物をラッピングして使う予定なのですが、色々あるため処理速度を量ってみました。
使用したライブラリは、標準ライブラリ、PhysX、DirectXです。
結論から言うと、基本的な数学関数(sin,sqrt,pow等)に関しては、現在の標準ライブラリは昔と比べて非常に性能がよく、PhysXに付属の物と違いが分からないほどでした。
ベクトル、マトリックス、クオータニオンに関してもDirectXとPhysXで略互角で、マトリックスの掛け算だけがPhysXが非常に遅いことが判明しました。と言うかDirectX早すぎ^^;
以下は、Core2Duo 2GHzでシングルスレッドで1億回繰り返した場合の試験結果。PhysXのライブラリは殆ど使用せず、ベクトル、マトリックス、クオータニオンに関してのみDirectXの物を使用しました。
quat*=quat02.213s
mat*=mat04.000s
mat=quat03.597s
quat=mat15.000s
mat(axis)13.807s軸より作成
quat(axis)09.059s軸より作成
mat.inv10.000s逆行列
vec3*=quat07.908s(PhysX)DirectXに実装が見つからず。無いと不便だと思いますが…
vec4*=mat02.421s
vec3.length13.089svec2でも変わらず、自前で実装しても変わらず
sqrt12.000s
pow11.000ssqrtの逆の処理なので大体同じ
sin,cos06.388s
NxMath::sinCos07.450s(PhysX)あると便利かもしれない。標準ライブラリには無いのか?
tan07.800s
asin,acos08.684s
atan08.388s
abs00.700s
分かったことは、sin,cos,tanよりasin,acos,atanの方が遅いこと、mat→quatの変換は遅いこと、sqrtは遅いこと、mat*matよりquat*quatの方が早いこと
以上、参考になれば幸いです

2009.01.26 どうやらNxMathの三角関数などは標準ライブラリの三角関数をインライン実行してるだけのようです。

2008.08.19 VisualStudio2008ExpressSP1
が出てるみたいですね。取りあえずC++をインストール。
大きな変化は分かりませんが、std::tr1に色々追加されてる気がします。まあそれでもboost使いますけどね。

2008.08.14 まだまだ未熟なのです
boostが何かと便利そうなので色々触っているのですが、自分はまだまだC++について知らないことが多いみたい。
特にテンプレートを多用したソースは追うので精一杯。これではいかんと、前から欲しかった本をまとめて買って勉強することにしました。

1.Effective C++ 原著第3版
仮想化、テンプレート、例外等、C++の代表的な機能の正しい使い方が書いてあり、これを読んだと言うだけで、C++使いこなせる奴だと思われるくらいメジャーな本らしいですね

2.Efficient C++パフォーマンスプログラミングテクニック
C++でCと同等かそれ以上の処理速度を出すための秘訣が書かれているらしい

3.Effective STL―STLを効果的に使いこなす50の鉄則
効果的に使う秘訣。具体的に何が書いてあるのかはよく分かりません

延べ\11,390なり。nVidiaの出してるGPU Gamesとか買うと一冊でこの位の値段するから安いほうか^^;
さて、明日から4連休の夏休み。何冊読み終えるかな・・・

2008.08.01 もう8月だと!?
早い、まじで早い。前回の日記更新からもうすぐ1ヶ月たちそうですね^^;更新してないのにアクセス数があまり減らないのが不思議ですが…
それは置いといて、ボウラーズのランキングサーバーがよく止まります。月一位のペースで確認してるんですが毎回止まってます。繋がらなかった方々すみませんm(_ _)m
なんか記事になるような面白いことしなくては…orz

2008.07.11 GUI開発
GUI 2D描画エンジンが大分出来上がったので、前々から作りたかったGUIシステムを作成中…
オーサリングツールやゲームの設定画面、HUD等に使用する予定です。早く完成させねば。

2008.07.10 安!
気が付けば1ヶ月近く更新してませんね…。取り立てて書くことは無いのでちょっとどうでもいい話を。
最近ボーナスをもらって少し懐が暖かくなってきました。折角もらったんだから何か買わないと勿体無い…いや無駄遣いはいけませんね。 でも気になるあれこれを調べてみようかと。

今使ってるmp3プレイヤーがもう5年前の物で、いい加減動作が不安定なのと256MBしかないので次の物を探していたら、何と4GMが7千円で売ってるではないですか!5年前にかった256が2万弱だったのを考えると、ほぼムーアの法則と一致します。スゲーw
と言うわけで衝動買いが決定。それとイヤホンが昔ながらなのでカナル式の物を試しに使ってみます。
次に、前々から自宅にも欲しいと思っていたRealforceのキーボード。最近PS3でオンラインをやるのですが、USBのキーボードが無いのでこれを機に購入決定!

結局3万くらいしますね。無駄使いはいけません。ポチっと。

2008.06.19 Havok無償提供開始
もう大分前の話ですが、HavokのSDKがPCでは無償で利用出来るになったようです。ライセンスを読む限り、10$以下は断り無く使用・配布が可能で、10$以上は連絡した上でロゴを表示すれば無償で利用出来るみたい。
しかし利用できるのはPhysicsとAnimationだけのようで、ClothとかBehavior?とかDestruction?とかは使えないみたい。Clothが使えないのは残念です。そういえばHavokFXはどこに行ったのやら…
少し触った感じでは、PhysXより色々出来そうですね。特にアニメーションと物理の連動が組み込まれているのがありがたいです。
取りあえずドキュメントに一通り目を通しますか。

2008.06.17 GTX280出た!対するAMDにも期待
続けてASUSTeKからGTX280搭載ビデオカードが出たようです。メモリは1Gで、価格は7.7万くらいか。

また、AMDも負けずと新製品「Radeon HD 4800」をリリース予定だそうで、こちらは詳細は不明ですが、ハイエンドでは1TFLOPSを達成しつつ消費電力は110Wの価格が200〜300$で1スロットサイズだとか。
これが本当だとすれば凄いことで、これまでnVidia一筋だった私も乗り換えるかもしれません。因みにミドルレンジ向け製品は25日リリース予定だそうです。

あと、AMDから新しいデモが出るみたいですが映像を見る限りは凄そうですね…これが4800ではリアルタイムに動くんですよね。きっと^^;

2008.06.17 GTX260出た!
ASUSTeKからGTX260搭載ビデオカードが5.6万くらいで出てますね。上位のGTX280もそろそろ出ると思いますが、価格は8万くらいになるのかな…
性能としては、9800GTXの倍程度、GX2より少し高性能で、状況によってはGX2に負けるようです。 ダイサイズもさらに拡大して、消費電力熱量ともに最高記録だとか^^;
また、ジオメトリシェーダーの速度は大幅に改良されたようですが、未だDirectX10.1には未対応のようです。

これはいろんな意味で手が出しづらいですねw

それとは別の話で、CUDAが2.0になって倍精度小数の計算が出来るようになったんだとか。しかもG80やG90でも実行できるんだとか。
つまりPhysXが動きます。これは楽しみ〜と思ったら、一つのGPUでは画面描画とCUDAと同時に動かせないみたいですね。 次のカードを買う時までお預けですorz

2008.06.16 VSMを知らなかっただと!?
はい、知りませんでしたorz
発表されたのはもう2年近く前みたいですね。Variance Shadow Mapsという、シャドウマップを擬似的に効率よくぼかす技術です。 やりかたは、深度値と深度値の二乗を予めぼかし、実際のレンダリング時にそれらの値を使用し、陰の当たる度合いを確率的に求めます。

若干の不具合はあるらしく、調整は必要なようですが、PCF(Percentage Closer Filtering)に比べて非常に軽くて綺麗にぼけそうな気がします。 知ってから調べてみると、UE3とかPCMarkとかあちこちで採用されているみたいですね。何で今まで知らなかったんだろう^^;
個人的には陰はそこそこのクオリティで良く、若干の不具合はあってもいいので出来るだけ軽く処理したかったのでこの手法は目から鱗です。
ただしこのやり方だと深度バッファに直接かけず、nVidiaShadowとかFetch4とは相性が良くなさそうですね。あんなハード依存処理書きたくないので別にいいんですがw

2008.06.11 メモリアロケート
ゲーム製作において速度向上に必要な物に「メモリ管理」があります。
細かいクラスがたくさんあって、そのポインタを動的配列で管理しようとすると大量のnew deleteを繰り返すことになるんですが、それが中々時間のかかる処理なため、ゲーム内で独自のメモリ管理を実装するわけですね。

本格的にやろうとすれば、いくらか大きめなメモリを確保しておいて、その中でOSがやってる様なことをゲーム向けに最適化して管理するんだろうけど、そこまでやると面倒なので、取りあえず簡単に出来そうなことを考えてみました。

newとdeleteでは、newの方が確保に時間がかかると思っていたんですが、計ってみるとどうやらdeleteの方が時間がかかるらしいです。(環境にもよるのかな?)
そこで、deleteに関しては開放処理自体は後回しにして取りあえずすぐに処理を戻してやると早いことが判明、実際の開放処理はバックグラウンドでゆっくりやることにします。
newに関しては、頻繁に要求されるサイズの領域をあらかじめ複数確保しておいて、new命令時は確保済みの領域を渡すことにします。小さいサイズならそんなにメモリの無駄も気になりませんし。

大きな領域は諦めてその都度取得することにします。といっても、メッシュデータやら音声データやらは遅延ロード的なやり方をするのが一般的なのでそこまで高速にやら無くてもいいようです。
このやり方で幾らか高速化できるといいんですけどね^^;結果は後ほど。

過去ログはこちら


アクセス 総計 177791 今日 346 昨日 355
 次へ >
日記
 次へ >