!!!独り言日記 !!iPhone SDK 3.2(2010/01/30) iPhoneの3.2開発キットのベータが配布されましたね(デベロッパとして登録された方のみ使えます)。 目玉はiPadシミュレータでしょうかね。 といっても、iPadではiPhoneOSがそのまま動作するらしく、iPhone/iPod touchアプリはそのまま使えるようです。 http://plusd.itmedia.co.jp/pcuser/articles/1001/29/news098.html iPadはXGA(1024 x 768 pixel)、iPhoneは320 x 480 pixel、なので過去の資産は引き延ばすことで対応とするみたい。 というわけでSDK 3.2をインストール中。ライセンス上、情報は出せない気がしてますので個人的な勉強にとどめておこうかと。しかし、時間がなくていじれてない、、、。 !!多角形を三角形分解する(2010/01/29) 3Dの多角形を三角形に分解する、という処理は結構よく使うのですが、 ShadeプラグインSDKでは、以下のようにして分解してくることが可能です。 リファレンスには書いてない使い方、ということで記載。 /** * 三角形情報を追加する(三角形に分割される) * @param[in] vCou 頂点数 * @param[in] pIndex 頂点インデックス * @param[in] pVertices 頂点座標 * @param[in] pUV UV値 */ bool CPolygonMeshCtrl::AppendPolygon(const int vCou, int *pIndex, vec3 *pVertices, vec2 *pUV) { //------------------------------------------------------// // 多角形を三角形に分割するコールバッククラス // //------------------------------------------------------// class CDividePolygon : public shade_interface::output_function_class { private: CPolygonMeshCtrl *m_pPoly; int *m_pIndex; vec2 *m_pUV; public: /** * @param[in] pPoly 呼び出しの親クラス * @param[in] pIndex 多角形の頂点インデックス * @param[in] pUV 多角形の頂点ごとのUV */ CDividePolygon(CPolygonMeshCtrl *pPoly, int *pIndex, vec2 *pUV) { m_pPoly = pPoly; m_pIndex = pIndex; m_pUV = pUV; } /** * 取得した三角形情報を格納 */ virtual void output (int i0 , int i1 , int i2 , int i3) { int indexA[4]; vec2 uvA[4]; indexA[0] = m_pIndex[i0]; indexA[1] = m_pIndex[i1]; indexA[2] = m_pIndex[i2]; uvA[0] = m_pUV[i0]; uvA[1] = m_pUV[i1]; uvA[2] = m_pUV[i2]; // 三角形情報を独自メモリに追加 // indexA[]が三角形の頂点インデックス // uvA[]が三角形のUV値 m_pPoly->AppendTriangle(indexA, uvA); } }; // 多角形を三角形に分割する CDividePolygon divPoly(this, pIndex, pUV); m_pShade->divide_polygon(divPoly, vCou, pVertices, true); return true; } AppendPolygonという関数にまとめた例。 shade_interface::divide_polygonにて第一引数に分解結果の受け取りクラスを登録、 第二引数に多角形の頂点数、第三引数に頂点座標配列の先頭ポインタ、第四引数にtrueを入れます。 これで、多角形が三角形分割されたときの頂点インデックスが、shade_interface::output_function_classの派生クラスの「output」関数にて 頂点インデックスとして格納されます。 以前、日記にて長々と多角形分解の方法を説明したりしたのですが、 ShadeプラグインSDKではその機能が存在してます。 ちょっと時間が取れてなかったのですが、隙を見つけては 「ディスプレイスメントマップ」の実験をしていたりします(といっても1週間以上ブランクが空きましたが(^_^;;)。 どうやって実装しようかという理論は大体固まったのですが、面の分割が結構大変になるなぁと。 仕事の都合もありどこまでできるかはちと未定ですが、 作品的に表現したいのがあり、バンプじゃない凸凹でもっと汚れをつけたいんですわ。 ということで、原点に返って何か作るために表現として足りない部分をプログラムで補うようにしようかと思ってます(雲表現も実はそのために作ったというのがあります)。 しかし、Shadeの画像を外部参照にしても、画像編集ソフトでレタッチしてレンダリング、では反映されないんですね。イメージの形状情報から更新ボタンを押さないといけないです。これも画像ファイルのタイムスタンプが変更されたら自動読み込み、とかしてほしいなぁ。プラグインで対応できるもんかな。 これはすぐできそうなので試してみようか。 !!BootCampでのWindows環境からMacディレクトリが見れない場合(2010/01/22) Mac上でX11を使うアプリを入れたら、Win上からMacのユーザディレクトリが見れなくなりました。 調べた結果、「/Users/ユーザ名/」 ディレクトリ直下の「.Xauthority」をターミナルから削除すれば認識するとのこと。 http://forums.macrumors.com/archive/index.php/t-775422.html システム壊れたのかと思ってあせってしまいました。 無事見ることができましたが、バッチ化しておかないと面倒ですね。 !!アバター(2010/01/21) 近所(といっても徒歩1時間強)に映画館があるので「アバター」の3D字幕のを見てきました。ということで、交通費はタダ。最近歩いてないので運動もかねて。 ちょっと時間があったので、近くで空画像を撮ってました。 今日はいろんな雲が入り組んでる空模様でした。飛行機雲もあります。 {{ref_image cloud_01_20100121.jpg}} {{ref_image cloud_02_20100121.jpg}} {{ref_image cloud_03_20100121.jpg}} 雲は今後も表現したいもののために、気になって最近は外に出ると空を見上げてますわ。 なんとなくですが、場所によって雲に違いがある感じがします。 大阪はもっと大粒だった感じが。もちろん、時期や天候によっても変わるでしょうけど。 で、アバターなんですが3Dのメガネは久々です。 昔、万博に行った以来かもしれない。平日で人が少ないかと思ったら、結構埋まってました。指定席の映画館なもんで、真ん中の席を陣取ってみてました。 なかなかよかったです。けど、ストーリーの流れに見覚えが、、、。もしかして、もののけ姫か?と思って後で検索すると、案の定同じ感想の方が多いみたい(^_^;;。 しかし、3D映像はなかなか迫力ありますね。目が疲れるかと思ったけど、そんなでもなかったです。で、一部の人は気になる3D(3D映像じゃなくて3DCGね)表現ですが、個人的には「おっ、このドラゴン、SSSを見せびらかしてるな」というのと破壊表現っすかねぇ。 背景の空や雲も気になったのですが、なんとなくベース部分は描いている(マットペイント)気がしました。実際はどうなんでしょうね。 ですが、見ている最中は微塵もそんなのを感じず、楽しめましたよ。 後、車椅子の役者さん、後半あたりに異常に細い足の表現がちらっとあったんだけど、本当に足だけやせていたのか、CGとして加工してたんだろうか。ここは妙にリアルティを感じて気になりました。 映画前の予告で、アリスやってましたがこれも面白そうです。 http://www.disney.co.jp/movies/alice/index2.html !!MacBook上のSAIの挙動にて(2010/01/18) ペイントツールのSAIをMacBookにてタブレット(BAMBOO)を使って使用していると、 ラインを引いたら数秒でスポイト発動、という現象が発生。 まともに絵を描ける状態じゃなかったのでタブレットドライバを再度インストールしたり試行錯誤してました。 掲示板の以下に同じ現象が。「何故かスポイトしてしまう。」 http://www.systemax.jp/bbs/saibbs.cgi?mode=threadall&tid=2449 同じMacBookの症状です。 で、他の常駐ソフトで怪しいのは、、、ProMouseEnabler http://www.vector.co.jp/soft/win95/util/se256849.html これはMacでマウス右クリックをキーコンボで代用するやつなのですが、 これを終了させると正常動作しました。 ということで、これが原因のようです。タブレットで右クリックはできるわけですので、 ProMouseEnablerは使用せずとも問題なさそうですね。 早速、SAIの掲示板に書き込みしてこようっと。、、、とコメント書いてきました。1年以上前のもののレスなのでスレ主が見ているかどうかは不明ですが(^_^;; !!ディスプレイスメントマップ(2010/01/17) ニコニコ動画で2次元が浮き出る動画があって面白かったため、プログラム実験かねて遊んでみました。 いわゆるディスプレイスメントマップになります。 以下はShadeのレンダリング画面です。プラグインで凸凹をつけてます。 {{ref_image dmap_img00_20100117.jpg}} 左がバンプマップ、右がディスプレイスメントマップです。 初音ミク画像に凹凸をつけてみました。アゴあたりが厳しいですが(^_^;; {{ref_image dmap_img01_20100117.jpg}} {{ref_image dmap_img02_20100117.jpg}} 元の2次元画像にて角度がついているためか、回転させてみたら粗が見えたので一方のみの視点から。元は四角形のみで、ミクの描かれたテクスチャ画像と高さ用のテクスチャ画像の2枚を与えてます。 元画像はクリプトンさんの公式サイトの http://www.crypton.co.jp/mp/pages/prod/vocaloid/cv01.jsp の顔のところね。 高さマップは以下のようにしてます(SAIで描きました)。 {{ref_image miku_bump.png}} これ、SAIとShadeを行き来しながらペイントしてレンダリング、を繰り返し行っていたのですが、 ディスプレイスメントマップの場合は、高さ画像を読み込むだけじゃなくてZ-Brushみたいなペイントしながら確認できる機能もほしいかもしれませんね。 この反復による高さマップをペイントする微調整が結構大変でした。 今は平面に決めうちで凸凹つける実装にしていますが、曲面のある形状のバンプをディスプレイスメントマップに置き換える、なんてこともできるとは思います。 2月から仕事が忙しくなるため今月中にこのへん実装してしまいたいですが、時間的に厳しいかな。 高さ用画像を指定するインターフェイスをどうするかが難しいですが、それ以外は普通にディスプレイスメントマップ実装はできそうではあります。 !!日本文学(2010/01/15) 先日東京に行ったときにちょっと時間があったため、古本屋で三島由紀夫の「仮面の告白」を買ってきました。 美しい文章と聞いていたので読んでおきたくて。でも、この本の内容はちと過激なので大人向けの小説ですな。 夜な夜な読んでようやく終わりました。 遠い学生時代は良さが理解できなかったのですが、今読むと情景が浮かぶように引き込まれますね。年齢を重ねないと理解できないこともあるなぁと。 詩的な表現が多くリズム感があるのがいいね。 文章というのは時代を感じさせないもので、かつその時代を表現しているもので、引き込まれるとその世界を垣間見れたような錯覚が起こる気がしてます(映画一本を見終えた後のような)。 「仮面の告白」は自分が読んだ本の中で、ひさびさに余韻が残った読み物でした。ただ、普段はあまり本を読まないもんですのでいいものに触れてないだけですけど(苦笑)。 昔のように映画もテレビももちろんネットも存在していないか発達してない時代のほうが、もしかしたら制限された中ゆえに表現力は高かったのかもしれないな、と思ったりもする今日この頃です。 といっても、そんなにうんちくたれるほど本を読んでないので、たわごとですが(^_^;;。 で、ほかの日本文学にも触れてみたくなりました。 昔は読もう読もうと思って挫折したのは多々あるので(人間失格なんて中学生あたりで読破したけどさっぱり頭に入らなかった(^_^;;)、これを機会に読んでみるのもいいかな。今なら理解できるかも。 そういえば本と対極ではありますが、映画のアバターも見てみたいなぁ。 3D映像のシアターがお勧めなんですっけ。これも人によっては余韻が残るらしいですね。 !!景観といえば(2010/01/12) artist sideの作品見てきれいだなーと思ってて、景観といえばVueがあるじゃないかと。 雲表現はこれを目標にするのがよさげですね。 http://graphic.e-frontier.co.jp/vue/ でも、どういう理論でやってるんだろう。このボリューム感だとビルボードから攻めたほうがいいのだろうか。 !!Celestia(2010/01/11) ベテルギウスのスレッド(なんだそりゃ)でこのアプリを知りました。 爆発の兆しがあるそうですね。でも、600光年離れているため はるか昔に実は爆発していて地球にはまだ見えてないのだろうか、なんだか遠い世界の話のよう。 宇宙は夢があるなぁ。 で、宇宙空間をシミュレートするオープンソースの「Celestia」。 Win版/Mac版、両方あります。 http://www.shatters.net/celestia/ 各惑星のテクスチャが結構精密です。 {{ref_image celestia_01_20100110.jpg}} 地球からずっとカメラを下げていくと太陽系に。 {{ref_image celestia_02_20100110.jpg}} 公転や自転に加えて、月や星空も年月日と時分秒指定でシミュレートしてます。 これはすごい参考になりそうです。 雲は地球の自転についてきてますね。ということで、地球から見た場合の雲は風の影響のみ考えるとよいかな。 !!太陽光計算 for Shade10/11 Ver0.2.0.0(2010/01/10) 太陽光計算プラグインを更新しました。 「[[太陽光計算|太陽光計算_shade]]」のページからVer.0.2.0.0をダウンロードできます。 背景、雲の反映とアニメーション対応です。最近ずっと日記に書いていた内容が遊べるようになっています。 ソース付きですので、同梱のreadme.htmlを読んだ上でご利用くださいませ。 ちょっと使い方はややこしいかもしれません。 なお、背景色計算のためのSunSkyはソースをそのまま使用しているため、readme.htmlにてその主旨を記載しています。ライセンスは個々のものに従うようにお願いいたします。 また、参考にしたサイトや文献についてもreadmeに記載しました。 SunSkyのライセンスは単純で、要約すると以下のようになります。 *ソース改変は可能 *開発者はいかなる場合でも責任を持たない *使用したことを明記すること よくあるBSDライセンスです。ソース公開義務はないと思いますが、私の場合は勉強用に本プラグインを公開しているという意味もありますのであえて全部出してます。 私が記述した部分はご自由に改造いただいて問題ありません。 今回はShadeでの背景シェーダー機能(と勝手に命名)を使うとこんなことができる、というのが目玉になります(また解説します)。 雲は、少ない量だとあまりそれっぽくないですね。量が多いとそれなりなので、曇り空以外では密度を高くして限りなく不鮮明にする(半透明にする)のがそれっぽくなるコツかもしれません。 !!続・曇り空っぽい表現(2010/01/09) 微妙な修正ですが、雲生成時のクランプでミスがあったので修正。 見た目、あんまり差がないですがちょっとボリュームが出たかな。 耐久テストもかねて、1000フレームをレンダリングしています(各ムービーが33秒)。 雲自身は完全フェイクなので、時間との関連性はなしです。ただ単に指定した方向に流しているだけ。 ↓昼間の雲の流れ {{flvplayer http://ft-lab.ne.jp/files/shade/cloud_03_20100109.flv,width=492,height=393}} ↓夜明けの雲の流れ {{ref_image sun_00_20100109.jpg}} {{flvplayer http://ft-lab.ne.jp/files/shade/cloud_04_20100109.flv,width=492,height=393}} 雲が多い場合・アニメーションしている場合は、それっぽいのですが 静止画だと単調になるのが気にはなります。 このあたりは要推敲ですが、今回はこの方法で。たぶん、ビルボードでの雲もレパートリーとして用意したほうがよさそう。 一応、これで実装完了で、後はドキュメントを書いて公開準備に。 !!他のソフトでの曇表現(2010/01/08) YouTubeにて、Cloudやらraymarchingやらで検索するといろいろ出てきますね。 3ds max clouds http://www.youtube.com/watch?v=IGx529cx-1M Cloud tutorial(3ds max) http://www.youtube.com/watch?v=Mt8dhqXzCC4 3ds maxのはビルボードを使った表現かな。 以下はリアルタイムの煙。 Real-Time Smoke Rendering Using Compensated Ray Marching - 911 Fakery Method http://www.youtube.com/watch?v=fmexa7C3DUI フォトンマッピング本の煙表現がリアルタイムとな、すげ〜。 てことで、私はもうちょっとまじめにraymarchingを掘ってみたほうがよさげですね(^_^;;。これらは今後の課題ということで。 !!曇り空っぽい表現(2010/01/08) 厚みのある雲で覆っただけですが、曇り空のような表現をムービー化。 {{ref_image cloud_00_20100108.jpg}} {{flvplayer http://ft-lab.ne.jp/files/shade/cloud_00_20100108.flv,width=492,height=393}} ビル群は、IMECOMさんの「ビル群自動生成スクリプト」を使わせていただきました。 太陽光としてはピーカン(死語)なので、これに曇り用のフィルタ(エフェクタ)をかけてそれっぽくするのがいいのかもしれません。普通はアフターエフェクトなどを使うんだと思いますが、効果のためのフィルタはいろいろほしいところですね。 雲はGem5にあった理論をさらに改良して、できるかぎり平面的に張り付いているのがばれないように厚みをつけています。でも、実際の計算は平面的に行ってます。 まだ表現力としては気になりますが、とりあえず雲表現としてはこれくらいで第一弾としてFixさせてまとめることにします(「太陽光計算」プラグイン for Shade、なんですが、結局雲も入れてます)。 雲の調整パラメータは結構増えてしまいまして、以下のようなUIとなってます。 {{ref_image sunSimulation_img00_20100108.png}} まだ、少しインターフェイスとして整合性が取れない部分があってつめないといけません。 たぶん3連休の半ばには出せるかなぁと。 実際の表現で使う場合は、「この位置に雲の塊がほしい」なんてことになると思いますので、現状はあくまでもそれっぽい表現止まりであります。 雲をユーザが空の半球にペイント、というようなインタラクティブなものができるほうが実用性が高いのかもしれませんね。 それと、風邪ひいてしまいました(^_^;;。ティッシュがあっという間に消費されてしまう〜〜。 !!Shade11プラグインSDK(2010/01/07) Shade11プラグインSDKでもビルドできるように雛形プラグインを更新し整理しました。 「[[Shade]]」のページの「[shade10_11_plugin_template_project.zip|http://ft-lab.ne.jp/files/shade/shade10/shade10_11_plugin_template_project.zip]」にて。 Shade11のSDKは以下サイトよりダウンロードできます。 http://lounge.shade-online.jp/modules/dev/ 私のサイトで公開するのはしばらくはShade10でも動作するようにしておきたいので、Shade10プラグインSDKにてビルドします。 ですが、SDKとしてはあまり大きな差はないので、Shade11プラグインSDKでもビルドできるかと思います。 Shade11プラグインSDKで主な強化された点は *フローティングウィンドウ(palette SXUL)でのテーブル機能、テキスト入力コントロール *フローティングウィンドウでのOpenGL描画処理(window_interface上)が可能に。 *読み込みファイルダイアログでの複数ファイル選択(プラグインでは複数のファイル名を取得できます) *形状のバウンディングボックスの取得・設定 といったところでしょうか。1番目のフローティングウィンドウ実装は、既存の不都合も修正されているようです。 Shade10.xではモーダルダイアログ実装(dialog SXUL)のほうが表現力が高かったのですが、Shade11ではフローティングウィンドウ実装(palette SXUL)も強化された、と考えるとよいかもしれません。 特に、テーブル機能は結構使えそうかと。ポリゴンメッシュの頂点座標一覧を作るとか、数値指定で頂点座標を微妙に変更したい場合とか。CADっぽい操作を行うプラグインを作る場合に利用できそうですね。 ちなみにモーダルダイアログではリストボックスがそれに該当するのですが一列だけなので表は作れないです。 !!Nexus One(2010/01/06) Googleの携帯電話「Nexus One」が発表されましたね。 http://www.itmedia.co.jp/news/articles/1001/06/news046.html でも、既存のAndroid携帯と何が違うんだろう?OSはAndroidなのですね。 ハードもOS(Android)も両方押さえておこうという戦略なのかな。 個人的には情報端末は携帯化(携帯電話じゃなくてスマートフォン的な感じで)してくると思っているので、今後どうなるのか楽しみではあります。 日本のケータイがガラパゴス(世界的に孤立している)だとすると、昔のPC-98とDOS/Vのような感じで いつの間にか立場が逆転していた、となるシナリオも考えられそうですね。 こういう過渡期をかいま見れるのはちょっと楽しいです。 で、iPhone SDKも勉強しなくては、、、。とりあえず、1年分の開発ライセンスを持ってるので今年中に 掘っておかないともったいないですので。 !!Shadeプラグインとして出来そうなこととできなさそうなこと(2010/01/05) 雲表現含めた太陽光計算プラグインのバージョンアップは、スケジュール通りいければ今週末には公開できそうな感じです。いろいろ実装していたら結構パラメータが増えてきました(汗)。 初回バージョンで実装していた太陽光の向きに加えて、太陽光の色の反映、背景描画(背景を画像として出力する機能も含む)、雲の描画、などを入れた内容となっています。 後、メールにていただいた(プラグインに関する)質問の回答含め、現状のSDKの機能で何ができそうで何ができなさそうか、というのをまとめとして列挙してみようかと思います。 なお、プラグインとして可能か不可能かということで、苦労すればなんでもできてしまうんですが(例えば、レンダラ自身をフルスクラッチで書いてしまうとか)それは極論ですのでのぞいてください(^_^;; また、本体機能(製品付属のプラグイン含む)で実装している部分は触れずに、あくまでプラグインSDKとしての機能について書きます。以下はShade9あたりから実は変わらず使える機能だったり。 !ディスプレイスメントマップは実装できないの? たぶん可能。 Shade9あたりで「rendering objects 」という機能が実装されていて、 これはレンダリング開始時にシーン上に独自形状を作成・配置することができる機能になります。 レンダリング後には自動で削除されます。 非表示属性にした形状にて凸凹の高さマップとメッシュの解像度を指定、などしておいて、 レンダリング時に「rendering objects」の機能にてメッシュ形状を生成してあげます。 DirectXで言うジオメトリシェーダーと考えていただければ。 ただ、手順がややこしいので説明がないと実装は難しいかと思います。 時間があればサンプルプラグインを作ってみたいですが、今のところ、ちといつごろ実験できそうかの断言はできないです。 !ピクセルシェーダーみたいなのは扱えないの? 無理っぽい。 Shadeでは「shader_interface」というクラスがあり、これは文字通りシェーダー機能を提供するものです。 特定の表面材質にシェーダーを割り当てることができ、レンダリング時に「対象となる位置(ローカルかワールド座標かは未調査)」「対象位置での法線」が取得できます。レイシューティングでの交差位置でのオリジナル情報です。それを元にシェーディング計算して、色や法線を返すことが可能です。 ただし、光源を考慮した輝度計算を行う前の「拡散反射」「光沢」などのそれぞれに割り当てるもので、輝度計算含めて全体を自分でカスタマイズしたい、という目的には使用できません。 また、shader_interfaceの関数はレンダリング中にコールバックとして呼ばれますが、そのシェーダーがどの表面材質や形状に属するものかを取得できる関数はないようです。 それぞれのマッピングレイヤが独立してるので(その中の1つにshader_interfaceが存在する)、これらをまとめてごにょごにょしたい、というのは難しそうです。 ということで、機能としてはおしいのですが一般的に使われるようなピクセルシェーダーとしてはまだ壁がありそうです。 ピクセルシェーダーが仮に使えたとした場合に実装できそうな機能としては、以下のものが考えられそうです。 *頂点カラー対応 *アンビエントオクルージョン *SSS(肌のような透けた表現) *UV階層は2階層以上持てる(というよりも自分でカスタマイズできる) *用途に合わせた独自のトゥーン処理、Lambert/Phongなどのシェーダーアルゴリズムの切り替え。 いや〜、ピクセルシェーダーはいいことだらけですねー。 ですが、これってリアルタイムの世界(DirectX)ではもう当たり前な選択肢になってるんですよね。 シェーダーの魅力はカスタマイズできることで、たしかにプログラム技術はいるのですが表現力が幅広い(ユーザ任せ、丸投げ)、というのが大きな利点であると思います。 PS3やXBOX360のゲームにてかなりリアルなものがたくさんありますが(それがリアルタイムで動いている)、 結局はシェーダーで重ねて、レンダリング画像に後処理として効果を重ねて汚して、のテクニックだったり しますよね。それって、オフラインでも十分使えるんじゃないかなと。 でも、自由度が高い分、何かしらルールを設けておかないと 方言ばっかり生まれて逆にダメになるかなと思ったりもします。私みたいな開発主体のものだと俺ルールで作ってしまえば問題ないのですが、それが複数あるとするとたしかに混乱するでしょうから。DirectXでのシェーダー自身がまさにそうですよね。個々人がそれぞれシェーダーを持っているという。汎用ツール内のシェーダーだとプログラマがメインじゃないため落としどころが難しいだろうなぁ。 !背景をカスタマイズしたい(背景のシェーダー) エフェクタプラグインとして実装することで可能となります。 「effector_interface::supports_background_effect」でtrueを返し、 「effector_interface::do_background_effect」の第二引数がワールド座標での視線方向のベクトルになりますので、それを元に計算を行い、第一引数のrgb_classの色を返してあげるとよいです。 エフェクタとして機能するわけではなく、レンダリング時のレイシューティングで背景に抜けた場合の色をその都度カスタマイズできることになりますので、GI表現でも反映されます。 次回バージョンの「太陽光計算プラグイン」でこれを含めますのでそのときに説明入れておきます。 !雲海の表現や垂直方向のモクモクの霧は表現できないの? 空に雲を浮かべることは前述の背景シェーダーで可能なのは分かりますが、雲海を突き抜ける飛行機の表現のような、手前に雲や霧を出せるのだろうか? エフェクタプラグインとして実装することで可能となります。 ただ、エフェクタなので半透明物体の後ろには回り込めないのと反射では映り込むことができないです。 また、後処理ですのでアンチエイリアスのあるレンダリング結果とは相性が悪くなりそうではありますね。 でも、エフェクタで処理するのが速度的にも一番よいかなと。 半透明物体の後ろへの回り込みに関しては「effector_interface::do_volume_effect」で対応できるかもしれませんが、未確認です。線形の霧ですと、エフェクタのFogPlusで表現できます。 !image_interfaceで1.0以上の色値を保持したい(ダイナミックレンジを保持) 画像はimage_interfaceで扱いますが、ピクセルごとの色はデフォルトではRGBA 4バイト/ピクセル、となっています。個々の要素での0.0f〜1.0fの数値指定は、0〜255で保持されることになります。ですので、1.0以上の値は保持できません。 「shade_interface::create_image_interface」の第二引数のdepthにて64または128を指定することで、1.0以上の色を保持できます。独自に生成した画像にてhdr出力を行いたい場合には、第二引数を64とするとよいです。 ただし、画像サイズ分 x depthのメモリを消費しますので、使うときだけdepth指定を行うほうが無難かと思います。 SXULを使用すると、UIに関しては結構なことができますので(OpenGLで独自描画領域を設けることも可能ですし)例えば ポリゴンモデラーを乗っけてしまう、というのも現状の機能でできてしまいます。 アプリ1本を作るくらい大掛かりですが(^_^;;。 構造の問題(1形状に複数表面材質を割当られない、UV層が2つまでしか持てないなど)や SDK自身が複雑だったりという問題もありますが、 それをのぞけば私としては「ピクセルシェーダー」があれば後はSDKとしては特になんでもできる環境は整うかなと思ったりもしてます。 アニメーション機能はfbx SDKを使ってボーンシステムを組んで入れ変えてしまう、ということもできると思いますし(ただし、現在はMac 64bit版のfbx SDKはないみたいですね)。 ただ、プラグインが作成できないとこのあたりの体感はまず無理ですので、いじれる人ががんばって形にするか(汗)、本体の見える機能としての底上げがまず先かもしれませんね。 というのがプラグイン開発サイドから見た所感になります。幸い、今は過去ほどSDKがダイナミックに変わって互換性が失われるということも少なくなりましたので、開発としては材料は整いつつあるかなと。 !!鷲宮神社(2010/01/05) 埼玉県民(でも転籍して半年くらいですが)としては一度は行っておきたいということで、今年の初詣は「鷲宮神社」に行ってきました。三が日はずらして本日なので、人は少なくてすぐにお参りできました。でも、夜店あり巫女さんあり、祈祷の神主さん(?)もいて、にぎわってました。 {{ref_image wasi_01_20100105.jpg}} {{ref_image wasi_02_20100105.jpg}} {{ref_image wasi_03_20100105.jpg}} 鷲宮町は今年の3月で久喜市に合併されるとのことで、町の名前としてはもう消えてしまうそうです。鷲宮神社自身の名前はさすがに残るでしょうけど、、、。 で、ここは数年前に放映されたアニメ「らき☆すた」の舞台になってるというのはご存知のとおり(埼玉県発行のパンフにも載ってます)。アニメで町おこしに成功した数少ない例ということで一度見てみたかったのもありますが、周りの店舗で らき☆すた の旗が立っていたり、グッズを売ってるところがあったりしました。繁盛してましたよ。 また、神社に奉納されている絵馬は半分くらい絵付きでした。 らき☆すたはもちろん、ドラゴンボールとスラムダンクのイラストを描いたのは確認できました。 しかし、みなさんうまいですね。願掛けの絵馬ですので写真を撮るのは控えました。 以下サイトに絵馬の写真がありますが、2010/01/05段階でこれよりも数は増えてます。 http://bizmakoto.jp/makoto/articles/1001/01/news005.html 上記サイトの警察の方(?)が描いた絵馬がなかなかうまいと個人的には思いました(^_^;;。しかし、警官が萌え絵馬を(しかもうまい)、というのがなんともシュールで好きだなぁ。 地方から上京した方で、 年末のコミケが終わってからそのまま元旦は鷲宮神社で参拝される方もいらっしゃるようで、参拝客数は年々伸びているとのこと。 以下の記事によると、 http://mainichi.jp/enta/mantan/graph/anime/20100105/ 今年も記録更新したみたい。 アニメは抜きにしても、由緒ある神社で景色もなかなか趣がありますので、 神社含めた昔ながらの建築や景色が好きな方はいいスポットかもしれません。 おみくじは大吉でした。ということで、今年もいい年でありますように。 !!現在の雲実装(2010/01/02) 視点中心のベクトルを地球中心の半球上のベクトルに変換し、さらに天空の平面にマップしてます(半球上のベクトルのままだと、極の中心部分で集中線が出て汚くなるため)。 雲の密度をかなり高くしてますので、ほとんど雲で覆われた状態です。 12/20 09:00〜19:00の東京の緯度経度を与えています。 {{ref_image cloud_img00_20100102.jpg}} 動画にするとこんな感じ。 {{flvplayer http://ft-lab.ne.jp/files/shade/cloud_01_20100101.flv,width=492,height=393}} ↓視点が雑な動きですが、空を見上げたところ {{flvplayer http://ft-lab.ne.jp/files/shade/cloud_02_20100102.flv,width=492,height=393}} 実際に冬場の雲を観察した感じだと、空を見上げると真上ほどそんなに雲はなく地表に平行な水平方向に行くにしたがって雲が増えてますね。 後、太陽が雲で隠れる場合は実際の世界では太陽をさえぎる雲の自己影が濃くなっていたのですが、上記では光の明るさにて雲自身が飛んでしまってます。 これは、擬似的なボリュームレンダリングをしているため、厚みが足りないのかもしれません(雲の濃度計算はたった1面で行ってますので)。 Gems5のデモムービーでも同様に 太陽の手前の雲は消えてしまってたのですが、これは別な方法(たとえばビルボードの重ね合わせなど)にしたほうがリアルになりそう。 !!あけましておめでとうございます(2010/01/02) あけましておめでとうございます。 Wikiでの日記も早6〜7年、古いホームページも含めれば10年以上日記を書き続けたわけですが(プログラムはすでに二十うん年やってるか、、、年をとったもんだ、、)、これからもこのような適当な感じで進めていければと考えています。 天邪鬼なもんで意地でもブログには移行しません(^_^;;。Wikiで日記、を貫き通します。 しかし、ホームページという言葉もあまり使わなくなりましたねぇ。今はブログやTwitterが主流かな。Twitterは興味あるんだけど、mixiで同じような機能があってそれを使ってるので事足りてたりします(^_^;;。今年始めに鳩山さんがTwitter始めましたね。 で、何事も継続するには力を入れずにゆるくやることが大切かと思っています。 誰かが言っていたのですが、義務化したら長続きしない というのは私にはちょうど当てはまるなぁと。 雲プラグインのほうはまだまだ表現力が気になるため、試行錯誤中です。 Gems5のデモムービーは結構ボリューム感のある表現ができていたのですが、 説明文のまま作るとどうも平面的になってしまいます。 雲のアルゴリズムについての基本的なことは以下サイトが役に立ちます。 http://freespace.virgin.net/hugo.elias/models/m_clouds.htm ですが、この先のリンクがことごとくリンク切れですね(^_^;; 今年の正月は結局このプラグイン開発で費やしてしまいました。 年始めはこれを公開したいなと(ソースごと)。 ということで、今年もよろしくお願いいたします。