アバターを調整

平面のポリゴンのアバターは違和感があるので立体のモデルに変更。

3DCG制作ソフトを使わずVRML手書きのためカクカクしてますが、世界との違和感は多少改善されたものと期待しています。

アバターは世界に対して存在感を弱めに作りました。

できればアバターよりも世界について注意をひかせたいためです。

一応フェイス画像が登録されていればポリゴンの頭部前面に仮面のような形で画像を表示するようにしています。

樹木のオブジェクトサンプル

以下、「夜の避暑地」の空間で使用している樹木のオブジェクトのVRMLソースです。

平面四角のIndexedFaceSetに透過の樹木画像を貼り付けたものをY軸方向に垂直にふたつ重ね合わせています。

これによっていろいろな角度から見てもちゃんと樹木に見えます。

もしくはBillboardノードで面を視点側に固定させる方法もありますが、この場合実在感を損なう場合もあるので注意が必要です。

樹木のオブジェクトを使用する際は参考にしてください。

 

#VRML V2.0 utf8

Transform {
children [
Shape {
appearance Appearance {
texture ImageTexture {
url “http://www.polygonwalk.com/images/bessou_tree.png”
}
material Material {
diffuseColor 1 1 1
specularColor 0 0 0
shininess 0
transparency 0
emissiveColor 0 0 0
}
}
geometry DEF Pelvis_geometry IndexedFaceSet {
coord Coordinate {
point [ -0.5  0   0,
-0.5  1 0,
0.5  1 0,
0.5  0   0
]
}
coordIndex [
0 1 2 3 -1
]
solid FALSE
}
}
]
translation 0 0 0
rotation 0 1 0 0
}
Transform {
children [
Shape {
appearance Appearance {
texture ImageTexture {
url “http://www.polygonwalk.com/images/bessou_tree.png”
}
material Material {
diffuseColor 1 1 1
specularColor 0 0 0
shininess 0
transparency 0
emissiveColor 0 0 0
}
}
geometry DEF Pelvis_geometry IndexedFaceSet {
coord Coordinate {
point [ -0.5  0   0,
-0.5  1 0,
0.5  1 0,
0.5  0   0
]
}
coordIndex [
0 1 2 3 -1
]
solid FALSE
}
}
]
translation 0 0 0
rotation 0 1 0 0.785
}

空間、光、音

本日避暑地の別荘の空間を追加しました。

http://www.polygonwalk.com/world.php?pid=36

aaa

別荘周りの簡単なフィールド、虫の声を入れていますがこれだけで
だいぶ雰囲気がでます。

この空間を構成してみて思ったのは、空間のリアリティに重要な要素となってくるのは、

「空間、光、音」

この3つではないかと思います。

別荘の空間は夜の設定になりますが、この3つが合わさることで現実感がぐっと増します。

ゲームではここまで視認性の悪い空間はなかなか作らないものと思いますが、
仮想空間ではこういったものもありかと思います。

個人的には現実にはいけない場所でしばらくの間たたずみ、しばし日常を離れて
何らかの思いに耽るような使い方をして頂けると本望です。

この空間ではフィールドに高低差を出し別荘内から見える木々の風景にこだわりました。

きっと素敵な時間を過ごして頂けるものと思っています。

javascriptループ処理の改善

「ポリゴンウォーク」のアバター位置情報更新処理、イベント発生監視処理などは
javascriptのsetIntervalでループ処理を施しています。

もともとは更新関連の処理をひとつのsetIntervalで動かしていたのですが、
アバターの位置情報の更新や描画をもう少し早めに動かしたかったため、
setIntervalを複数とし、ループ秒数を調整しました。

おそらく若干動きはよくなったかと思われます。

まだ2アバター表示でしかテストできていないため、これより多くのアバターが
表示された場合にどのくらい動くものかわかりませんが、この辺のパフォーマンス
チューニングも課題のひとつです。

シンクロオブジェクトの必要性

現状、「ポリゴンウォーク」の空間は、アバターの位置情報以外はユーザー間で
連携はしていません。

空間内のオブジェクトの動きはあくまでクライアント側(ユーザーのブラウザ)だけで
独立したものです。

例えば、ユーザーAが空間内の家の照明をつけるとします。
しかしユーザーBの空間では照明はつきません。

これを実現するにはクラアント側が変更したオブジェクトの変化の情報を一度データベース側で
保持し、その後に全ユーザーのブラウザに情報を配信する必要があります。

3D空間内での体験の共有という意味ではこれは非常に重要な機能になると思います。

先ほどの照明の例でもそうですが、例えば、空間内で船を操縦するユーザーAがいるとします。
ユーザーAが操縦する船は全ユーザーのVRMLブラウザ内の港に同時に到着します。

そして船に乗って出発すると船の動きに連動してすべてのユーザーの位置情報が変化します。
これにより全ユーザーが同じ船から同じ景色を眺めることが可能になるのです。

オンラインゲームでは普通にやっていることですよね。
この同じ体験をするというのはとても楽しいものだと思います。

「ポリゴンウォーク」で言えば、例えばシンクロオブジェクトなるものを登録できる仕組みを作る。

基本的に他サーバーから参照したVRMLファイル内のノードにはJavascriptでアクセスができないため、
シンクロオブジェクトは別途「ポリゴンウォーク」側で登録してもらいます。

シンクロオブジェクトには「ポリゴンウォーク」側でユニークなID(DEFノード)を設定し、
マップ読み込み時にそのIDを付加したオブジェクトをjavascriptでVRMLブラウザに設置します。

これであればWEBブラウザはJavascriptを介しVRMLブラウザ内のオブジェクトとデータの受け渡しが
できるため、あるユーザーのVRMLブラウザから抽出したオブジェクトのパラメータを随時データベースに
登録して一定間隔で全ユーザーのVRMLブラウザに同期をとることが可能です。
※トリガーとなるユーザーをどう決めるかの問題はありますが。

しかし、このような実装方法の場合、オブジェクトの動きはひどいことになりそうです。

現状のアバターの動きでさえかなりタイムラグがあります。
Javascriptの定期処理で設定した間隔で同期をとって全ユーザーのVRMLブラウザに位置情報を伝えて
いるため限界がありますね。

おそらくこのシンクロオブジェクトの動きはとびとびになると思います。
※インタポレーターで動きを補間させるのもひとつの方法でしょうか。

となると、そもそもの通信方法から見直す必要があるのかもしれません。
※この辺の技術は勉強不足で想像もつきませんが…。

しかしゆくゆくイメージしている仮想空間に近づけるためにはこういった部分を勉強してゆく必要も
ありそうです。

マインクラフト的な仕組みもよいかも

「ポリゴンウォーク」では3D制作ソフトを操作できる方は制作したオブジェクトを
VRMLファイルにエクスポートすることで比較的簡単に空間を公開することができますが、

やはり一般の方には敷居が高いと思われます。
そしてこれは3D仮想空間では漏れなく言えることかと思います。

できれば一般的な3D制作ソフトを操作できない方にも3D空間を制作する楽しさを
体験してほしいものですが、現状のサーバー環境ではなかなかユーザーが制作した
3D空間やテクスチャを保存しておくだけの余裕はありません。

なので現在はユーザーが自身のレンタルサーバーで公開しているファイルを参照する
形にしています。

実装だけを考えれば、「ポリゴンウォーク」で用意している3D空間制作ツールを
改修して制作したものをファイルもしくはデータベースに入れてそのまま公開する
ことも可能ではありますが、今後のサーバー負荷が読めない、またなんらかの要因で
サーバー上のデータに問題が発生した場合のリスク等を考えるとここはなかなか
難しいものがあります。

そこでひとつの方法としては、公開した空間に対し予め用意した3Dオブジェクトを
好きに設置してゆける仕組みなんかも面白いかもしれないなと思いました。

イメージとしてはマインクラフト的な感じですね。

例えばクリエイターがベースとなるマップ(地形)を用意する。
そこにユーザーが木やら家やらを配置してひとつの空間ができあがってゆくという形です。

こうなると空間の中の世界観の統一性はそこなわれる恐れはありますが、大規模な空間が
短期間で構築されてゆく期待もあると思いました。

「ポリゴンウォーク」ならではの魅力を作ってゆく上では、ひとつの方向性として検討
してもよいのかなと考えています。

ワールド画面にコメント履歴を追加

3D画面内のコメントだけだと視認性が悪いため、3D画面下にコメントエリアを追加。

最初は空間の広がりを感じるために実際に近くにいる人のコメントしか見れない仕様としていましたが、
これだと会話が非常にしづらいため改善しました。

コメントは非ログイン画面でも見れるようにしました。

チャットが面倒な方はスカイプ等で音声チャットしながら空間内を一緒に歩いてみるといった
利用方法も面白いかもしれません。

オンラインゲームなんかではスカイプと併用してプレイする方なんかもいらっしゃいますもんね。

「ポリゴンウォーク」ではスカイプIDを会員情報編集画面に入力するとアバターにスカイプアイコンが
表示され、クリックでコールできるようにしています。

3D仮想空間でのコミュニケーションをお楽しみください。

オンラインゲームのシステム案

「ポリゴンウォーク」からだいぶ外れてしまうが、前回の記事で書いたオンラインゲームにおけるプレイヤー間のパラメータ干渉についてもう少し考えてみた。

オンラインゲーム内の様々なオブジェクトを外部からアクセスできないパラメータを持つインスタンスと考えた場合に、そのオブジェクトを支配するというのは、そのオブジェクトの隠ぺいされたパラメータを制御するメソッドを自在に操るアクセス権を持つということとも考えられないだろうか。

その支配者は、キャラクター含む世界内のオブジェクトを自由自在に編集できる。

例えば、その支配者はフィールド上に生えた木というオブジェクトから葉をなくすこともできれば、お気に入りの場所に城を建てることもできる、また、出会ったプレイヤーの姿をネズミに変えてしまうことさえもできるのだ。

ネズミは移動はできるがもはや会話をすることはできない。

そのネズミを見た人はそれがプレイヤーだとは思わないかもしれない。

そのオブジェクトへのアクセス権とは、まるで「ゲド戦記」における「真の名前」、また「指輪物語」における「指輪」のようなものである。

この「オブジェクト」へのアクセス権の争奪戦をテーマにしたオンラインゲームがあっても面白いかもしれない。

非常に過激な仕組みでユーザー間の争いが絶えないかもしれないが、数々のドラマが発生するだろう。

例えば、アクセス権の鍵となるものを「指輪物語」の「指輪」のようなものに託すとすれば、その所有をめぐって善と悪が対立する構図になるだろう。

善き人が指輪を持てば平和な世界になるが、悪しき人が指輪を持てば好き放題にやるわけだ。

あるプレイヤーは木に変えられひとつの場所から動けなくなり、通りかかるプレイヤーを無言で眺める。
できることと言えばその葉を少し揺らすことくらいだろうか。

木に変えられてしまったプレイヤーはたまったものじゃないがそれもひとつのドラマを生む要素だろう。
もしかしたら通りかかった人が気づいて魔法を解いてくれるかもしれない。

もしくは勇者が現れて支配者から指輪を奪い、世界にかけられた魔法をすべて解いてくれるかもしれない。
それが明日なのか1年後なのかはわからないが・・・。

しかしそうやって偶然に与えられた不公平な生を積極的に生きるということはまさに人生である。

あるプレイヤーは支配者に小鳥に変えられもはや喋ることもできず自分の境遇に嘆く。
しかしあるとき空を飛べることで他のプレイヤーには絶対にできない自分の役割に気付くかもしれない。

これは決められたストーリーを手順通りに進んでゆく従来のスタイルのゲームではなく、プレイヤーが与えられた世界の中で問題を発生させ、また、それを解決してゆくゲームである。

ある意味、みんなが勇者ではなくそれぞれが与えられた役割を演じるという点では本当のロールプレイングなのかもしれない。

現実的にはすべての人が同じクオリティで楽しめないゲームの商品化は苦情だらけになるのかもしれないが、もしこんなオンラインゲームがあるなら一度遊んでみたい気がする。

私はエンターテイメントというのは単なる暇潰しではなく、何か人生について新しい学びがあるものだと思う。

そういった点ではこの仕組みはかつてないエンターテイメントになる気もしないではない。

私はネズミなりに世界に貢献する方法を見いだすことを楽しめるのではないかと考える。

パラメータ作成機能なんてあったらいろいろ出来るかも

おそらく「ポリゴンウォーク」でここまでゲームに特化した機能は入れることはないとは思うが、こういった機能があったら遊びが広がりそうだなと思ったのでメモ。

プロジェクト側で独自に使用するパラメータを好きに設定できるようにする。

例えば、RPG空間のプロジェクトで言えば制作者は以下のパラメータを設定する。

・体力
・攻撃力
・防御力

既存のイベント機能のアクションには、各パラメータに対する増減をさせられる機能を追加。

これによって泥の沼に入ったときには体力を消耗させるなんていうことも可能。

あとは、マップ(環境側)がパラメータに影響を与える仕組みがあってもいい。

例えば冬山のマップには「気温」というパラメータがあり、この気温がユーザーのパラメータに影響する。

「防寒服」というアイテムを所持していればこの影響を受けないようにするといったものだ。

こういう仕組みがあれば制作者サイドがいろいろなパラメータを生み出し、独自のゲームを作れるサービスになるかもしれない。

他には、プロジェクト内であるアイテムを持っているユーザーが他のユーザーのパラメータに干渉できるといった仕組みもちょっと面白いかもしれない。

指輪物語じゃないけれどある指輪を持っているユーザーがそのプロジェクト内の世界を支配する。

ある人はその支配者となったユーザーに樹木に変えられてしまう。

樹木となったユーザーはもはやそこから動くことができず、その魔法を解いてくれる人を待つばかりだ。

こういった仕組みができてくると、ひとつのアイテムをめぐってユーザーが自然発生的にドラマを織りなすような場ができあがるかもしれない。

「ポリゴンウォーク」で友達同士で住むマンションのような空間を作る

ひとつあったら面白いかもなあと思った空間案。

友達同士で暮らすマンションのような空間があってもいいかもしれない。

例えば、101号室にはAさんの部屋があって、102号室にはBさんの部屋がある。

これは「ポリゴンウォーク」のイベント機能+アイテムコードを使ったら実現可能。

■プロジェクト構成…

まずクローズドの空間にするのであればプロジェクトの公開設定は非公開のままにしておく。

そうすればプロジェクトがフロント画面にプロジェクトが表示されることはないがURLに直接アクセスすれば空間に入ることができる。

■マップ構成…

マンションのマップ
├ 101号室のマップ
├ 102号室のマップ
├ 103号室のマップ
├ 104号室のマップ
└ 105号室のマップ

こんな感じで各部屋をそれぞれマップとして登録しておく。

■アイテム構成…

101号室の鍵
102号室の鍵
103号室の鍵
104号室の鍵
105号室の鍵

それぞれのアイテムにアイテムコードを設定。

■イベント構成…

101号室のドア
102号室のドア
103号室のドア
104号室のドア
105号室のドア

それぞれ部屋の鍵を所持していた場合のみ指定の部屋のマップへ移動させる。
※この際使用時にアイテムを減算しない設定にしておく。

このような構成で友達にそれぞれの部屋の鍵のアイテムコードを知らせる。
友達はプロジェクトのアイテムコード入力画面から指定の部屋の鍵アイテムを入手する。

これによって以降その友達鍵を使って自分の部屋に入ることができる。

ただ、こういった空間を考えた場合にいくつか欲しい機能がある。

1) 開始マップを保持できる機能

次回プロジェクトに入った場合に自分の部屋から始めたい。

2) 特定の人を指定のマップに同伴させる機能

友達を部屋に呼ぶとき、友達は鍵を持っていなくても一緒に入室できるようにする。

3) 指定のアイテムがなければ各マップ空間に直接アクセス禁止にできる機能

現状はマップにURLを直接入れれば無条件でそのマップに入ることができる。

但しクローズドのマップを意識した場合には指定のアイテムやイベントの条件を判定してアクセスを制御する仕組みが必要になりそう。

4) 他プロジェクトのマップを連携できるようにする

現状はひとつのプロジェクト内において同一プロジェクト上のマップしか登録はできない。

ただ、自分の部屋を自分でカスタマイズしたい場合に第三者のプロジェクトをいじってもらわないといけないのは不便だ。

であれば自分が制作したマップを他プロジェクトの管理人に設定してもらって部屋の中の編集については自分で変更できる仕組みにすれば便利かもしれない。

こういった機能があれば、プロジェクトの中に自分の部屋を持ち、お互いの部屋を行ったり来たりするのを楽しむことができる空間作成も可能になる。