

随分、ごぶさたしてしおりましたが、本日は、もしかしたら、3Di社だけではなく、3Dインターネット業界において、記念すべき日といえるかもしれないほど、特別な日でもありますので、ブログを書くことにしました。
これまで、3Di社は、OpenSimプロジェクトによって生まれたOpenSimサーバーソフトウェアをベースに、3Diメッシュ等の独自機能、および、各種バグフィックスなどを行った商用OpenSim「3Di OpenSim Enterprise Server」を開発し、さらに、それに対応したインブラウザ型ビューア3Di OpenViewerを開発してきました。
3Di OpenViewerは、Flashのプラグインのように、InternetExplorerやFirefoxの一部として機能し、さらに、APIを通じて、既存のWebサービスと3D空間内とをシームレスに連携できる点が最も特長的でしたが、残念なことに、対応サーバーは、3Di OpenSimサーバーのみであり、オープンソースプロジェクトで開発されているupstream版OpenSimやリンデンラボ社のSecondLifeには対応していません。
これは、パソコン通信のようなクローズドなネットワークではなく、インターネットのようなオープン性ををもつ3Dインターネットの普及を推進する意味では、大きな障害となっていました。
そこで、本日、私たちは、この3Di OpenViewerのコア技術をオープン化し、upstream版OpenSimやSecondLife等への対応を目指し、BSDライセンスによるオープンソースプロジェクト、「3Diビューア"Rei"」を立ち上げました。
正直なところ、3Di OpenViewerは、3Di社がすべて一から開発した独自技術であったため、これをオープンソース化するという決定は、利益を追及すべき一企業である3Di社にとって、大きな決断でした。
しかし、3Dインターネット創生期においては、目先の利益にばかり目をうばわれていたのでは、次世代ネットワークとよばれるまでの発展に至らないまま終わってしまいます。
本当に大きな賭けですが、3Di社は、今後独自技術については、さらなる強化をはかり、公共インフラとしての共通技術については、完全なオープン化を行っていきます。
また、サーバー技術についても、現在の3Di OpenViewerは、upstream版と比較すると、かなりの修正がほどこされてしまった結果、共通技術とすべき部分であっても、その成果をupstream版に還元することが難しくなっていました。この問題についても、3Di社の独自技術とOpenSimのコア部分とを明確に分離してゆく方針です。
3Di社がこれまで培ってきた高品質のコアテクノロジーを、オープン化していくことは、コミュニティの技術者、研究者、そして、一般の方々が、自由に、気軽に、3Dインターネットサイトを立ち上げることが可能とし、現実の生活とネットワークとが自然な形で融合された世界が訪れることを願っています。
昨日、内田洋行様主催の「3Di Education Summit 2009」で講演をさせていただきました。東北、九州など遠方からのご参加もあり、大変感謝しております。
弊社のセクションでは、米国Intel、Earlham College(インディアナ州) および Contra Costa College(カルフォルニア州)が中心となり行っている「ScienceSim」プロジェクトにおいて、3Di社が研究開発した「ExtSim」というプラグイン(オープンソースとして提供)を通じて、膨大な計算量を必要とするタンパク質のフォールディングのシミュレーションを、外部のグリッドコンピューター上で計算し、それをOpenSim上にリアルタイムに反映させることで、離れた場所にいる研究者同士が、常に正確な情報を共有できたという成果について発表させていただきました。
私自身は、バイオケミカルは全く専門外なのですが、たんぱ質というものは、様々な条件により非常に複雑多岐にその構造を変化させるため、それまでとは全く異なる新しい効能を生み出す可能性を秘めているのだそうです。そのため、こうした研究は、アルツハイマー病、がん、パーキンソン病、狂牛病等の様々な疾病に役立つと言われています。
また、3Di OpenViewerを使ったプッシュ型コミュニケーションの参考として、2台のPCの画面をスクリーンに表示し、講演者が見せたいと思うカメラアングルを、視聴者全員のビューアーカメラに対してダイナミックに同期させて見せられるという様子を会議室ソリューションとしてご紹介しました。
行ったデモは、、単純にOpenViewerのカメラをAPI(Web制作マニュアルを3Di OpenViewerのページの下の方に掲載しています)を通じて連動させただけなのですが、同様の方法を応用すると、カメラだけではなく、例えば、これまでユーザーが面倒と感じていたWebフォームの入力なども、オペレータ側が代行して入力しながら、スムーズにWebコミュニケーションを進めるなどということも十分可能だと思います。
そうすることで、Webに掲載した情報をアクティブなユーザがうまく探し当てるのを待つというWebではなく、今この瞬間になにげなくサイトを訪れたユーザーが細かい説明を1つ1つ読まなくても、個々のユーザーにとって知りたい情報をリアルタイムに提示してくれるWebへと変化することで、よりリアルに近い感覚のコミュニケーションをとることができるのではないでしょうか?
これまでのWebマーケティングは、非常に技術都合であり、まだまだ十分にリアルビジネスとネットの利便性を違和感なく融合させている言えません。3Di技術は、リアルとネットとの距離をより身近にするためはとても重要なものであると私は信じています。
さて、今回は、3Di OpenViewerの画面内のアイテムをタッチし、そのアイテムのUUID(Universally Unique Identifier)をJavaScript側で表示するという方法をご紹介します。
まず、RealXtend Viewer 3Di Editionを起動し、サーバーにログインを行います。下の画面にうさぎにタッチスクリプトを埋め込んでみます。
単に、JavaScriptにタッチイベントを伝えるだけであれば、touch_startの中身は、空でも構いませんが、せっかくですから、タッチした人の名前をllDetectedName関数で検出し、llSayを使って、あいさつをさせてみました。

こんどは、HTMLページ側のJavaScirptで、タッチイベントを受け取るための準備をします。書き方は、以下のようにします。ポイントは、scriptタグの中に、for="activex" event="OnTouched(uuid)" というパラメータを加えるところです。下の例では、タッチしたアイテムのUUIDをalert関数を使って表示させようとしています。
<script type="text/javascript" language="javascript"for="activex" event="OnTouched(uuid)">
<!--
alert(uuid);
-->
</script>
では、結果をみてみましょう。

無事タッチされたうさぎのUUIDが表示できました。また、llSayを使って挨拶をするようにしていましたが、そちらも、ちゃんとチャット画面に表示されました。
今回は、タッチしたアイテムのUUIDをJavaScript側に伝えるというごく簡単なものですが、これだけでも、応用次第では、もっと面白いコンテンツを作ることが可能になるはずです。例えば、3Di社のEC向けデモページでは、これと同じしくみで、触ったUUIDをJavaScriptで識別してHTMLページ内にある商品説明を動的に差し替えています。最近はAjaxも使えるようになりましたから、UUIDを使って関連するDB情報を取得したり、WebAPIと連携したりといろいろと楽しめるのではないでしょうか?
前回、objectタグを使い、HTMLページの中にViewerを埋め込む方法について説明しました。
さて、今回は、HTMLフォームのボタンをクリックによって、ログインを行ってみたいと思います。
まずは、埋め込まれたViewerにJavaScriptからアクセスできるようにするため、objectタグに指定したIDをキーにして、オブジェクトそのものgetElementByIdで取得しておきます。
var openviewer = document.getElementById('activex');
なお、このjavascriptはobjectタグよりも後に置く必要がありますから、以下のようなかんじにしておく必要があります。
<object id="activex" type="application/x-oleobject"
classid="clsid:AB809708-8AA8-4aa8-9E31-7A16213F46CD"
codebase
="http://3di-opensim.com/openviewer/product/3Di_OpenViewer.cab">
<param name="WindowWidth" value="400" />
<param name="WindowHeight" value="300" />
</object>
<script type="text/javascript" language="javascript">
<!--
var openviewer = document.getElementById('activex');
-->
</script>
ここまで準備ができたら、あとはボタンにログインの関数を埋め込むだけです。ログインは、取得したオブジェクト(ここではopenviewerという名前です)に対してLoginという命令を送ることで実行できます。書き方は以下のようになります。
openviewer.Login(
'ファーストネーム','ラストネーム','パスワード','接続サーバー','last');
HTMLのボタンをクリックしたときにログインさせるたいので、以下のようにします。
<input type="button" value="ログイン"
onclick="openviewer.Login('first','last','hogehoge',
'192.168.xxx.yyy:10001','last');" />
これでおしまいです。なお、ログアウトの場合は
openviewer.Logout();
です。いかがでしょうか?
少し前は、JavaScriptは、あまり多様すべきではないという風潮がありましたが、Google APIに代表されるAjax技術が注目されたこともあり、比較的Webデザイナーでも扱いやすいJavaScriptが見直されてきているように思います。
どんなに優れた技術であろうとも、「誰もが簡単にわかる」ということは、インターバースを普及させる上でとても大切なことだと考えています。
3Di OpenViewer のデモサイト、もうご覧になりましたか?予想以上の反響にログインしずらくなっていますが、めげずにトライしてもらえたらと思います。
そういえばgoogleさんも、O3Dを公開されましたね。まるで、パソコン通信時代が終焉しインターネットの時代へと突入したときと同じように、クローズドな仮想空間の時代が終わり、オープンな仮想空間の時代がいよいよ動き出したのではないでしょうか。
さて、今回は、少し技術的なお話を少しだけします。3Di OpenViewerのウリの1つであるHTML内のJavaScriptとの連携について、何回にわけて解説してみたいと思います。
■HTMLページの中にビューアを埋め込む
<object id="activex" type="application/x-oleobject"
classid="clsid:AB809708-8AA8-4aa8-9E31-7A16213F46CD"
codebase
="http://3di-opensim.com/openviewer/product/3Di_OpenViewer.cab">
<param name="WindowWidth" value="400" />
<param name="WindowHeight" value="300" />
</object>
最もシンプルな書き方はこのようになります。idの箇所は、任意ですが、JavaScriptと連携する際は、このidをキーとしてViewerの様々なAPIにアクセスすることができます。
ビューアのサイズは、WindowWidthとWIndowHeightでカスタマイズできます。320x240~1024x768の範囲で調整してください。
このほかにも、たとえばプログレスバーの色をかえたり、背景画像をお好みの画像にしたりと、様々なパラメータがありますが、おいおいご説明していきたいと思います。
鎌田卓 / Kamata Taku
(3Di株式会社取締役 CTO)