トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

独り言日記(2005/12)

独り言日記

MML(2005/12/31)

2chでたまたま見かけた「TSS Clipboard Player」。

http://www.yomogi.sakura.ne.jp/~si/SolidImage/tpda2.shtml

ファミコンとかの懐かしのPSG(矩形波・三角波・ホワイトノイズなど)を使った演奏を行うことができます。最大26chという(昔から見ると)夢のような仕様。これが面白いのは、クリップボードにコピーしたテキストをそのまま演奏ができる、ということ。つまり、[Ctrl] + [C]で取り込んだテキストをダイレクトに解釈して鳴らしています。

これがまたまた面白い。MMLはPC98時代に遊んでたなぁ(雑誌に載ってたのを打ち込んでいただけですが)。早速 頭にこびりついている昔のファミコンの某曲をMMLで必死で書いているのですが、・・・い、いかん、耳コピーでの音取りがあまりにもへたっぴだ、ワタシ。途中で記憶の中のメロディーがおかしくなってしまうので、なかなか時間がかかってます(^_^;;。

2chの以下の板なんて、すごい方達がいっぱいいますね。ほんと、えらいレベルの高さだ・・。

http://game10.2ch.net/test/read.cgi/gamestg/1134269690/ 
http://pc8.2ch.net/test/read.cgi/dtm/1135002098/

MMLの場合はMIDIと違ってプレーンなテキストですので、「ああ、こうやるのか」とか他の方のを見ると非常に参考になります。

#WAV 0,<0,16,32,48,64,80,96,112,112,96,80,64,48,32,16,0, 
-16,-32,-48,-64,-80,-96,-112,-128,-128,-112,-96,-80,-64,-48,-32,-16>; 
%4@0s0 o3cdefgab<cdefgab<cdefgab<cdefgab<c

で三角波なのは、ナイスです。なるほど、カクカクの波形ですねぇ。こうやって使うのか・・。

Shade8プラグインSDKでのdialog_interface上のOpenGL(2005/12/29)

とりあえずですが、Shade8のWin版のdialog_interfaceにてOpenGL描画を行うサンプルプラグインをアップしてみました。

ダウンロード:DialogOpenGL_shade8_plugin_20051229.zip(237)

プラグインメニューより、「OpenGL dialog」を選択します。上記の画面が出て、ティーポットがクルクル回転してます。この描画領域をマウスドラッグすると、ティーポットを自分で回転させることができます。右上の「timer start」ボタンでタイマーの開始(自動回転)、「timer stop」でタイマーを止めてます。

しかし、Shade8プラグインSDKのイベント処理部分、まじめに使おうと思うとちょっと機能追加したい部分が出てきますね。現在の状態では、OpenGLを絡めるとなるといろいろ厳しい点が出てきます。その部分も拡張してます。ソース・使い方などはまた後々公開します(Mac版も)。

  • マウスドラッグ処理はもっと簡潔にできるようにするべき
  • プラグインSDKの「window_interface::key_down」で取得できるキーコードは「ネイティブなキーコード」ということで、これだとプラグインを作る側から見てもOS依存してしまいます。
  • タイマーイベントはプラグインSDKにはありません。
  • OpenGL描画用のイベントがもっと簡単に記述できないか(というか、フローティングウィンドウでもモーダルダイアログでもOpenGL描画は実現できませんでした・・・)
  • マウスプッシュ状態がゲットできないか

などなど、改善できそうな点は結構出ました。まだサンプルソースをまとめきってないのですが、私が使いやすいと思う形で実装してみることにします。

帰省中(2005/12/27)

大阪はえらい寒いですね、場所によって異なるみたいですが日本海側ではとっくに雪が降っていたみたいです。新幹線にて、名古屋を越えたあたりで家の高さ半分くらいが雪で埋まっている光景を見ました。生でそんな光景をみたのは初めてです(^_^;;。

とりあえず時間ができたので、Shadeダイアログ上のOpenGL描画を完成させますかねぇ(ShadeとMayaはとりあえず両立です)。

しかし、window_interfaceにて親クラスをゲットできないのがつらい・・・。window_interfaceを入れ子にした場合、Windowsではdialog_interface上でHWNDが階層化されます。OpenGLの描画領域を作る場合は、対象となるHWND(ダイアログ自身をあらわすHWND)をなんらかの手段でゲットし、この上に新しいOpenGL用のHWNDを作ります。このとき一番手前のHWND(対象となるwindow_interfaceの元となるHWND)を得ないといけません。あ、ヘッダを調べてみたところ、window_interfaceでは「get_native_window」でHWNDを取得できそうですね。これだと、指定のwindow_interface上にOpenGL領域をさくっと実装できるかな?(実はもっと複雑なことしてましたが、もっとすっきりできそう)

後々調査した結果、「get_native_window」はHWNDのポインタでない?

HWND thWnd = *(HWND *)(w->get_native_window());

みたいにしても、HWNDとは関係ない値が取得されました。・・・姑息にHWNDをたどるか・・・・。

Mayaのポリゴンモデリング練習中(2005/12/25)

机とかツボとかの簡単なものを飛ばして、いきなりポリゴン顔の製作中。

Mayaでの作法は分からないので、私が唯一使える3Dアトリエの作法でできるかどうか試してました。まだまだ途中なんですが、手ごたえとしては「難なく可能」な感じがします。私はSoft Modification(Shadeで言うマグネット)をよく使うのですが、これがアクセスしやすい位置にデフォルトで存在する、というのが気に入ってます(移動・回転・拡大縮小の下にSoft Modificationアイコンがあります)。

私は、NURBSが一般的になろうともマグネット機能は欠かせない、と思ってるのですが一般ではどうでしょうね?(昔、とあるデザイナさんはいらない、と突っぱねてましたが(^_^;;)Shadeでもプラグインじゃなくて、標準機能でアクセスしやすい位置にマグネットを設けたほうがいいんじゃないか、と前から思ってます。

モデリングは私としては「買い」です(NURBSはまだ掘ってません)。ただ、マテリアル設定がちょっと回りくどいかな、という気が。光源設定と影有効化もShadeから比べると少しくどい印象を受けました。まぁ、住めば都なんでしばらくPLEでいろいろ遊びながら覚えていこうと思ってます。もう購入路線前提です(笑)。いやはや、楽しいのなんの。アニメーションが目標にあるので、これが使いやすいか調査するまではまだまだ時間がかかりそうです。

惑星大怪獣ネガドン(2005/12/25)

ひさびさに秋葉に行ってきました。ヨドバシ初めて行きましたけど、えらい広いですね。とても回りきれないのでまた探索にいかねば。で、別店で「惑星大怪獣ネガドン」というDVD作品がありましたので買ってきました。

http://www.h2.dion.ne.jp/~magara/project.html

昭和の空気感あふれる特撮ものです(ウルトラマンやゴジラの影響を受けまくっている、80年代全盛期の感じ)。これ、すべて個人が製作した3DCG作品で、MAXを使っているようです。バイタリティーあふれる方もいるもんだなぁ。空気感がよく出てます。また、メイキングが非常に参考になりました。フィルターの作り方も解説されてました。こんな世界観は好きだなぁ。

そういや、新海さんのはまだ見てないや。ネガドンも、同じくコミック・ウェーブさんの協力の元で制作されているようで。

MEL(2005/12/24)

Mayaのスクリプト言語としてMELというのがあります。これを使うことで、簡単にMaya上で操作系の便利ツールを作ったり独自のダイアログを出したり、が可能になります。

以下は、球をランダムに出してみたもの。

MELのソースは以下のようになります。変数指定がPHPみたいですね。

string $name;
float $dat;
float $x, $y, $z;
int $i;

for($i = 0; $i < 100; $i++) {
  $rad = rand(2.0);
  $x = rand(10) - 5.0;
  $y = rand(10) - 5.0;
  $z = rand(10) - 5.0;
  $name = "mySphere" + $i;
  sphere -radius $rad -name $name -pivot $x $y $z;
}

「rand」で第一引数で指定した値までのランダムな浮動小数点を求めて、「sphere」で半径、名前、座標位置を指定して球を生成しています。上記ですと、100個の球をランダムな半径・位置で配置します。

で、びっくりしたんですがPLEでこれが使用できます。あらゆることをMELでいじれますので、いろいろ幅を広げれそうな予感(逆に、MELが使えないとMayaは操作しにくいと聞いたこともありますが)。PLEのヘルプにMELのリファレンスがありますので、すぐにいじることができました。いやはや簡単です。案外プログラマ向けの3Dツールかもしれない・・。

ただ、当たり前ですがオブジェクトの名称に日本語は使えないですね。製品版でも英語onlyみたいなので(ドキュメントは日本語ですが)、ちと残念。

まだまだ探り探りなんですが、ぼやっとMayaの性格がつかめてきた感じです(といっても、氷山の一角・・・奥が深い・・・)。

Maya PLE 7.0(2005/12/24)

FBX SDK触ってからというもの、ちょっとMayaにほれ込んでましてMaya PLEで遊んでます。ポリゴンモデリングの方法が分からなかったので、「3DビギナーのためのMaya」という本を買って勉強中。複数ポリゴンの結合って、他オブジェクト同士の場合はヒストリを無効にしてからポリゴンを複数選択して[polygons]-[combine]なんですね、気づかなかった・・・・(そうしないと変な行列情報が残ってしまう)。

仕事場ではすでにMayaがあるのですが、PLEをまともに使いこなせるようになってから趣味を広げるために個人的に買おうかなと思ってます。MAXは私にはしっくりこなかったのですが、Mayaはなぜか使いやすいです。デザイナの方に聞いたところ、たしかにMayaは使いやすい(けど高い)、ということでした。

また、PLEのヘルプ(日本語のものです)は結構分かりやすくていいですね。PLEではエクスポートで別ツールでいじれそうな形式出力はさすがになかったのですが、インポートではFBXが使えました。

Shade8プラグインSDKのdialog_interfaceでのOpenGL描画(2005/12/19)

ちょっと骨がありそうだったので実装してみました。

「opengl_window_class」というのを新たにでっち上げて、Shadeのイベントを乗っ取っての実装です。普通のやり方では、dialog_interfaceにてOpenGL描画はできません。実は実装にあたって、スレッドを使わないといけませんでした。これでマウス処理・タイマー(によるOpenGLのアニメーションなど)・キーイベント、再描画はすべて自前で処理できます。OSXではどうかな、まだ未調査ですができそうな気もします。

きっちりまとめてからソース公開しますね。

SDK(2005/12/14)

仕事で使う予定の某SDKを触ってみる(前述のFBXじゃないよ)。結構楽しい、、、というか情報公開してむずむずするのですが、仕事なんで表に出せません、、、、むぅ。時が来たらまたTipsなどを披露しますね。ちょっと前までは 自分で何もかも作らなければ気がすまなかったのですが、最近はSDKで開発効率がアップした日にゃ「頼っちゃおうかな」となる気持ちのほうが強いです。小さいこと(最適化とかマルチプラットフォームでの調整とか)ばっかりしていて結局アプリが完成しなかった、ということが多々あるので、そろそろモノ作りの大きな枠に乗らないといけないかなぁと少し焦りがあります。これでもまだ「ツール」の域は出ないので・・・と更なる葛藤があるわけですが(苦笑)。

以前書いたFBXなんですが、フォーマットとして完成度が高いですね。これのサンプルとしてFBXビュワーがあります。

もちろんソースつきなので、時間があればシーン階層の解析ツールでも作りたいところですが、あいにく時間がありません。このSDKは触っていてワクワクします。自分のツールのインポータ・エクスポータでぜひ採用したいフォーマットだなぁ。

ついでに、妄想でですが 未だにGIレンダラ作成はあきらめきれてません(^_^;;。アイデアだけなんですが、書いておきます(このあたりは仕事ではやってなくて完全な趣味です。なんで情報公開OK)。

空間分割の前処理を極力減らすレンダラって書けないでしょうか?たとえば、HUGで空間を分割する場合はゆるく(80x80x80くらい)シーンを分割します。そして、トラバースに突入するわけですが、このときに重み付けをしつつシーンをたどります。で、よく通過するボクセルはさらに再分割して「階層グリッド」を作っていきます。これだと、最終的にレイが飛ばないボクセルは空間分割含めて無視することができるかもしれません。しかし、CPUキャッシュから見ると無駄が多いかな。

後、やはりレイの方向による局所的な状態はもったいないなぁと思いますので「Ray Classification」で方向によるシーン分割を行います。これもキャッシュを絡めて「トラバース処理を遅らせる」が何か効かないかなぁと。後、GIでの拡散反射は1点を中心に半球上をランダムに飛ばすのですが、もしランダムでないとすると、何かしらの最適化が効かないだろうか、と妄想してます。

ほか実験してみたいことはあるのですが、たぶん時間的に厳しいと思われますので棚に上げつつ、今の仕事を進めることにします(^_^;;。う〜ん、時間と気力がほしい・・・。

OBB - 傾きのあるバウンディングボックス(2005/12/13)

ひさびさに3Dの技術的な話題を。よくレンダラでは「AABB(Axis Aligned Bounding Box)」でXYZ軸に平行な軸で構成される直方体でオブジェクトを囲ったりします。これは交差判定の前に簡単な形状(ここでは直方体)で刈るためです。しかし、傾いた形状(XYZ軸に平行な直方体内には収まりにくい形状)では無駄が出ますので、その傾きも考慮したバウンディングボックスを「OBB(Oriented Bounding Box)」と言います。

レンダラだけでなく衝突判定や物理シミュレーションでも応用できそうですね。ゲームでは特に使えそうです。

DirectXのサンプルでおなじみのトラを囲ってみました。足元で平行というわけではなく、しっぽも含んで囲まれているのが分かります。

OBBでは、傾き(行列で算出される)のほか、3つの辺の長さと中心位置をパラメータとして持ちます。

これを再帰的に8個(2の3乗)のボックスで囲みます。普通のAABBだと無駄があるのですが、これだとうまいこと隙間を避けてくれてます。

32個(2の5乗)のボックスで囲むと、もうトラが分かるくらいの形状で囲まれているのが分かります。この分割は、再帰的に行います。BSPみたいにボックス(しかし、斜め向きもあり)の空間を2分割して、それからOBBを求める、を繰り返します。

どちらかというと、レンダラよりも衝突判定で刈るために使えそうですね。上記だと、たった32個のボックスとの当たり判定だけでも結構な精度を出せそうですので、ゲームだとこのOBB情報をアニメーション時に自動で算出して(それを前処理後に保持しておいて)当たり判定に使うといいかもしれません。

で、肝心のソースですがこちらの方のサイトが大変参考になります(というか参考にしました(^_^;;)。

http://www.nomuraz.com/denpa/

これってなんとなくですが、ポリゴンリダクションに似てるなぁと思います(ゲームでの当たり判定だとリダクションした形状を使うほうが多いのかな)。

FBX SDK(2005/12/10)

ちょっと頼まれごとがあったのでfbxについて調べていました。fbxとはAliasが公開している3Dのシーンフォーマットです。光源・カメラ・テクスチャ・ボーンなど、必要な情報を1つのファイルにまとめることができます。

これをいじるSDKとして「FBX SDK」というのがあります。

http://www.alias.co.jp/products-services/fbx/

これで遊んでいたのですが、すごい出来がいいです。「SDKはこうあるべき」というのが伝わってきます。こうしたいという場合に予想通りの関数が存在する、ヘッダにコメントがしっかり書いていて分かりやすい、サンプルソースが的を得た「キタコレ!」な情報が書いている、などなど。

私も見習わないといけないなぁ。ひさびさに分かりやすいSDKに出会いました(ということは、Mayaプラグインは結構作りやすいのかな)。ShadeのプラグインSDKもこれくらいすっきりすればいいのですが(^_^;;。(STLはうまいこと使わないと分かりにくくなる元ですよ〜、と言いたい(苦笑))

資料あさり(2005/12/04)

仕事で使う資料を探しにブックオフで探索。なかなかいいのがない・・・が、ある棚に使えそうな雑誌のバックナンバーがあったので購入。こういうときは古本屋は便利です。

と、まったくコンピュータと関係ない分野なのですが資料を探していました。私自身はコンピュータのプログラムの仕事しかしないので、ほかの世界は真新しい反面どう取っ掛かりをつかめばいいのかが難しいです。コンピュータといっても、しょせんは道具ですので「何かの業務に使うシステムを作る」となると、二次的にその業務の知識を少しでも理解していないといけません。と考えると特殊な分野だなぁと。

コンピュータ関連の書籍は、本屋でも古本屋でもたくさんあったのですが、私がほしかった分野のものは1つの棚でも少ししかありませんでした。書籍だけでは判断できませんが、コンピュータの知識は一般にも浸透していて意外と手をつけやすいものなのかもしれません(もちろん、コンピュータでもさらに細分化されているので、深くなると情報が極端に少なくなるわけですが)。

ネット検索ではもっと情報量が多いのですが、まとまっているものは少ないですね。手順・ノウハウを文字で表現できないような情報は、さすがに本のほうが情報量が多いというか(探し方がまずいだけかもしれませんが(^_^;;)。後、ノウハウが商売に結びついているものは さすがに本でもネットでも公開できるものではないので、その場合は情報がないかな。

掲示板の更新が完了しました(2005/12/03)

ft-lab.ne.jpの掲示板の更新作業が完了しました。

http://ft-lab.ne.jp/fl_bbs/bbs

何かありましたらご自由にご利用くださいませ。

唐突に関係ない話ですが、テレビ東京の深夜番組の「牙狼(GARO)」という特撮ものを毎週見ています。たまたまテレビつけたときに見つけたのですが(3話目くらいから見続けてます)、このアクションシーンがかっこいい!!って、特撮はゴレンジャーくらいから見たことがなかった気がするのですが、最近のものってレベルがすごいですね(ほかのもこんなクオリティーなのかな?)。

公式サイトは以下です。

http://www.tv-tokyo.co.jp/garo/

ただ、生身の人間のアクションは目を見張るものがある反面、CGがちょっと・・・・(いや、かっこいいことには変わりないのですが)。動きがちと不自然な部分があるかなと。

Future's Laboratory 技術格納庫 2004-2013 Yutaka Yoshisaka.