出張。
出張。
出張。
出張。のハズが新幹線が強風の影響か何かで停電停止していて、しかたなく
引き返してきたり。
gccのテスト。povrayをPPCクロスビルドしてppcsimで
実行。コンパイル結果としては大丈夫そう。で、命令数だけの
比較を行なうと、gcc-3.3.3でのコンパイル&実行結果に対して
6.2%程度命令数が減っていました。実時間にするとどれだけ効く
のかは判りませんが、かなり改善率の高い結果の様に思います。
あと、ポリゴン描画テストコードも試してみました。こちらは
整数演算だけのコードなのですが、gcc-3.3.3でのコンパイル&実行
結果に対して1.2%程度命令数が減っていました。
命令の系統の使用割合はgcc-3.3.3と3.4.0とではどちらも変わらず、
見た事の無い命令が極端に多く実行されているような事は無い様です。
他にもPCH(Pre Compiled Header )が正式に取り込まれたりとか、
コンパイラ自体も色々付加機能が付いている様です。そんな感じで、
gcc-3.4.0、イイかも。
日付け越え前に帰着。
gcc-3.4が出ているのに気づいてダウンロードしてみたり。
でもしばらくしても終らず。
ダウンロードし終わって、PPCクロスビルドでconfigure/makeを
仕掛けて寝る。
昼過ぎ起床。
ぐうたら過ごして一日終了。
POV読みいじり。変形の仕込みを入れようと思った所で、
データ構造上うまく表現できない部分があったり。むむ。
そういや、宇多田ヒカルの旦那が創った映画「CASSHERN」ですが、
TVとか見てても、宇多田が歌っているとか、夫婦で出てきたのが初めてだとか、
そういった所ばかりが取り上げられてて、作品の内容に関する
話が殆ど無いのにガッカリしていたり。
昼間、ぐぅたらしながら見ていたTV番組(の再放送)で、普段使っている
言葉や当たり前だと思っている事で、改めて聞かれると答えづらい
疑問なんかをクイズにした番組をやってました。その中で
「本屋で立ち読みしているとトイレに行きたくなる」という話がありました。
私はそういう現象に遭遇した事は一度も無いのですが、
その現象がとある雑誌の投稿欄で
最初に掲載され、多くの人の共感を得た事から、投稿者の名前を
取って「青木まりこ現象」と言うらしいです。因みにその現象を
生ずる原因は、立ち読み時に目線が下向きになる事により、
まぶたが伏し目気味になると、まぶたの状態と関連のある腸の働きが
活性化され、結果、便意を
もよおすという事らしいのですが、本当の所はよく判っていないみたいです。
どれだけトイレに入る人が多いかという事で、本屋と本屋以外の店に定点
カメラを設置して人数をカウントした所、圧倒的に本屋でトイレに
入る人が多かった(本屋で2時間あたり70人というのに対して、他では
10人以下)という結果が得られていました。でもTANEが思う
所、調査に使用された本屋は「神田の三省堂」である為、あの辺の
地理から言うと単位面積当たりのトイレ設置率が極めて低い、
例えるなら「秋葉原のLaox Computer館」という感じ(<判りにくいよ)である
所から、参考になるのかどうかが少々疑問に思ったりもしました。
他にも「うんともすんとも」の「うん」と「すん」て何?とか、
「コク」って何?とか色々ありました。前者「うんすん」は
先日、「エンタの神様」で「すん」て何よ?というのをネタにして
いた芸人が出てた辺りが個人的にタイムリーだったりして(^^;
語源は「うんすんカルタ」という
江戸時代に流行ったカルタが元になっていて、ゲーム中、
「うん」とか「すん」とか言いながら進める(麻雀の「ポン」とか「ロン」とか
そういう感じ?)ものらしいです。で、「うん」と「すん」は、カルタの
札の中にそういう札があって、ポルトガル語で「うん」が一番、
「すん」が最高という意味があるとの事でした。「言わなくなった」というのは、
江戸幕府の禁止令により、博打にあたるこの「うんすんカルタ」
が全国的に禁止された事から、自然に消滅していったという事
らしいです。そういう背景から、何か作用させる事で反応しなく
なった状況に対して、「うんともすんとも言わない」という
慣用句が生まれたという事の様です。13へぇ。
朝割と普通に目覚めたのですが、その後ぐぅたら寝倒したり。
そんな訳でCOOL GIRL ASKA編をちょっと始めた所、
思いっきりハマって風呂の水を溜めていたのを忘れてしまっていたり(汗;
ICEとの大きな違いとして、アイテムのフックを使う事で相当に
高い位置に上がれたりします。なもんですから、ICEの時は大体その辺を見渡せば
足がかりがあり、移動範囲がある程度制限されていたのに対して、ASKAの方は
自由度が高くなっている予感がします。ヤバいです。
久々にPOV読みいじり。と言っても、初期姿勢からの回転角を回転行列で
保持していたのをクォータニオンに置き換えてみただけ。
メリットとしては、回転量を生成するのに 行列よりも
クォータニオンを使用した方が計算量が少なくて済む点と、
4×4の行列の掛け算に比べるとクォータニオンの掛け算を使用した方が計算量が
若干少ないという点だけかも。3×3行列だとクォータニオンの掛け算の
方が計算量が多いのですが、回転量の生成にかかる計算量が少ない
ので、トータルで見るとクォータニオンの方が若干お徳という感じ。
しかしながら、メッシュの回転は「回転クォータニオン」
を「回転行列」に変換して、変換した回転行列を使用して
メッシュの頂点座標変換しているので、
結論として、クォータニオンを使用する事自体は速度向上に
殆ど寄与していません(^^;;
出張。帰着。ふぅ。
COOL GIRL。攻略本の力を借りて(^^;どうにかICE編をクリア。
これ、ノーコンティニュークリアするのは多分無理。そんな感じ。
出張。
出張。
回復せず今日も死亡。
具合が悪くなって死亡。
昼過ぎ頃起床。ぐーたら過ごしてみたり。
Cygwinのスナップショットをビルドしていたのですが、どうにも最新版を
入れた所、Cygwinの再ビルド(最新版を使って再び自分自身をconfigureから
実行)がうまくいかなかったり。configureが通らないというものですが、
ハングしたりcygwin1.dllのメッセージを出して止まったりという感じでは
ないので、謎。
以前、Cygwinのアップデートを
かけた時、configureが通らなかったりと謎が多かったのですが、
最近はファイルハンドラ周りをいじりまくっている様なので、その影響を
受けている様な気がしなくもない所。
COOL GIRLやって、疲れてちょっと横になったら思いっきり寝てたりして(汗;
TVをだらだら観たり。「バンパイアホスト」が面白いなぁなどと微妙に
はまっていたりするこの頃。
そんな感じで明日から出張です。
夕方頃起床(滝汗; 寝過ぎ。
COOL GIRLやって時間があっという間に過ぎ去ったり。
モンテカルロ法。普段、一意に答えの求まる問題しか扱った事が無い
ので、あまり縁の無い方法だったのですが、Webで調べてみると
円周率を求める例があったので試してみたり。辺の長さが1.0の正方形
の中に内接する円を描いた時の、
円の面積と正方形の面積の比を式を変形して求めるというもの。
この時、正方形内にランダムに点を打ち、その点が円の内側にも入る割合
を 円の面積:正方形の面積 に当てはめます。生成される乱数に
片寄りが無ければ、十分な数の点を打つ事で面積比が徐々に正確に
なっていくというものです。
#define RADIUS (0.5) int main() { int j ; double pi ; long long int i,n,sum ; for( j=0 ; j<10 ; j++ ){ n=pow(10,j) ; sum=0 ; for( i=0 ; i<n ; i++ ){ double x,y ; x=genrand_real1()-RADIUS ; y=genrand_real1()-RADIUS ; if( sqrt(x*x+y*y)<=RADIUS ){ sum++ ; } } pi=(double)sum/(double)n / (RADIUS*RADIUS) ; printf("sample=10**%d : pi=%f\n",j,pi) ; } exit(0) ; }
sample=10**0 : pi=4.000000 sample=10**1 : pi=2.400000 sample=10**2 : pi=3.200000 sample=10**3 : pi=3.108000 sample=10**4 : pi=3.152000 sample=10**5 : pi=3.136840 sample=10**6 : pi=3.142000 sample=10**7 : pi=3.141650 sample=10**8 : pi=3.141623 sample=10**9 : pi=3.141667
------ 第二次大戦中、アメリカのロスアラモス国立研究所で、 コンピュータの父と呼ばれるJohn von Neumann氏らが 中性子が物質の中を動き回る様子を探るために考案した 手法が起源とされる。そのときこの手法を「モンテカルロ」 という暗号名で呼んだそうだが、これはギャンブルの国 モナコの首都モンテカルロから取ったと言われている。 ------
出張。帰着。ふぅ。
COOL GIRLをちょっと進めるつもりが思いっきりハマっていたり(汗;
出張。
出張。
出張。
出張。
昼頃起床。
クォータニオンについて少し整理する為のメモ書き。
午前中に起きてケロロ軍曹を観たら、またいつの間にか寝てたり(汗;
クォータニオンのテスト。何故か値が期待値と違うという点を
調べていたら、一つは手が滑っていたのですが、もうひとつは
書き戻しのバグが発覚したり。後者の方はHairMakerなど
で使用している外積を求める関数とかでも間違えていて、
今使っている範囲ではバグは発覚しないというものでした(^^;
具体的には以下の様な間違いです。
void Quat_MulQV( struct Quat *qa, struct Vec3D *v, struct Quat *qs ) { qs->n =-(qa->v.x * v->x) - (qa->v.y * v->y) - (qa->v.z * v->z) ; qs->v.x= (qa->n * v->x) + (qa->v.y * v->z) - (qa->v.z * v->y) ; qs->v.y= (qa->n * v->y) + (qa->v.z * v->x) - (qa->v.x * v->z) ; qs->v.z= (qa->n * v->z) + (qa->v.x * v->y) - (qa->v.y * v->x) ; }
出張。帰着。ふぅ。
クォータニオン仕込みの続き。座標変換をするのに必要な分を全て
入れて、printfでもって数値表示でデバッグ。でも、何か変な予感。
「MATRIX REVOLUTIONS」の特典ディスクを観たり。
超高精度なモーションキャプチャーだとか実写との合成部分だとか、
どれも大掛かりなものばかりでスゲーと思ったり。個人的には
APUという人が乗って操作する二足歩行の重機みたいなメカが出てくる
のですが、動きが全くスムーズでない、本当に重機のような動きなの
にも関わらず、乗ってる人の揺れ方とバッチリ同期していて、
どうやって動きを付けているのだろうと思ってました。
実際にはコックピットに相当する部分は実写で、体感ゲームの様な
シミュレータ筐体の動きと連動させる事であのような絵になって
いるという感じでした。
所で、前作「Reloaded」の時にもそうでしたが、多くのシーンについて、
実写の動きを想定したCGのプリビューシミュレーションが行なわれている様です。
実際の所ここまでやった方が効率が良いのかどうかは判りませんが、
プリビューレベルでも偉く細かい所まで描かれている所に
なんかスゲーと思ったりしました。
そういや、映画公開前は、最後の決闘シーンに70億円かかったというのが
話題になってたと思います。どこからを、その部分と指すのかは不明ですが、
TANEがそこだと思っている部分には、あまり金がかかっていない様に
思えたのですが、実際のところどうなのでしょう。
出張。
日付け越え前に帰着。
ちょっと気分を変えてクォータニオンを使った姿勢制御の実験プログラム
を書いてみる事にしました。でも、時間が無さ過ぎて仕込みをちょっと
して終了。むぅ。
そんな感じで明日は出張です。
出張。帰着。ふぅ。
出張中に
以前
買ったまま積読状態となっていた「ゲーム開発のための物理シミュレーション入門」
をじっくり読んでみたり。と言っても、物理シミュの所ではなくて、
四元数(クォータニオン)についての部分を読んでみました。
これもまた ほぼ積読状態となっている「GAME PROGRAMMING Gems」
で 初めてクォータニオンなるものを知り、回転を表現するのに
クォータニオンを用いると、色々と都合が良い事が書かれているの
ですが、Gemsの方では数学的にあまりにも簡潔(エレガント)に書かれすぎていて、
私の脳味噌では概念自体がイメージできず理解のかなり外という感じでした。
「物理シミュ入門」の方では、もう少し詳しい事が書かれているのですが、
それでも理解の外という感じだったりします(^^;。くじけそうになりながらも、
巻末付録のクォータニオンの演算ライブラリのソースリストを眺めながら
説明を読むと、なんとなく雰囲気を掴んだような気がしたという感じ
になりました(気のせいかも知れませんが(^^;)。
以下、クォータニオンの勝手なイメージ。
出張。
昼頃起床。
POV読みいじり。先日の回転行列の件はこれであっていそうな感じ
なので良しとしてみたり。一応、共有頂点が割れる事は無くなったので、
これで様子を少しみてみたり。また、POVレンダリングに渡すパスが
無かったので、編集後データをPOV形式に再出力できる様にしてみたり。
まだ、曲げについては何の工夫もしていないので(てゆーか、その工夫をするのが
本題なのに、その仕込みに思いっきりてこずっていた訳なのですが(^^;)、
鋭角曲げの方は二の腕にめり込むような
形で曲がっています。鈍角曲げの方は、poviewのOpenGL表示で見ると
意外といけてそうに見えなくもないのですが、実際にPOVでレンダリング
してみると、なんか継ぎ目が気になるという感じになっています。
と、書いてて気づいたのですが、継ぎ目となる異なるテクスチャ属性が
共有している頂点について、変形後に頂点法線の再計算をしていないのに
気づいたので、そこんところを再計算しなおせばもう少し継ぎ目が消える
かも?
んーー、ウソかも。伸ばす方は法線の再計算で継ぎ目が消えそうですが、
縮める方は裏返しになったりめり込んだり、変な形になっているので、
法線の再計算をすると余計に酷くなりそうな予感。
行列つながりで「MATRIX REVOLUTIONS」を鑑賞(<つながってねーよ)。
んー、まぁ、あんま考えて観なくて良かったので良いかも。
ただ、最後は平和的解決だったのかどうかはビミョーな感じ。
色々総合すると、あの世界の中では、現実世界で暮らすよりも、
マトリックスの中の方が脳が解釈する暮らしとしては安定していると
いう予感がしなくもないなぁ などと思ったりするのは年のせいですか?(^^;
全然関係無い話。以前、洋画DVDは「英語音声+日本語字幕」で観ていた
のですが、最近はいきなり日本語吹き替えで観る様になりました。
この時、「日本語吹き替え+日本語字幕」という組合わせで観ると、
これが恐ろしく観るのに疲れるというのを発見しました。
言葉と字幕って意味は同じですが、字幕はやっぱり文字なので、
言いまわしも文章なのです。これと言いまわし(字面)の違うセリフとが
目と耳に同時に入ってくると、 二人の人から同じ内容の事を同時に
話しかけられているような感じになってしまい、結果 それぞれの
内容を順に解釈しようとしてしまうので、次第に追いつけなくなるというのが、
その原因のような予感がします。これが「英語音声+日本語字幕」だと、
TANEの場合、英語はBGMと同様で脳が言語として解釈しないので、
字幕と映像を交互に見るのに疲れるという感じみたい。
えーと、英会話できませんという内容の話でした(^^;
そんな感じで明日から出張です。
昼過ぎ起床。
移動と回転の行列を掛けていけばそういう位置と姿勢に
なるのかと思っていたら、なんかそういう感じではうまく行かず。
しばらくいじり倒し、やっとこさ期待通りになってみたり。
問題は「何故これでうまくいくのか よく判らない」という所なの
ですが(激汗;;;;
んーと、ポイントは行列はあくまでローカル座標系で見た時
の座標変換器であるという所でしょうか。例えば、原点からP(√2,0,0)という
方向ベクトルを、X軸を90°回してY軸を45°回すという操作を行なった時、
2度目のY軸はグローバル座標軸のY軸で回すとP(1,0,1)という方向を
向きますが、ローカル座標系のY軸で回すとP(1,1,0)という感じに
なると思います。従って、親座標系でもって回転させたい場合は、
子座標から見た時の親座標系のX,Y,Z軸のそれぞれの方向を求めて、
その座標軸でもって親オブジェクトの回転角度を子オブジェクトに
反映しなくてはならないという事です。
それにしても、2Dの場合だと回転軸はZ軸のみなので、回転の
順序など気にする所では無いのですが、3Dだとその順序が違うと
結果が全く違うというのが大変です。特に、親子関係を持ったツリー構造
だと、子から回すか親から回すかで状況が変わったりします。
作図も容易ではありませんので、表現方法なども含めると式で理解するのが
一番良いのかも。でも、行列の掛け算なんかは私には殆どイメージ不能の
世界(一応証明はできましたが(^^;)なので ニンともカンとも。
アップルシードの映画公開前特番を観て寝た。
出張。帰着。ふぅ。
出張中に行列について調べてみた所、行列の掛け算を行なうと、
複数の行列を合成できるという事を、はずかしながら今頃
知ってみたり(^^;
今まで、行列と言えば見た目を見やすくするために
使っているぐらいにしか思っていませんでした。例えば、
X軸を回す回転行列とか、Y軸を回す回転行列とか、別々の説明
をするのに書く為にといった感じです。所が、X軸を回す行列RotXと
Y軸を回す行列RotYを掛けると X軸を回してY軸を回す行列RotXY
が生成できるという事なのです!くわっ!(<ぉぃ;)全頂点に
対してX軸を回す行列を通して、Y軸を回す行列を通してとか
やってると三軸分行列掛け算を行なわなくてはならないと思っていた事が、
一発で行なえるというのですから使わない手はありません。
そんな感じで行列演算を仕込んで動かしてみたり。イイ感じに
回転してみたり。でも、やっぱ何かがおかしくて思惑と違って
いたり。考え直しが必要なのですが、ごちゃごちゃになって
脳ミソは回転せず。むぅ。
出張。