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

独り言日記(2009/09)

独り言日記

XCodeビルドでの怪しい結果になった部分(2009/09/30)

MacのXCodeにてプログラムしていて、袋小路に陥った箇所を覚え書き。

#define KEY_SPACE  0x01
#define KEY_SHIFT  0x02

int foo(const int keyFlag)
{
  int mode;
 
  mode = 0;
  if(keyFlag & KEY_SPACE) {
     mode = 1;
     if(keyFlag & KEY_SHIFT) {
        mode = 2;
     }
  }
  return mode;
}

としたときに「foo(KEY_SPACE);」を呼ぶと戻り値は何が返ってくるでしょうか?結果は「1」のはずですね、ところが呼んだタイミングがいけなかったのか、「0」が返ってくる結果に。ソースの流れを変えてもコンパイラの最適化を無効にしても変わらず。

結局、

int foo(const int keyFlag)
{
  int mode;
 
  mode = 0;
  if(keyFlag & KEY_SPACE) {
     mode = 1;
     if(keyFlag & KEY_SHIFT) {
        mode = 2;
     }
  }

 // 再度判定
 if(keyFlag & KEY_SPACE) {
     mode = 2;
 }

  return mode;
}

とすることで正しい結果が得られました。もちろん、Windowsでは1つめのでOKでしたけど、、、この挙動は違和感を感じる、、、。時間があればバイナリからの逆アセンブルで追いかけた方がよさそうですが、たまに詰め物しないと動作不安定とか上記のようなコードで通るはずのルートを通らないとか、起こりえるんだよなぁ。ごくごくまれに、コンパイラが正しくない結果を出す、ってこともあるということで。

64ビットWin版(2009/09/29)

面白いからネタにしてしまおう、ということでいまだShade10プラグインSDKで64ビットビルドしたプラグインが64ビットマシンで動かない(^_^;;。ビルドはできていたのですがShadeが認識してくんない。

過去のmqoImporterで見てみると、動作していたのはShade9プラグインSDKでビルドした64ビットプラグインでした。ということは動いていたのはほんの一瞬のバージョンだったわけか、、、。すまんです m(_ _)m、まったく気付いてなかったよ。

で、Shade9プラグインSDKでビルドできるように改造したら64ビットで動いた。なんじゃそりゃ(^_^;;。なんだか負けた気がするので、意地でもShade10プラグインSDKで通すつもりです。

ですが、認識できないはずはないです。他のShade10プラグインSDKにてビルドしたやつは64ビットマシンにて動いてますからねぇ。何かコンパイラオプションで抜けているのかもしれません。dllの中身をみたら、たしかに64ビットコードにはなってるんだけど、さてはて。

簡単に対応できるや、と思ったら甘かったです(汗)。SDKのサンプルでも解析してみるかなぁ。

mqoImporter/Exporter for Shade10の64ビットWin版(2009/09/28)

「mqoImporter/Exporter for Shade10」の64ビットWin版がどうもプラグインとして認識していない状態でした。申し訳ないです。

チェック中ですが、まだ原因がつかめず、、、。以前Importerだけのときはきっちり動いていたはずなのですが、と思ってImporterだけの構成にしても変わらず。

何かビルドオプションで指定ミスがあるのかぁ、64ビットWin版はしばらくお待ちくださいませ。

ドキュメント作成(2009/09/28)

仕事で作ってたプロジェクトのドキュメントをようやくまとめ上げました。時間かかった、、、、。結構燃えたよ、うん。

おかげでアンビエントオクルージョンのプログラムで遊べなかった、残念。

基本的にドキュメント大好きなので、一日に数十ページ(実際書いたのはWeb対応なので、ページ数は判断できませんが)をまとめて書いてしまうのですが、これができない人が結構多いようです。

どこかの誰かがおっしゃってたのですが、ブログって意外と文章力の強化(というか修行)には使えると思ってます。万人に向けての文章を書くわけですので、他人に分からなければ意味がないし分かりやすく書く必要がありますので(といいつつ、誰も見てないかもしれないけども(^_^;;)。

それはそのまま仕事でのドキュメントやマニュアルにもつながりますからねぇ。

というのを(仕事含め)いろんな人に言ってるつもりなんですが、、、偏見じゃないですが、文章を書く習慣のない人はメールもドキュメントもヘタかと思う、、、、。文章を書かない人に伝えても結局、三日坊主か、途中でやめてしまうんよね。

書くネタがないんじゃない、そもそも習慣付けてないだけだ、ということで誰となくですが、日記はつけていきましょう(^_^;;。

ちなみに、私が若き新入社員だった大阪時代、すでにこのような日記と技術ネタはネットに駄文で書いたりしてたのですが、就活でも大いに役に立ちましたよ(私の場合は、なんかいろいろ免除してくれた、研修とか)。なんせ、考えてることや技術とか最大限にアピールできますからね。ということで、日記はつけていきましょう(^_^;;。

400まんぼん(2009/09/25)

ドラクエ9が400万本出荷されたらしい、というのがWi-Fi配信で出てきてました。それを携帯カメラで撮ってみました。

リアルな情報をゲーム内で知ることができるってのはなんか新鮮です。しかし、400万ってどんだけ売れてんだか。

今は寝る前にたまにちょこっとで、週一回のペースの配信クエストを惰性で遊んでるくらいかなぁ。でも、珍しく自分のゲームプレイとしては長続きしてます。

セカイカメラ(2009/09/24)

iPhoneで動作するセカイカメラの配布が開始されたようです。

http://journal.mycom.co.jp/news/2009/09/24/006/index.html

iPod touchはカメラ機能がないですので残念ながらiPhoneのみ。

「拡張現実(AR)機能を備える」とありますが、ちょっとAR分野を掘った方なら分かるかと思いますがまだまだ「もどき」かと思っています。

ですが、現実と仮想空間の合成は3D分野でも残り少ない面白そうな牙城、あと少しで「東のエデン」(アニメ見たことあるなら分かるはず、今度劇場版が公開されるよ)は実用範囲に入るでしょうね。電脳コイルはまだ先でしょうけど、、、。

次世代のiPod touchはカメラ機能を搭載するという話題も出てましたので、私はそれ待ちかなぁ。まだ、iPhone購入には踏ん切りがついてないです。実は開発キットでかなり遊びたいのですが、カメラ機能をいじりたいんだよなぁ。

シルバーウィーク終わり(2009/09/24)

なんというか、結局散歩だけして後は仕事、それ以外はちょっと好き勝手にプログラム、でシルバーウィークが終わってしまった、、、。

休みの日が休みでなくなる体制、直さないといけないですね。健康の面でもだけど休まないのはよくはないかと。とりあえずもう少しの辛抱です。ちなみにこの日記に書いている行いは息抜きの趣味なんで問題なしです、というかこんな息抜きを入れないとやってられない(汗)。

で、一部で話題になっている巨大アヒルちゃん(大阪)が結構癒しになって、ずっとその2ちゃんねるのスレッド追っかけてました(^_^;;。以下はその動画。

http://www.youtube.com/watch?v=yMtYXKaF394

大阪に帰れたら見に行きたかったなぁ。このアヒルちゃん、水都大阪2009の公式出し物じゃないそうで、ほとんど宣伝がなかったようですね。

水都大阪2009

http://www.suito-osaka2009.jp/

Rubber Duck Project 2009

http://www.namura.cc/ahiru/ 

しかし、大阪市の管理外とはいえ、もうちょっとニュースや市で取り上げてあげたらいいのに、と思ったりします。経済効果は高いと思うぞ、私も時期が会えば新幹線のチケット買って見に行って近くの店で食事(ついでに実家に帰る)、なんてことをしたい衝動にかられましたわ。

カメラ好きの方が被写体にしてたってのもスレッドには書いてましたし。現にたくさんの写真がアップされており、私はそれを二次的に見て癒されております(苦笑)。私含め、それくらい魅力あるもんに見えるのでしょうね。

アートのことはよく分からないけど、何かしら惹かれるものがある、ってのは吸引力がすごいすなぁ。ひさびさに、スレッドが更新されてないかひっきりなしに確認する、ってのをやってしまいました(汗)。

mqoImporter/Exporter Ver 1.2.1 for Shade10(2009/09/22)

メタセコイアのmqo形式をShadeにインポート、またはShadeからエクスポートするプラグインをバージョンアップしました。

詳しくは以下のページをご参照くださいませ。

http://ft-lab.ne.jp/cgi-bin/wiki.cgi?page=mqoImporter_shade

先日からの対応点はエクスポート時にクラッシュすることのある問題の修正です。

続・頂点ごとのAO(2009/09/21)

頂点ごとのAOにて、もっとサンプリング数を増やしてみました。

あ、ちなみにAOって訳していますが これは「アンビエント・オクルージョン」といって、とある頂点位置が他の物体・面に隠蔽されるかを計算する概念のことを表しています。フェイクではよく使う方法です。

メタセコで回転させたのをムービーにしてみました。

上の場合は、1つの頂点に対して半球上に5000回ランダムに「他の面にぶつかる・ぶつからない」を判定して

影の濃さ = ぶつからない回数 / 全体のサンプリング数

を単純に当てはめてます。

静止画では以下な感じ。これくらいだと使えそうかな。

でも、前処理計算で結構待つのがいかんです(今で5分ほど(^_^;;)。ここで、フォトンで高速化しましょうというのが課題であります。

めざせ、ライドウの銀座の街。なんですが、ライドウでの表現はテクスチャへの焼付け(ベイク)でもありますわな。AOはゲームにはたまに採用されているアルゴリズムであったりして、なんちゃってGIとしてはよく使われますよね。PRTはこれの発展なんですがまだ勉強不足で追いついてないです。

とりあえずは静止画のためのAOから行ってみようということで。

そうそう、昨日書いていた「メタセコにて頂点カラーを有効にして、かつ、マテリアルの色を生かす」方法なんですが、メタセコのmiznoさんのブログを見てみると、ピクセルシェーダー対応を最近実装されているようで、これですと頂点カラーとマテリアル色を両立させることができそうではあります。この仕組みに乗るほうがよさげですね。

mqoImporter/Exporter Ver 1.2.0 for Shade10(2009/09/21)

メタセコイアのmqo形式をShadeにインポート、またはShadeからエクスポートするプラグインをバージョンアップしました。

詳しくは以下のページをご参照くださいませ。

http://ft-lab.ne.jp/cgi-bin/wiki.cgi?page=mqoImporter_shade

なお、下で実験しているAOは中途半端すぎるので今は除外しています。

今まで「Shade9」でも対応していると書いていたのですが(特にShade10で追加された機能は利用してはいないですけど)動くかどうか分からないので、対応からはずしました。

頂点ごとのAO(2009/09/21)

を実験的にmqo出力オプションとして実装してみたのですが、、、う〜ん、時間がかかる割にはいまいち、、、。

これは地面や壁は細かい面分割をしていてテクスチャへの焼付けじゃないです。補正処理を入れてもおそらく芳しくないでしょうから、フォトン使うかなぁ。

ところで、メタセコにて頂点カラーを有効にして、かつ、マテリアルの色を生かすにはどうするのだろう、、、。

mqoImporter/Exporter for Shade バージョンアップ準備中(2009/09/20)

連休中ですので、ShadeのmqoImporter/Exporterをいじってます。今回の対応は以下のものを予定しています。

  • インポート時にmqoにて曲面パラメータが指定されている場合に、Shadeの角の丸め(カトマル・クラーク)に対応付け
  • エクスポート時に階層構造の出力
  • エクスポート時のテクスチャは、メタセコでは拡散反射色とテクスチャが乗算合成になるため、それにあわせる
  • エクスポート時に開いた線形状を線として出力
  • エクスポート時にスムージング角度を出力(今までは固定で80.0でした)
  • エクスポート時に同一形状名、マテリアル名がかぶってしまわないように変更

ということで、エクスポート時に未対応だった部分を主にてこ入れです。

Shadeで言う「角の丸め」なんですが、SDKレベルでは「カトマル・クラーク」しか選択できませんね。これは妥協してもらうしか。後、エクスポート時には勝手に角の丸めが適用されたポリゴンとして出力されるようです。これもエクスポータプラグインでは制御不可だったのでそのまま。

上記はすでに実装は完了してまして、時間があれば、ちょっと面白い付加機能をつけようと画策中です。ということでお楽しみに〜〜。

シルバーウィーク(2009/09/19)

どうも、今回の連休はシルバーウィークというものなんだそうですが、こちらは連休中は緩やかに仕事予定。

週末は散歩に出かけてるのですが、なかなか涼しくなってきて絶好のウォーキング日和でした。東京だと適当に道を進んでいても何かしらの駅にたどりつくので迷っても大丈夫なのですが、埼玉だと駅間の距離があるのでまだ危険。なんせ、わざと迷って道行く道を進む一人遊びですので(^_^;;。ではあるのですが、とりあえず適当に歩いてみて2駅知っている駅にたどりつけました(もちろん地図も何も見ずに適当に闊歩)。そろそろ方向音痴の自分でも土地勘がついてきたかな。しかし、駅と駅の間の距離が遠い、、、。

一応、考え事をするためというのもあるのですが散歩は有意義ではあります。前にも書いたかもしれないけど、迷うってことは頭の体操にもなって(もちろんウォーキング効果もプラス要素として)いいのではないか、と個人的には考えてます。

この土地勘ってのは、次の自分の目標としている研究テーマ(というほど大それたものではないですが)に結びつく部分だったりするので、地道に一人プロジェクトとして進めていこうかと。

方向音痴を自負する自分としては、頭の中で方向を元にした地図を作ってるわけじゃなくて、知ってる風景を結び付けてるだけなんですよね。これって、いろんな場面でヒントになるんじゃないかなと思ったりしてます。絶対的なもの(ここでは地図)じゃなくて相対的なもの(ここでは記憶している風景)のゆる〜い結びつきで全体を把握するというか、ルートを判断するというか。

mqoImporter/Exporter for Shade Ver 1.1.0 64ビット版(2009/09/08)

下記の方法でビルドした64ビット版とそのプロジェクト(ソース)を添付した、mqoImporter/Exporter for Shade Ver 1.1.0をアップしました。

http://ft-lab.ne.jp/cgi-bin/wiki.cgi?page=mqoImporter_shade

Mac(XCode)での64ビットビルド方法(2009/09/08)

ShadeのmqoImporterのMac版にて、XCodeでの64ビットビルド方法が分かりましたので覚書です。なお、Macの場合はUnversalBinaryで32ビットPPC/32ビットIntel(x86)/64ビットIntel(x86)が一つのファイルで表されることになります(厳密には、1ファイルに3つのバイナリが合体した状態になってます)。

Shadeの場合は、今までどおりに「plugins」ディレクトリにxxx.shdpluginを放り込むだけです。

では、XCodeでの64ビットビルド方法です。ShadeプラグインSDKを例として書いていますが、単体の32/64ビット対応アプリでもおそらく同じような感じでいけると思います。

xpluginsをダブルクリック

プロパティのウィンドウが開きます。

「ビルド」タブのアーキテクチャの変更

アーキテクチャの表示部分をダブルクリックすると、「ビルド対象アーキテクチャ」のウィンドウが開きます。ここで64-bitをチェックしてOKボタンを押します。

この段階で「ppc64」が入りますので、これを除去します(つまり、PowerPCの64ビットは非対応にしてしまいます。これを有効にしたままではコンパイルエラーになります)。アーキテクチャの部分をシングルクリックすると、テキスト自身を編集するモードになります。ここで、ppc64を消して「i386 ppc x86_64」の3つが並ぶようにしてください。

対象ターゲットのダブルクリック

プロパティのウィンドウが開きます。

「ビルド」タブのアーキテクチャの変更

先ほどと同じです。「i386 ppc x86_64」の3つが並ぶようにしてください。

「ビルド」タブのユーザ定義の追加

ビルドタブの一番下に「ユーザ定義」というのがあります。ここに、上画像の赤で囲ったものを追加します。

これでビルドすると、ppc/intel(32ビット)/intel(64ビット)のものが同梱されたパッケージが作成されます。3つのビルドが走りますので、単体ビルドの3倍は時間がかかります。大きなアプリの場合は注意です。

関係ないけど(2009/09/06)

ニコニコ動画でとある動画を見てたら、キリ番をゲットしたらしくニワンゴからキリ番オメ、のメールきてました。なんのメールかと思ったら、こんな報告もやってるんですねー。

ちょっと前まではニコニコでランキングとVOCALOIDをいつも追いかけてたのですが、忙しくなってからはあんまりアクセスできてませんでしたわ。いまだにいろいろ進化してますねぇ、音楽のみならずモーション(MMD)とかも。

どうでもいいことですが、初音ミクのぬいぐるみが自分の中でクリーンヒットしてるので買おうかどうしようか迷ってたりします(汗)。ねんどろいどの初代版もほしかったのですが、もう販売してないんすよね。しかし、ゲームになったり、CDの売り上げランキングに滑り込んだり、ライブやったりと、すごいメディアミックス(死語?)だなぁと。今度、新しい音のデータベースでバージョンアップするみたいですね。こういう現象も今後展開が楽しみではあります。初音ミクは持ってるんだけど、ぜんぜん使えてない、、。SONARはまだ使ってますが、ゲーム曲のコピーしかしてないのでボーカルの出番が(^_^;;。

mqoImporter/Exporter for Shade Ver 1.1.0(2009/09/06)

遅くなりましたが、mqoImporter(Shade 9/10用)の最新版を以下にアップしました。Ver 1.1.0です。Win/Mac32ビット版プラグインとソースコードを同梱しています。

http://ft-lab.ne.jp/cgi-bin/wiki.cgi?page=mqoImporter_shade

変更履歴は以下のとおりです。

  • 形状読み込み時に、面が存在しない場合はポリゴンメッシュを生成しないようにした。
  • メタセコイアの辺をShadeの開いた線形状として生成するようにした。
  • 形状名にスペースがある場合の読み込みミスの修正。
  • 頂点インデックスがダブっている場合は、面をカットするようにした。
  • 暫定的にmqoエクスポート機能を追加(辺の出力、階層表現、などまだ未実装機能あり)。

64ビット版はWin/Macともにしばらくお待ちくださいませ。Macの64ビット化処理で格闘してたのですが、ビルドがうまく通らなかったためもう少し時間かけないとダメっぽいです。ちなみに、他のプラグイン(こちらのサイトでは非公開)で64ビット化は通ってますので、なんらかの手順が抜けてるのかなぁと思ってます。Win64ビット版は、Mac64ビット対応とあわせて近々アップ予定です。

後、ファイル名を変えたくなかったため「mqoImporter」ですが、ひそかにmqo形式のエクスポータ機能も実装しています。まだ未対応の機能もありますが、Shadeからメタセコに持っていって再度Shadeに戻す、なんて場合でも使用できるかもしれません。

しかし、Shadeもモデリング機能強化されてほしいですね。後、Macな方(私もMacBookがメイン)でも、IntelMacですとBootCampでWindowsが動きますので、mqo入力・出力できてもMacなんで使えねぇ、なんてことは言わずに使っていただけるとうれしいです(^_^;;。

私は詳しくは知らないですが、MacOS上でWinアプリを動かすエミュレータみたいのもあるんですっけ。

http://www.runexy.co.jp/enterprise/parallels3_mac/outline/

snow leopardはいろんな方のレポを見たりしてますが、インストールに苦労されてる方もおられますので、こちらはしばらく様子見しようかなと。アップグレード価格が安いので(3300円)お金の問題じゃなくて、今の環境で不都合があれば怖いだけではありますが、、、。

後、詳しくはかけませんが水面下ではShade + プラグインSDKは結構いじってます。開発者から見たSDKレベルでは「もう要望出す必要ないかな」ってとこまで実は充実しつつあるのですが(本体もそうなってほしいですが(^_^;;)、来年あたりからこのあたりをちょいネタで書いていければなぁと思ってます。

環境としては整っているということは、開発ができればやりたい放題ができるということ。拡張しつつ、勉強もかねて自分でもなんかムービー作品っぽいものを作ってみたいなぁと思う今日この頃ではあります。でも、データ構造(面ごとのマテリアルが貼れない、UV層が最大2階層まで、などなど)は現状なんともできないので、このあたりは今後に期待したいですねぇ。

アニメーションに関しては、現在のShadeのアニメーションをガン無視してしまえば、リグを使ったスケルトンとか意外とできてしまうんですが、これはいずれやりたいです。アニメーションに関しては、Shade自身SDKレベルでもいろいろ厳しいのでまじめに連携やろうとすれば、全書き換えが必要でしょうねぇ。

mqoImporter for Shade近々更新予定です(2009/09/04)

9月になってこちらは涼しくなってきました。夜はむしろ寒いです、ということでちょっと風邪気味。

夏に設置してもらったエアコンの電気代が気になったのですが、東京時代に比べて半分くらい節約できてました。エコ仕様機器はええなぁ。電気代、夏でも2500円/月くらいですよ。パソコンはノートPCなのであまり消費しないし、他の電化製品は冷蔵庫、洗濯機、蛍光灯以外はあまり使わないもので、このあたりの電気代節約は助かります。

mqoImporterにてShadeにメタセコのデータを持っていく、というのは公私よく使ってるのですがいくつかバグを発見しました。

  • 形状名にスペースがあるとそこで名称が区切られてしまう
  • 面に対して同一頂点インデックスを参照している場合、Shadeで読み込み時に落ちる

これは内々では修正してますが、今はmqoExporterが中途半端に入ってる構成になってまして、これも整備してからアップ予定です。予定としては、今週末あたりにて。しばらくお待ちくださいませ。

2つめは、ShadeプラグインSDKにて

scene_interface::append_polygon_mesh_face

で面の頂点インデックスを指定するとき、同一インデックスがある場合に落ちてしまう、という部分になります。一応、try〜catchしてるんだけど自前ではじくのが一番すね。

後、面じゃないラインはShadeに持っていくときは開いた線形状にする、エクスポータでは開いた線形状はラインとしてmqoに出す、としたほうがよさげですね。これも対応予定です。

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