なたで日記

いろいろな思ったこと書きますヽ(^▽^ゞ) by natade

Archive for the ‘3D’ Category

セカンドライフのプリムの当たり判定の検証

with one comment


こんにちは!

昨日から引き続き、「セカンドライフ技術系 Advent Calendar 2016」です!

すみません。
昨日の記事は、役に立つ情報もあったかもしれませんが、
今回は、テクニック系と違い、前々から気になっていたことを検証する……といった内容となります。
なんかすごいの来る!と期待していた方はスミマセン。(いないと思われますが)

というわけで、

あんまり面白いものではないかもしれませんが、
調査結果の報告というわけで、話していきます……。


はじめに

昨年に、当たり判定の記事を書きました。
セカンドライフでメッシュに物理形状を設定しよう1

今回は、その記事のさらに「実像の種類」について気になったことを確認していきたいと思います。
最初に少し解説しますが、より理解を深めたい方は前回の記事から読むことをお勧めします。

「実像の種類」というのはオブジェクトの設定から選べるものです。
実像というのは、当たり判定用に用いるオブジェクトです。

gui_jituzo_1 → gui_jituzo_2

ここで実像を「なし」「プリム」「凸状の外殻構造」の3種類選べます。
「なし」にした場合は、当たり判定用のオブジェクトを用意しないということになります。

ここで「プリム」「凸状の外殻構造」の違いについて説明するために、
3次元だと書きにくいので、2次元で考えたいと思います。

atari_hazimeni_1
2枚の壁が90度の垂直であることとします。

atari_hazimeni_2
実像の種類を「凸状の外殻構造」にすると、
黄色の囲んだ部分のように当たり判定が生まれます。
※中身すべてにすべて当たり判定を持つことになります。

atari_hazimeni_3
実像の種類を「プリム」にすると、
そのプリムそのものが1枚の壁のように当たり判定を持ちます。
※中身というものは存在しません。


実像の種類「プリム」の疑問

ここで、私の中では素朴な疑問が生まれました。
当たり判定の計算方法により、アバターが透けることがないのかということです。

たまーに、なぜかよくわからないですが、壁の中に入って閉じ込められることありませんか。
それが、このこの設定によるものなのかなーと、疑問に思ったわけです。

セカンドライフの実際の当たり判定のアルゴリズムについては知らないので少し、推測した話となります。
まず、当たり判定といえば、レイと3角ポリゴンとの衝突の検出※が有名です。
そこで、これをまず使用していると仮定します。
(※アルゴリズム、計算方法については、「はじめての3Dゲーム開発」)

そして、もしこのようなアルゴリズムを使って単純に実装している場合、
つまり、1本のレイを飛ばすような当たり判定を使っているのであれば、
次のような現象が起きるのでは……と思いつきます。

atari_nazo_1
壁1と壁2が90度で交わっているとします。

atari_nazo_2
ここで Ray1 を飛ばします。
つまりアバターが壁1に向かって斜めに突進した感じです。

atari_nazo_3
Ray1は、壁1と壁2の2種類に当たり判定チェックを行います。
その結果、壁1との衝突を検知することができます。
そして、めり込まないように、斜めの成分だけを抜き出します。

atari_nazo_4
次に、壁1との衝突点からRay2を飛ばします。
ここで、問題なのですが、Ray2が壁2との当たり判定を正しく行えるかという謎です。

普通は壁1と壁2は接続されているはずなので、
Ray2は壁2と衝突するはずですが、
実際は壁1と壁2は、別のポリゴンとして管理しており、
これらのポリゴンの位置は、実数による誤差の関係上、微妙に隙間が空いているはずなのです。

1本のレイを使用した単純な当たり判定ならば、上記のような問題は起きるのですが、
もちろん、レイを複数とばす。あるいは、そもそも球とポリゴンとの当たり判定を使用するなど
いろいろな工夫を行っていれば、このようなことになりません。
なので、有名なセカンドライフであれば、すり抜けることはおそらくないはずですが。

というわけで、前置きがすごく長くはありましたが、
当たり判定用のプリム=壁のプリムを作成して、
衝突した場合どうなるか検証するのが、この記事の目的となります!


すり抜けの検証

次のような壁(1辺が10m)を作成して、
atari_test_1

下記のように10分間壁に向かって当たり続けて、すりぬけるか確認します。
atari_test2

ビューアは2種類で確認しました。
公式ビューア(v4.1.2.321518)
Catznipビューア(R10.0)の両方で確認しました。

元となるメッシュデータについては、頂点を共有しないメッシュと、
共有するメッシュの2種類について確認。

また、当たり判定のデータは、dae情報で直接設定する方法と、
表示用メッシュから自動生成する方法の2種類を試しました。

それで早速、結果なのですが、

.
..

なんと

.
..

なんとッ!

.
..

すり抜けませんでした!

まあ、そうですよねー。
期待していた方?はスミマセンでした。

ちなみにさらに検証していったのですが、
隙間がわずかにあってもすり抜けませんでした。

どの程度の隙間からすり抜けるようになるのか気になる点ではありますが、
まずは、接続された面であれば、当たり判定を「プリム」にしていても
問題ないということは確実ということが分かり、安心しました。

たまーにすり抜けるのは、
たぶん、幽霊の仕業か本当に実像的にスキマがあるのでしょう。きっと……


一応、これで2日間にわたる記事は終わりです。
ですが!まだまだ12月が始まったばかりです!

ではみなさま!
セカンドライフ技術系 Advent Calendar 2016」を楽しんでいきましょう!

.
..

.
..

.
..

オマケ

私は、Advent Calendar以外にも普段気が向いたときに、セカンドライフ系の記事をかいております。
その中で、私としてヨイデキな記事をいくつか紹介します。(宣伝デス)

2016年4月21日 セカンドライフのスカイボックスに太陽の光を!
シンプルながらも、知っておくと良いテクニック!

2014年12月29日 セカンドライフの関数逆引きメモ
セカンドライフにはどういった機能があるのか、逆引きをみて一通り覚えておこう!

2014年12月12日 セカンドライフでアニメーション
セカンドライフでアニメーションを作る方法!

Written by なたで

2016年12月2日 at 00:00

カテゴリー: 3D, memo, program

Tagged with , ,

GeForce GTX の発色を鮮やかにする方法

leave a comment »


えNVIDEA GeForce GTX のディスプレイ設定をいじって、鮮やかな画面にする方法を紹介します。

NVIDEA コントロールパネルを開いて、ディスプレイのデスクトップカラー設定の調整を開きます。
nvidea_control_panel_1

ここで、コントラストと、デジタルバイブランスという設定をいじります。

コントラストは明暗の差。デジタルバイブランスは彩度の設定です。

nvidea_control_panel_2
nvidea_control_panel_3

コントラストとデジタルバイブランスを両方とも+50%→+55%にするだけで、かなり鮮やかな画面になります。

ゲームするときは、あえてすこしいじって遊ぶと、より世界が鮮明になり
また違った楽しみ方ができるとおもいます!

Written by なたで

2016年9月26日 at 22:39

カテゴリー: 3D, memo

Tagged with , ,

HTC Vive と PSVR を体験してきました!

leave a comment »


先々月から Oculus Rift CV1 が届き、すでに色々と VR 体験しているのですが、
今回はさらに、HTC VivePSVR を体験してきました!

そこで体験したことについてレビューしたいと思います!
……ただし、VR体験はネタバレすると驚きがなくなるので、いつも通りやんわり解説します。

HTC Vive は、お台場ダイバーシティで開催中の「VR ZONE Project i Can ※1」
PSVR は、同じくお台場の東京ジョイポリスで開催中の「PlayStation®VR 特別体験会 ※2」です!
先に、VR ZONE で Vive 体験してから、東京ジョイポリスで PSVR 体験へ行ってきました。

※1 2016/4/15 ~ 2016/10 中旬 まで開催
※1 2016/6/1 ~ 2016/6/30 まで開催…本記事を書いている現在すでに終了しています……。


VR ZONE

先ほどお伝えしたように、VR ZONE という場所で体験してきました。
ここは事前予約制となっております。平日であれば数日前でも予約できる可能性があります。

午前10時から11時30分までの部に参加してきました

VR_IMG_3750

中に入ると、バナコインのカードを作る必要があります。
カードを購入してチャージします!

VR_IMG_3753

ところで、先に説明しますが、今回体験した HTC Vive なのですが、
VR用のHMDとはいっても、それ以外にすべて振動する椅子や、
VR用のボードなどほかのVRアイテムとを合わせた体験となります……。
なので、Vive 自体の体験というよりは、それ以外のシステムを合わせた体験となります!

まずはアトラクション自体の解説をして、記事の最後にHTC Vive の感想を書きます。


高所恐怖SHOW

真っ先に体験したアトラクションです。

VR_IMG_3758

HMD以外に、VR手袋とVRシューズを装着します。
これをつけることで、VR空間内に自分の手と足が表示されるようになります。

詳しい内容に関してですが、やはりネタバレにつながりやすいのでいいません。
写真にある通りなのですが、カイジのようにビルの上にある細い板を歩きます。

ビルの上からスタートということではなく、入口からスタートすることで、
自分の体がだんだんと上に登っていき、より没入感を味わえる仕組みとなっていました。
かなり怖く、ふらふらしてしまいましたが、かなり楽しめました。

私はVR酔いしやすい体質ですが、このゲームについては全くVR酔いはしませんでした。
このアトラクションはコントローラなしのアトラクションであり、
全て自分で行動するというスタイルなのです。
自分から歩いたり行動することで、リアルとVR空間がマッチして酔わないのかなと思われます。


脱出病棟Ω

次はこれ!

VR_IMG_3761

このゲームは2~4人用のゲームとなります。

VR_IMG_3763

このボックスの中に2つ椅子があり、ボックス自体は2台あります。(2×2で4人まで同時プレイ)
で、これなのですが、みんな叫び声をあげていて、
他のアトラクションとは異質な雰囲気をかもしだしていました。

体験するときは、一人では体験できないため隣にいた方と一緒にプレイ!
で、内容ですがこれもネタバレになるため深くは言えませんが、
上の写真にあったように、ヤバい病院内を車椅子に座って進むという謎の設定となります。
ホラーはホラーなのですが、スプラッタ表現やビックリ表現もあるので注意が必要。

ゲームとしては、コントローラーがあり、前へ行くか後ろへ進むかとなります。
また、頭の向きによってボタンを選択したりするのもありますが、極力操作の種類を抑えた感じです。
シンプルな操作感は、とてもよいです!

前と後ろしか行かないので、決められたレールを進むわけになるのですが、
固定レールは曲がったりすることもあるので、少し酔いそうなときもありました。
でも、本当に少し酔ったぐらいで、ふらふらする感じにはなりませんので、大丈夫です!
リアルの椅子が、VR内とマッチしているのが酔いにくい設計の秘訣なんでしょうね。

1つのボックス内で二人で近距離でプレイするのですが、Vive は干渉しやすいと
聞いたことがあったので、その点、うまーくやっているなと思いました。
このアトラクションは、ルームスケールではないので実は干渉しにくいなど、
何かしらテクニックがあるのでしょうね。


ARGYLE SHIFT アーガイル シフト

つぎはこれ……!

当初はやる予定はなかったのですが、
世界観やシナリオは「攻殻機動隊」シリーズのProduction I.Gということだったので

VR_IMG_3766

こんな感じで、4つ椅子が並んでます。

VR_IMG_3767

椅子には、ロボット操作できそうなコントローラもあります!

VR_IMG_3768

ストーリーは、ロボットのパイロットとなること。
しかも、なんと最高にかわいい萌えアシスタント付き!

私は、ガンダムとかロボット物が正直苦手で、あんまり興味もなかったのですが、
これは、全然違う!プレイしてほんとに楽しかったです!

椅子とコントローラという点で、脱出病棟と似ていますが、体験が全く違います。
空をスーッというロボットに乗って飛べるあの感覚を味わえるのです。
アシスタントがしゃべりかけてくるという点で大好きなスターフォックス64に似ています。

とにかく、他のアトラクションはリアルでもやろうと思えばできそうなアトラクションですが、
これはロボットという絶対不可能なSF要素を体験できるので

ぜひ体験するべきです!

私が今回体験した中で、一番よかったものでした!


SKI RODEO

最後はこれです。
時間的に、並んだりすると4つぐらい体験できると思います。

VR_IMG_3772

このように、床にスキー用の板と、前に扇風機があります。

VR_IMG_3775

内容ですが、かなりリアルです。
自分のはいた息が、白く見えるのもまた没入感がでます。
速度を上げると前から風がきますし、
ジャンプすれば、ジャンプしている間だけ床のボードが振動しないので、
本当に空中に浮いているような体験ができます。

全体の内容としては、スキーでコースを滑っていくのですが、
かなり難易度が高いと思いました。

ただ、何回かプレイすれば、おそらくトラブルなく滑れるようになり、
爽快感とかがでるのではとおもいました。

ちなみに、これは少し酔いました。
かなりの速度で滑走するので、VR酔いというよりは、
画面内の情報量が多いことによる酔い方のような感じでした。

VR体験を立て続けに体験したり、
何度も転落したのも、酔ってしまった原因かもしれませんが。

とりあえず、これでVR ZONE での体験話が終わりです。記事の最後にVR自体の感想があります。


PSVR 特別体験会

予約は不必要で、無料で体験できます。
東京ジョイポリス内にあるため、入場券を買って入る必要があります。

VR_IMG_3778

3階に行くとブースがありました。
VR_IMG_3792

ここでは、3種類のゲームが体験できます。

・THE PLAYROOM VR
・The London Heist (仮)
・The Deep (仮)

今回、私は The Deep (仮) を体験してきました。

「THE PLAYROOM VR」に関しては、1人がPSVRをつけてボスを演じて、
3人がボスを倒すというもので、PSVRをつけることができない可能性があったため。

「The London Heist (仮)」は、単純に3時間待ちぐらいだったので諦めました。


The Deep (仮)

VR_IMG_3791

家庭用ゲーム機で発売するソフトだと思われるため、
VR ZONE のようなVR用HMD以外の装置というものはありません。
上の写真では、テレビもありますが、HMDを被っているので見ていません。
テレビの上のセンサが、おそらく頭の位置などを調査していると思われます。

立つか椅子に座って遊べるゲーム。今回は椅子に座って体験。
ゲームの内容としては、深海に潜っていき、綺麗な魚や深海に落ちているものを見たりする感じです。
詳しい内容はネタバレに繋がるので、これ以上は説明しません……!

……VRZONEの体験の後からか、すこし地味な写真となってしまった。


HMDの感想

おまちかねの感想です。

HTC Vive

付け心地、映像の質や、画面の広さは Oculus Rift CV1とそんなに変わらない印象でした。
Oculus Rift は鼻の部分から、外の光が漏れやすいというデメリット(外を確認できるメリット)が
あり、Vive は漏れないと聞いていたのですが、これもわずかですが漏れていました。
ただ、どちらにしてもゲーム中は夢中になり、特に気になる感じはありませんでした。
明るいゲームが多かったので、外が明るくても気にならないのもあったかもしれません。

HTC Vive といえば、Oculus Rift と違ってルームスケールが体験できるというものなのですが、
今回でいえば、高所恐怖SHOWが、HTC Vive の本領発揮という感じでした。
自分で歩いて、世界を動き回れるのはやはりタノシイ。
ただ、高所恐怖SHOWについては、係員がついており、右回りや左回りを指定していたので、
ぐるぐる回ると当たり前ですが、パソコンからの線が絡まったりする問題があるのでしょうね。
無線の低レンテンシHMDとか、そういうのがいつか発売するといいですね。

欠点としては、結構重たいです。
ちょっとソースは見つかりませんでしたが、おそらく、ヘッドホン付きのCV1より、
ヘッドホンなしのViveの時点で、Viveのほうが重たいのでは、と思いました。
さらにヘッドホンをつけるので、よりズッシリときます。
VR自体がかなり目に負担がかかるので、長くプレイするということはないとは思いますが、
長時間プレイし続けるのは、ややきついのではと思いました。

PSVR

CV1とViveを体験しましたが、PSVRは付け心地が別次元で素晴らしいです。
CV1とViveに関しては、目を覆う部分が光を通さないのと、しめつけの2つを兼ねているのに対して、
PSVRは、おでこを使って締め付けをして、光を通さないために目を覆う部分を覆っているのが大きいです。
本当にゴーグルを付けているのかな?という感覚でした。

映像に関してですが、これは聞いてはいたのですが、素晴らしかったです。
というのも、まったく液晶のドット特有の線がないからです。
液晶とか虫眼鏡で拡大すると分かるように、CV1とViveはドットとドットの間に線がでるのですが、
PSVRは、全く線が見えなかったので、本当に画面を見ているという感覚がありませんでした。

欠点ですが、重さ的にはCV1と恐らく変わらない感じなのでしたが、
Viveと同様にヘッドホンをつける必要があるという点はやはり面倒です。
ヘッドホンとHMDを合計すると、CV1より重たくなります。

他にはドットが見えないことによって、全体がぼやけた感じがする問題です。
CV1/Viveに比べて、解像度が低いのもあるかとは思いますが、
全くドットごとの線が見えないために、逆に全体がぼやけて感じる印象がありました。
ドットが見えていれば、ドットごとではくっきりしてるので、ぼやけた印象にはならないと思います。
例えるなら水中ゴーグルに、細かい傷をつけて、目にはめているという感じです。


……以上!

余談

今回、VR ZONEでは、バナポイントを使ってアトラクションを体験できるのですが、
VR体験終了時に余っていたポイントは現金に戻せません。
ということで、今回は、余ったポイントで VR ZONE で売っている
VR用HMDの目を覆うのを買いました。

↓VR ZONE 入場時にもらえるものは、紙の素材で破けるタイプなのですが、
VR_IMG_3825

↓買ったものは、使い捨て用とはいってもやや丈夫な素材でした。
VR_IMG_3826

もし、家にVR用のHMDがある方は、友達が来た時のために
買っておくといいかもしれませんね。


関連記事

Oculus CV1 で今までプレイしたソフトの感想

OculusRift CV1 が届いた(予約~FedEx配送~セットアップ)

Written by なたで

2016年7月3日 at 00:00

カテゴリー: 3D, memo, review

Tagged with , ,

Oculus CV1 で今までプレイしたソフトの感想

leave a comment »


OculusRift CV1が届き、いろいろと遊びましたので、レビュー!
と、その前にプレイしているうちに私自信に苦手なジャンルがあることがわかり、
それについては、正しく評価できない可能性があるので、鵜呑みにせずに、まあ一つの参考にしてください。

ちなみにそのジャンルというのが、
いえ……ジャンルというよりは、酔うんです!
VR酔いなんですよね。

私がプレイしていて酔いやすいものは、
そう!視点が自動で移動するタイプなのです……。
これは、なんで起きるのでしょうね。
解決策があればいいのですが。

ネットで調べると、あまりに視界で現実に近い体験をする一方で、
身体の向きや重力などは、ゲーム内と同期していないため、
その違いが酔いを発生させるなど書いてありました。

というわけで、このレビューも私のような酔いやすい人向けレビューとなってしまいます。
そのため、よくあるSTGなど、プレイしないはずなので、レビューは恐らくないです。
あとレビューとはいっても、ネタバレがないやんわりレビューです。
VRの体験コンテンツは、あらかじめこういうことが起きるとか言ってしまうと驚きが減ってしまいます。

ところで、すべて書き終わってから分かったのですが、VRゲームはいくつかタイプが分かれていると思います。
A. 世界の外で、第3者となって眺めるゲーム(Lucky’s Tale、The Rose And I)
B. 世界の中で、第3者となって眺めるゲーム(Sketchfab VR)
C. 自分が物語の中に入るゲームで、歩くのにコントローラが必要(iOMoon)
D. 自分が物語の中に入るゲームで、自分の歩く範囲で収まる(Oculus Dreamdeck)
このなかで、下の方ほど、没入度、体験性が深まっていくので、
VRHMDの真価を楽しむことができると私の中では思っています。

今回、VR体験度という指標を作りました。
自分がこの世界に入り込めて、しかもうわーってなるほど点数高いです。
面白いとは別次元なので、これが低いからといっても面白いものはありますので。
なお、酔いやすい私が酔うと★が減ります。テテーン!

※ここに書いてあるものは、逐次増えていく可能性があります。


Oculus Home

Henry

henry

値段:無料
ジャンル:ムービー
VR体験姿勢:床に座って体験
VR体験度:★★★☆☆☆
感想:部屋の中にいて、周りで起こることを体験していきます。
キャラクターはとても可愛く、部屋のつくりもこだわっており、おすすめ。


INVASION!

invasion

値段:無料
ジャンル:ムービー
VR体験姿勢:立って体験
VR体験度:★★★☆☆☆
感想:これもまた体験型。氷の上でかわいいうさぎと出会えます。


Lost

lost

値段:無料
ジャンル:ムービー
VR体験姿勢:立って体験
VR体験度:★★★★★☆
感想:林の中で、奇妙な物体に出会います。
体験型はタノシイ。


Lucky’s Tale
luckytale

値段:無料
ジャンル:アクションゲーム
VR体験姿勢:なし
VR体験度:★☆☆☆☆☆
感想:普通の3Dアクションゲームとなります。
3Dアクションゲームのゲームとしては完成度が高く、
またVRに酔いにくようなゲーム設計にはなっていると思います。
辛口になりますが、カメラがキャラに合わせて自動で動くだけであり、
VRでやる必要があるのかは疑問に感じるゲーム。ゲーム的には面白いですよ!


Oculus Dreamdeck
oculusdreamdeck

値段:無料
ジャンル:ムービー
VR体験姿勢:立って体験。座ってもよし!
VR体験度:★★★★★★
感想:OculusRift の本領発揮する体験ムービー集です。
とにかく、没入感がすばらしく、出てくるキャラクター、ステージに驚かされます。


Showdown
showdown

値段:無料
ジャンル:ムービー
VR体験姿勢:立って体験
VR体験度:★★★★★★
感想:戦火に巻き込まれます。


Sketchfab VR
sketchfab

値段:無料
ジャンル:静画・3Dモデル
VR体験姿勢:立って体験
VR体験度:★★☆☆☆☆
感想:体験というよりは、3Dモデルを見たりするようなものです。
立って体験はできますが、美術館などで物をみているだけで、没入感は少なめ。


The Rose And I
thrroseandi

値段:無料
ジャンル:ムービー?
VR体験姿勢:立って体験
VR体験度:★★☆☆☆☆
感想:タイトルには書いていないですが、『星の王子さま』となります。
2016年3月に映画『リトルプリンス 星の王子さまと私』が上映されまして、おすすめ。
それで、脱線しましたが、これは知っている方なら見ても楽しめると思います。
ただ、Sketchfab VRのように、モデルや世界を上から眺めている感系なので、体験としては弱いです。


Senza Peso

senza_peso

値段:無料
ジャンル:ムービー
VR体験姿勢:座って体験
VR体験度:★★★★★☆
感想:
テーマパークのアトラクションのように船に乗って進んでいきます。
音楽、映像が凝っていまして、次は何がでるんだろうとワクワクドキドキします!
Steam版もあります。


Eagle Flight
eagle_flight eagle_flight_ss

値段:3990円 (Oculus版), (PSVR版), (Steam版)
ジャンル:アクションゲーム
VR体験姿勢:座って体験
VR体験度:★★★★★★
感想:
自分がタカになって、パリの上空を飛び回れます。
今までゲームは操作が直観的ではなく酔うものが多かったのですが、このイーグルフライトは、首を傾けて移動が主となっており、あとは速度アップ、速度遅くしかなく、非常に操作が直観的かつシンプルで全く酔いません。
パリの景色も非常に綺麗で、建物の隙間を飛び回ったり、好きな場所に行けて、自由度も高いです。
ちなみに私はゲーム中、前に扇風機を置いてプレイしてるのですが、より没入感が出て良い感じです!

ゲームは、ストーリーモードがあり、ストーリーモードは一人で楽しむこともできます。
また、ネット対戦モードもあり、3 vs 3 (まだ遊んでいない)となります。

※2016年10月18日にOculus版、2016年11月9日にPSVR版、2016年12月20日にHTC Vive 版(Steam版) が出ますので、他のVRでも楽しめます!


SteamVR

iOMoon

iomoon

値段:$14.99 USD(開発中の値段)
ジャンル:アクションゲーム
VR体験姿勢:座って体験/立って体験
VR体験度:★★★★☆☆
ロボットに乗って星を探索します。
動かすときにコントローラーがいるので、酔いやすい人は注意。
前後を進むのはいいのですが、右左への回転が厳しいです。
移動方法に、ポイントワープ方法/30度の離散回転/連続回転が選べるようになっており、
酔いやすい方は、ワープ方法を選ぶと酔いにくくなります。
ですが、おそらく連続回転をもとに設計しているので、遊びにくくなってしまいます。
あと、溶岩がながれます。


The Visitor

the_visitor

値段:$0.99 USD
ジャンル:ホラー
VR体験姿勢:座って体験(できればベッドの上に座りながら体験)
VR体験度:★★★★★★★
危険です!本当に怖くてプレイできません!
絶対に、夜中にやらないでください。大声で叫んでしまいますので。


Virual Desktop

virual_desktop

値段:$14.99 USD
ジャンル:ツール
VR体験姿勢:座って体験
VR体験度:★★☆☆☆☆
VR上でパソコンの操作が可能となります。
ただ、VRは体力を消耗するので常用は難しいかと思われます。
HMDを被っているとキーボードやマウスは厳しいので、
映画とかを見る場合はいいかもしれません。


その他

SecondLife (CtrlAltStudio)

CtrlAltStudio

値段:無料。通貨レート 100リンデンドル=約50円。プレミアム会員
ジャンル:メタバース
VR体験姿勢:立ったり、座ったり
VR体験度:★★★★★★
※セカンドライフはかなり重たいのでGTX970でも、画質設定を軽くしないとカクカクします。

SecondLife というのは、自分の好きなアバターで、自分の好きな土地を買って、
自分の好きな家を建てて、自分の好きな服を着れて、好き場所へいっておしゃべりするツール。
スクリプトが欠けるなら世界の中でプログラムを作れますし、
絵を描けるなら自分の家に絵を飾ることもできて、
さらに3Dモデリングができるのであれば好きな物体も作れる、
それらは自分でお店を作って売ったり、逆に買ったりもできる。
そんな自分の好きな世界に入ることができるのがセカンドライフです。
詳しくは私のブログを見てもいいかも!記事がたくさんあるので!

そんなセカンドライフですが、セカンドライフの世界を覗くためのツールがビューアというものです。
このビューアのソースコードは公開されており、いろいろな人が作ったビューアがあります。
そんな中で、CV1 VRに対応したビューア(1.2.6.43412 Alpha, 18 Jul 2016)が7月18日に公開されました。
CtrlAltStudio と呼ばれるビューアです。

このCtrlAltStudioは、もともと数年前からDK2などに対応していたのですが、
ようやく2016年の7月18日にアルファ版として、CV1に対応したわけです。

もともとは、公式ビューアもCV1に対応させる予定でしたが、
まだ完成度が低く、現在は公開していません。
※公式ビューアは、FPSと解像度が異常に低く、マウスカーソルが消える不具合などがあった。

20160717_4
自分の家で、寝っ転がりながら月をみるということも……

ただ、難点としまして、HUDがつかえないということです。
HUDというのは、3D画面とは別にボタン集やチャット欄などです。
そのため、HUDを使用中は通常モードにして、
歩くときにVRモードに切り替えするという手順になると思います。

また、セカンドライフを知らない方に言っておきますが、
セカンドライフにあるものは全てユーザーが作ったものとなります。
従ってクオリティが、ユーザーによって左右されるため、
どこかでググった画像見て、セカンドライフしょぼいって思うかもしれませんが、
それは、クオリティが低いものを映したか、だいぶ昔のSSとなるため、
実際に体験してみることをお勧めします。

セカンドライフをしたことがない方は、VRモードを楽しむ前に、
セカンドライフの世界や操作に慣れておくといいでしょう。
AKIBA SIM という場所など、初心者用のカフェがあるので、
そういうところへ行って、いろいろ聞いたり、喋りまくりましょう。

自分のキャラクターは、日本人に合いにくいリアルなキャラが多いので、
多くの人は、お店で買った日本人好みのアバターを使う人が多いです。
アバターはお金を出さないと買えないものも多いですが、
どれも安い(高くてもラーメン一杯分)のでそんなに問題はありません。


vorpX

値段:$39.99 USD
ジャンル:ツール
VR体験姿勢:―
VR体験度:―
VR用HMDに対応していないソフトを対応させるツール。
vorpX対応用のソフトなら、(おそらく)立体視可能となります。
ここにないゲームの場合は、たとえばOpenGL制であれば、OpenGL用のQuakeをプロファイルに選べば
立体視で遊べる可能性もありますが、かなり厳しいものとなるため、
リストにないゲームはプレイできないと考えていいと思います。

なお、立体視で遊べない場合は、立体視にならず両目でゲームが遊べる感じとなります。
立体視にならないため、VRでやるメリットは薄いです……。
リストに書いてあるゲームだとしても、もともとVR用に設計していたわけではないので、
心地よくプレイできるとは限らないので注意が必要です。

あと、椅子に座っている感じで大画面のゲームを遊べるモードがあります。
メインの機能ではないかもしれませんが、オススメです。


MocuMocuDance

値段:2016/6/19時点でフリー
ジャンル:ツール
VR体験姿勢:―
VR体験度:―
MikuMikuDanceという3Dモデルを動かすツールがあります。
そんな、MikuMikuDanceで使用されているモデル、PMX形式を読み込み表示できるツールです。
PMXモデルは、MikuMikuDanceツールでのみしか利用を許可しないものもります。
もし誰かが作ったものを読み込みたい場合は。利用許諾書をしっかり読みましょう。

機能として、おそらく18禁目的なもの(流体演算機能)もありますので注意が必要です。
また、本ツールのマニュアルもしっかり読んだうえで使用してください。本ツールは再配布禁止です。


Written by なたで

2016年6月19日 at 22:53

カテゴリー: 3D, memo, review

Tagged with ,

OculusRift CV1 が届いた(予約~FedEx配送~セットアップ)

leave a comment »


こんにてゃ!

以前から欲しかった OculusRift CV1 が本日 2016/5/14 に届きました。
欲しかった経緯を知りたい物好きな方は、2013年の「プロジェクタが欲しい」を参照してください。
oculus_1
横 45.5cm、奥行き 22.5cm、高さ 38.0cm の段ボールの中に、
上記の横 39.5cm、奥行き 17.0cm、高さ 31.0cm の箱が入ってました。
自宅に宅配ボックスがある方は、入るかどうか参考にしてください。


予約してから届くまで

さて、少し購入時からの経緯について話します。
OculusRift は予約開始が 2016/1/7 1:00 からなのですが、2016/1/7 1:08 に注文できました。
注文時は、住所を英語で設定できたのですが、あとで日本語に自動で変わりました。
そのとき、住所が誤った住所になっていたので修正しようとしたのですが、エラーで修正できず。
その後、サポートに修正できないことを伝えたらシステム直したよ!って連絡が来たので無事変更できました。

注文番号は 613000027XXXXX で、当初は3月末に届く予定でした。
しかし、何か問題があったようで、2016/4/2 に注文は延期と公式発表がありました。
この時点で不手際の送料1万円は無料となったので、まあよかったのかなと思います。
お届け日は、 2016/4/12 に発表され、出荷予定日が 5/2 – 5/12 と判明しました。
oc_1

2ちゃんねるの OculusRift スレッド を覗いていたのですが、
早く届いているという噂がありました。
真相はたしかではありませんが、5/2 – 5/12 の人は、5月初頭に届いたという話です。
私の場合は、4/28 に Order Status が Processing for Shipping にステータスが変わったきり、
予定日を過ぎた 5/7 になってもクレジットカードの引き落としがありませんでした。
HTC Vive でクレジットカードの引き落とし失敗の問題があったため、
すこし、心配となりサポートに連絡をしました。
連絡としては、問題ないよ!発送するよ!ということでした。

5/9 についに発送と引き落としが行われました。
oc_2
注文は、FedEx が配送するため、上の番号を入力することで配送状況がわかります。
FedExの注文サイトでは、お届け予定日が「2016/5/13 ~ 18:00」とあり、
この場合は2016/5/13(金)の日の中で、18:00までに届くという意味です。
18:00に届くというわけではないので注意です。
従って、もし受け取るのであれば、5/13は届くまで家にいる必要があります。

FedEx Tracking を確認すると、特別取扱セクション 平日配達 と書いてありまして
不在の金曜日をのがすと月曜日になるのかなと(月曜日も不在ですが)思ったのですが、
カスタマーサービスに連絡したところ、土曜日の午前中にすることができました。
土曜日などの営業時間外の配達の場合は、配送業者に委託することになります。
今回は日通航空に委託されましたが、西濃運輸もあるらしいです。

カスタマーサービスは、
平日なら 8:00 – 20:00 までフリーダイヤルを利用することができます。
電話がつながると、プッシュホン・サービスとなり、最初はボタンを押す必要があります。
私は 19:00 過ぎに電話をかけたのですが、混み合っており繋がるまで10分間ぐらいかかりました。
繋がらないからといって、電話を切ると、順番がリセットされるので気を付けてください。

FedExの注文サイトのお届け予定日で受け取れないことが分かれば、
お届け予定日の前日までにカスタマーサービスで配達の相談をしたほうがいいかと思います。
なぜなら、相談しなければ結局、お届け予定日で不在となってしまい、FedExも配達損となってしまうからです。
不在となれば、結局再配達で電話をする必要があるため、届日がさらに遅くなってしまいます。

今回、Oculus とは2回サポートで連絡しましたが、両方の対応とも特に問題はありませんでした。
FedEx も今回初体験でした。国内の配送業者と違って電話で基本やり取りというのが斬新でしたが、
無事、配達日を指定できて、土曜日に配達できたので良かったと思います。

長くなりましたが前置きは終わりにしたいと思います。


箱の開封からセットアップ

すでにガジェットニュース的なサイトでも写真が公開されています。

中を開けるとこんな感じです。
oculus_2
かなり丁寧な箱に、綺麗におさまっています。

oculus_3
噂の有線xboxコントローラはこちらに入ってました。
ただ今回は、PS3ワイヤレスコントローラ
ScpServer+ PLANEX Bluetooth USBアダプター で接続しているため、このコントローラーは使いません。

中のものを取り出してからセットアップに入ります。
セットアップ自体は、「Oculus Rift Setup」から
OculusSetup.exeをダウンロードすることから始まります。

セットアップの順序自体は、ITmedia PC USER
「Oculus Rift」をセットアップしてVR世界へ旅立ってみた 』を参考にすればいいですが、
違う個所や注意点があったので書いておきます。

USBケーブルやHDMIケーブルを接続せずにセットアップ実行

注意として、全て未接続の状態でセットアップを進めてください。
セットアップウィザードの途中で、接続してくれとアナウンスがあります。

2本のUSBケーブルについて

今回、センサーカメラと、HMDの本体とで、USB3.0 の接続が2本必要となります。
場合によっては、PCに USB3.0 が 1 つしかない場合もあると思いますが、
USB3.0 ハブを使っても問題ありません。

途中でユーザーアカウントの作成を行う必要がある

進めていくとアカウントでログインしてくれという画面がでます。
ない場合は作りますが、このアカウントを今後 Oculus Home 使用していくことになります。
Oculus Home は、Steamのような感じで、OculusRift 向けのゲームが公開される場です。
また、アカウント同士でフレンド登録することもできるようです。
インストール後に、アカウントで本名をどこまで公開するかなどの設定ができるので、
本名ばれしたくない方は、設定で自分オンリーにしておきましょう。

Oculus Remote が接続できない……?

これは完全に私の不注意なのですが、
ウィザードを進めていくと、Oculus Remote の認識画面になります。
Oculus Remote は電池※のストッパーを抜いて、通電が始まりますが、これだけでは、ペアリングはできません。
ホイールの真ん中の大きなボタンをペアリングできるまで押し続けなければいけません。
なお、ペアリングがもしできなかったとしても、後で設定が可能です。
※電池は CR2032 ですが、最初から入っています。

身長の入力画面について

ここで入力するのは、OculusRiftをつけている最中での身長なので、立って設定する必要があります。
ここで設定することで、「OculusRiftと地面との距離」が分かり、
「OculusRiftとセンサーと距離」、「センサーと地面との距離」も内部で計算されます。

デモが始まらない……?

「Oculus Rift」をセットアップしてVR世界へ旅立ってみた 』では、
> セットアップが終わると白い仮想空間の部屋に誘われ、最後の儀式が始まります。
> といってもこれは純粋なVRデモで、「Oculus DREAMDECK」と呼ばれる
> VR体験チュートリアル用アプリケーションです。
とあり、「Oculus DREAMDECK」が始まるとあるのですが、始まりませんでした。
もしかしたら、わたしが決定ボタンで飛ばしてしまったのかもしれませんが。
というわけで、私の場合なのですが Oculus Home から
「Oculus DREAMDECK」をダウンロードしてインストールしました。
ダウンロードはHMDを被ったままできるのですが、インストールはPC画面で行う必要があるので注意です。


いったんここまでで、第1弾のOculusRift記事は終わりです。

最後に感想をすこしだけ書きます。
Oculus DREAMDECK を体験したのですが本当に世界に入れたみたいでした。
デモ中は、ずっと立って体験していました。
本当に世界に入れたようで、キョロキョロしてたので疲れました。
センサーは机の上に置いていますが、後ろ向いても、
床に座ってもトラッキングされており、疲れた時は座って体験したりもしてました。

ちなみに座って、そのまま後ろにゆっくり倒れて仰向けに寝転がっても大丈夫でした。
あとから分かったのですが、センサーカメラが優秀で、
考慮した位置に配置すればかなり広範囲でも認識するそうです。
CV1のポジショナルトラッキングはルームスケールVRに匹敵。地上約2mにカメラを設置しての追跡テスト

HMDが軽いのもよかったです。
線が一本にまとまっており、ヘッドホンもついているので、取り回しがいいと思います。
何も考えずにインストールができて、OculusRiftを机においてあるときは、
パソコン(これまで使っていたスピーカー)から音が出て
OculusRift をつけているときは、HMD内臓のヘッドホンから音が出るようです。

ゲーム酔いについては、プレイ中は酔っていなくてもあとからくることがあります。
Virtual Desktop」など常時、VR空間の中にいるのは
目の負担となってしまいますので、人によってはかなりキツイのではないかと思います。
1日30分などと、時間を決めて遊んだほうがいいかもしれません。

とりあえず、本当に世界入り込める体験は、文句なしで素晴らしいので、
あとは値段さえ5万円以下に下がってくれば、いいかなと思います。
とはいっても、現段階で3D対応HDプロジェクタさえ、10万前後するのでまだまだ厳しそうです。
さらに、VR空間へのコントローラ(Oculus Touch)がまだ未発売なので、
年内中に発売でき、次は配送時のトラブルなどなければいいなと思います。

Written by なたで

2016年5月14日 at 17:14

カテゴリー: 3D, memo, review

Tagged with , , , ,

セカンドライフで綺麗な水面を作る

leave a comment »


こんにちは!

セカンドライフ技術系 Advent Calendar 2015」の12月13日(日)担当の なたで です!

木曜日の記事(セカンドライフでジャンプ台を作る)に引き続いて…
今日は、セカンドライフで綺麗な水面を作ります。
けっこう長めなので、理由はともかく作りたいという方は、読み飛ばして、
途中に張ってある画像を保存して、テクスチャに使用していってください。


綺麗な波をつくるには・・・?

綺麗な水面を作るために、水の特徴を考えます。
水といえば波があるということです。

次のように2つの波の衝突を考えます

nami001
1つは、右から左へ流れる大きな波。

nami002
もう1つは、左から右へ流れる小さい波。

nami003
この2つが、衝突しても波と波とが重なり合って、消滅するということはありません。

つまり、波を作るためには、何面もの波を重ねると本物のように作ることができます。

よって、次のように作ると良いことが分かります。
「複数の面を重ねるようにおいて、模様に波(水面)のテクスチャを設定して、それぞれ別の方向へ動かす」

ここでさらに、波のテクスチャについて考えていきます。
単純に、波の模様のテクスチャだけを用意するだけでいいのでしょうか。

一度、波を実際に目で見た時を考えてみます。

nami004
波は、うねうねした形をもっており、うねうねに合わせた法線ベクトルがあります。
光は、波に当たっときに、法線を境に反射をします。
そして、反射した光が目に入った時に、白く輝いて見えることが分かります。

これらから、水面のテクスチャは、法線マップを作成する必要があるのです。
波の模様テクスチャから、法線マップを作ります。


特徴をまとめます

・複数の波を、合成する必要がある。
・それぞれの波を別方向でスクロールさせる。
・法線マップを使用して、リアルな反射を持たせる。


波のテクスチャを用意しよう

波のテクスチャは、シームレスなパーリンノイズが適切です。
シームレスというのは、上下左右につなぎ目のないという意味です。

具体的にシームレスなパーリンノイズを作る方法ですが、
実は検索してもなかなか見つかりませんでした。
一応、下記のようなツールを発見できたものの、登録が必要であるため、ダウンロードをしていません。
Procedural seamless noise texture generator

また、CLIP STUDIOというツールにも、パーリンノイズを作成する機能があるのですが、
こちらは、シームレスなパーリンノイズを作成できません。

そこで、シームレスなパーリンノイズを作成する簡易ツールを作りました。
nami_iconダウンロード

Javaの環境があれば、MacでもWindowsでも動きます。
ここでは、Windowsの環境での説明をしていきます。

【1】
「すべてのプログラム」→「アクセサリ」→「コマンドプロンプト」を実行します。

【2】
次のように、jarファイルがおいてあるディレクトリへ移動します。

cd C:\Users\xxx\Desktop\yyy

【3】
次のように実行してください。(-help と書けば使い方がでます。)

java -jar noise.jar -width 256 -height 256 -persistence 0.6 -lacnarity 2.5 -seed 123456

【4】
noise
これがパーリンノイズ(テクスチャA)です。

次に、このパーリンノイズを「高さ(ハイトマップ)」と見立てて
ノーマルマップを作成していきます。

ノーマルマップの作成ツールは、ハイトマップから自動でノーマルマップを作成できる
NormalMap-Online」を使用させていただきます。

【5】
normalmake
左側の箇所に画像ファイルのアイコンをドラッグ&ドロップして、
画像を読み込ませて、真ん中上部のスライダーで設定をしていきます。

【6】
NormalMap
Downloadを押せば、保存ができます。
これで、ノーマルマップ(テクスチャB)の完成です。

【7】
さらに、色用のテクスチャも用意します。
具体的には、透明度だけを持つ白色テクスチャです。
透明度には、パーリンノイズのテクスチャを使用します。

ovicon64
今回は、高機能な画像補正専用ツールの「オレンジビューア」を使用します。
このツールも、Javaをインストールする必要があります。

nami100
今回は、256×256のパーリンノイズなので、256×256の白色の画像を作成して
ビューアで読み込みを行います。

nami101
「色」→「アルファチャンネル」→「ファイルから読み込む…」で
さきほどの256×256のパーリンノイズを指定します。

nami102
これで、パーリンノイズのアルファチャンネルを持つ白い画像を作成できました。
「ファイルを名前を付けて保存」で、「xxx.png」と拡張子を「png」にして保存してください。
このソフトは、保存するときの拡張子によって自動で、その形式で保存されます。
pngにする理由は、透明度情報を持たせるためです。

noise2

完成した画像がこちらになります。(テクスチャC


テクスチャを設定しよう

立方体を作成して、薄くします。
これを水面にします。

nami200
色は水のような青色にします。

nami201
テクスチャの拡散反射の設定は「テクスチャC」を使います。

nami202
バンプマップの設定は、「テクスチャB」を使います。

nami203
鏡面反射の色成分の設定は「テクスチャA」を使います。

水平スケール、垂直スケールは、面の面積に合わせて、適度な値にしておきましょう。

nami301
この時点で、だいぶ水面のようになります。

nami302
あとは、2枚重ねておきましょう。
また、2枚目に関しては、あとでスクロールの関係上、180度回転させておきましょう。


スクロールさせる

波テクスチャを設定した重ねたオブジェクトの2つ、
それぞれにスクリプトを入れて、テクスチャをスクロールさせます。

スクロールは、かなり遅いほうがそれっぽいです。
スクリプトはこんな感じです。

start() {
	integer	mode	=	ANIM_ON | SMOOTH | LOOP;
	integer	face	=	ALL_SIDES;
	integer	sizex	=	0;
	integer	sizey	=	0;
	float	start	=	0.0;
	float	length	=	0.0;
	float	rate	=	0.005;
	llSetTextureAnim(0, face, 0, 0, 0.0, 0.0, 0.0);
	llSetTextureAnim(mode, face, sizex, sizey, start, length, rate);
}
default{state_entry(){start();}}

これを入れ込んで、実行させるとスクロールが始まります!

これで綺麗な水面の完成です!

テテーン!

これで私の「セカンドライフ技術系 Advent Calendar 2015」の記事は終わりです。
このような発表のきっかけを用意していただきました、sabroさんありがとうございました。

今回の記事を通して、3Dのテクスチャの作成や設定のテクニックに興味を持っていただければ幸いです・・・!

Written by なたで

2015年12月13日 at 00:00

セカンドライフでジャンプ台を作る

leave a comment »


はじめまして。

セカンドライフ技術系 Advent Calendar 2015」の12月10日(木)担当の なたで です。
今回、初めての参加ですがよろしくお願いします。

今日は、セカンドライフでジャンプ台のオブジェクトを作ります。

baned001
上から乗るとぼよーんとするジャンプ台です。

解説の要点

・ジャンプ台のバネの部分を、Metasequoia でモデリングしよう
・ジャンプ台の上から押したときにだけ、ぼよーんとするスクリプトを書こう


ジャンプ台のバネの部分を、モデリングしよう

Metasequoia を作ってモデリングしていきます。

bane001bane002
ドーナッツ型の基本図形からバネを作成していきます。
細かいほうが綺麗に作れますが、単純化のために8角形でいきます。

bane003
bane004
8角形のうち、7つの角を選択して、上に 10 上げます。
複数の選択は、Shiftを押しながら選択でするとできます。

bane005
bane006
先ほど選択した 7つの角のうち、端っこの選択を解除して、上に 10 上げます。
解除は、Ctrlを押しながら選択すると解除できます。
端から 1 つずつ選択を解除しては 10 上げる作業を繰り返していきます。

bane007
これで、すこしラセンっぽくなりました。
この形をたくさんつなげれば、バネができそうです。

bane008
2回転にするために、上にコピーしましょう。

bane009
段差が変な部分の面を削除して、

bane010
上下のラセンのオブジェクトの断面を、面を繋げていきます。

bane011
これでバネが完成しました。

bane012bane013
あとは、木のような台を上下にくっつけて、ジャンプ台のモデルは完成です。
物理判定用のオブジェクトは適当に立方体で作成しておきます。
なお、この時点で、セカンドライフ上の軸と合うように回転させておきましょう。
右が赤のX座標。前が緑のY座標。上が青のZ座標です。
(→詳しくは、 軸についての記事

bane014
これをアップロードします。
アップロード直後は、
プレビューのように予め初期値で回転されているので、回転をもどして…

bane015
できました。


ジャンプ台のスクリプトを書こう

ジャンプ台のスクリプトを書いていきます。。

衝突時の判定は「collision_start」を使用するとよさそうです。
衝突したアバターを、指定した方向へ「llPushObject」で飛ばせばいいのです。
(※土地の設定を、プッシュ許可にしておくこと)

上記の関数を使って「衝突したアバターを、上へ飛ばす」プログラムを書いていくのですが、
単純に実装しようとすると、いくつか問題があることに気がつきます。

baned002
左右からジャンプ台にぶつかった場合でも上へ飛んでしまうのでは?

baned003
ジャンプ台が傾いていた場合に、上から踏んだ場合はどのようにすれば?

……などなど。

解決策

上記のあらゆる問題を解決するために、ジャンプ台で飛ばす方向に対して、
衝突したアバターの「めり込み具合」を調べて、正しく判断させようと思います。

今回は、ベクトルの計算が必要です。
ベクトルというのは、(x, y, z)など、たくさんの値をもつデータのようなものです。
なお、通常の1つしか値ない場合は、スカラーと呼びます。

今回は2種類のベクトルを使用します。

baned004
1つ目に、法線ベクトルがあります。
法線ベクトルは、物体の表面から垂直に伸びたベクトルです。

今回は、バネの向いている方向を、法線ベクトルとして考えたいと思います。
このベクトルは N と呼び、長さ(ノルム)を1とし、単位ベクトルとします。

なお、長さを1にすることで、純粋に方向のみを表すことができます。
よく使用するテクニックなので覚えておくといいかもしれません。
具体的には、「ベクトル」÷「ベクトルの長さ」の計算をすると、長さを1にできます。

baned005
次に、速度ベクトルVです。
衝突したオブジェクトがどの方向へどの速度で向かっているかとなります。
方向はオブジェクトが向かっている方向、長さは速度に相当します。

baned006
衝突したある点からの法線ベクトル N と、衝突時の速度ベクトル V があったときに、
このめり込み具合 d の長さを計算します。

実は、簡単に計算ができる方法あります。

baned007

こんな式です。

こんな計算で、dが求められるのと思うかもしれませんが、求められます。
ベクトル同士を「・」すると、内積となり、
細かいことはおいておいて、dが求まります。

baned008

Nが単位ベクトル(長さ=1)となっているところがポイントです。
すこし難しいですが、ベクトルVを、単位ベクトルであるNに射影したベクトルのノルムが内積となります。

さて、スクリプトは次のようになります。

integer i;

list		get_details			= [ PRIM_SIZE, PRIM_POSITION, PRIM_ROTATION ];
vector		object_size			= <0, 0, 0>;
vector		object_position		= <0, 0, 0>;
rotation	object_rotation		= <0, 0, 0, 1>;
vector		target_velocity		= <0, 0, 0>;
vector		object_normal		= <0, 0, 0>;
vector		object_normal_inv	= <0, 0, 0>;
vector		refrect_vector		= <0, 0, 0>;

// 設定値
float		power					= 3.0;	// 少しの力でもある程度飛ばす
float		rebound					= 2.0;	// 何倍の力で戻すか
float		threshold				= 0.5;	// この閾値より低いと吹き飛ばさない

getData() {
	list list_details = llGetPrimitiveParams(get_details);
	object_size		= llList2Vector(list_details, 0);
	object_position	= llList2Vector(list_details, 1);
	object_rotation	= llList2Rot(list_details, 2);
	object_normal		= <0, 0, 1> * object_rotation; // バネの上の向きベクトル
	object_normal_inv	= <0, 0, -1> * object_rotation; // バネの下の向きベクトル
}

onStartCollision(integer num_detected) {
	// 使用するオブジェクトのデータの取得
	getData();
	
	// めり込み度を計算(内積)
	float merikomi		= target_velocity * object_normal_inv;
	
	// あまり押されていなかったら、処理しない
	if(merikomi < threshold) {
		return;
	}
	
	// 跳ね返すベクトル
	refrect_vector	= (object_normal * (llFabs(merikomi) + power) ) * rebound;
	
	// プッシュ!
	for(i = 0; i < num_detected; i++) {
		llPushObject(llDetectedKey(i), refrect_vector, <0, 0, 0>, FALSE);
	}
	
	// オブジェクトが一瞬縮んで、押された感じにする
	vector object_position_new	= object_position + object_normal_inv * (object_size.z * 0.5);
	vector object_scale_new		= <object_size.x, object_size.y, object_size.z * 0.5>;
	llSetScale(object_scale_new);
	llSetPos(object_position_new);
	llSleep(0.1);
	llSetPos(object_position);
	llSetScale(object_size);
}

default {
	collision_start(integer num_detected ) {
		// 即速度を取得しないと、止まった時の速度を取得してしまう
		target_velocity = llDetectedVel(0);
		// 後はこの中で処理
		onStartCollision(num_detected);
	}
}

以上、「ジャンプ台を作る」の解説を終えます!
お疲れ様でした!

Written by なたで

2015年12月10日 at 00:00

カテゴリー: 3D, program

Tagged with , ,