自分好きな人に~自分を見るカメラを作ってみました^^

jinko

2009年11月04日 06:33



昨日、朝起きるとキュウちゃんからカメラの件でIMが届いていました。
キュウちゃんとのやりとりはスクリプトな深い話が多くて飽きません^^

今日はずっと入れ違いになって直接お話できていないんですが、
カメラを後ろからじゃなく、正面や横に持っていくには
というテーマでした。

2人の結論的には、パラメータがないからたぶん標準では無理ってことだったんですが、
ゴリゴリやればできるかも・・・という展開になって、、
あーさすがキュウちゃんと思いつつ、
ワタシも自分のアバターを前から見るのにいちいちカメラ動かすのがめんどうでしたので作ってみることにしました。




* * *

エメラルドの胸が揺れる機能・・・
あれだけ警告してるにもかかわらず自分ではすごくはまってしまって
ダンスなどでどれくらいゆれてるのか、ついつい確認してしまう癖がついてしまいました。

ゆれるアニメーションを見つけるとなんだか幸せな気分に~~

って、余計なお話でしたね。
でも、こんな毎日なので、カメラを自動で自分に向けることってすごく興味ありました。


カメラを自分で制御するには、llSetCameraParamsを使います。
だいぶ昔、Makapuさんのスクリプトみながら記事を書いたきりです^^;
(過去記事は→こちら)

2年前にはよくわからなかったことが、今見るとちょっとわかるようになっています。
あのスクリプトだといちいちリセットしないとコントロールがうまくいかないのはなんでか!とかね^^
ちょっとずつ進歩してるようでうれしい感じっす^^

で、もう一度Wikiから読み直しなんですが、llSetCameraParamsって

使えそうで使えないヤツww

なんですよねー
カメラ自体、バーチャルリアリティの空間を歩き回る前提なんじゃない?って感じの、
基本はアバターの後ろにカメラがあることになってるんだと思います。
アバターの後ろにカメラがあって、、、移動したり回転したりすると、
ちょっと遅れて後ろをついてくる設定をするための関数だと思います。

そういう設計(←推定)なので横からとか前からの設定がなくて、イマイチ使い勝手が良くないです。


まあ、愚痴はこのくらいにして・・・
今回は、ゴリゴリコースなので、アバターの位置と回転の情報からカメラ位置の座標を直接指定する方法でなんとかしてみました。

でも、本来のカメラのようにスムースな動きにはなりません。
カメラ位置を変えると、ドラマのシーンが変わったみたいに「パッ」っとカメラが動いてしまいます。

キュウちゃんもいろいろ実験してどうしてもスムースに画面が流れないとIMで教えてくれました。
ということで、「スムースな画面移動」は、早々にあきらめがつきました。


基本動作はこんな感じ・・・
※この記事の写真はトリミングしてて正確じゃないのですが雰囲気だけご紹介します





伝わり・・にくいですよねー
動画撮影できないので、ごめんなさい。



■最終的なパラメータ設定

んで、ワタシが作ってみたのは、フォローカメラの設定で、ときどきカメラが正面に来る感じのHUD。
実際にやってみると、慣れが必要でしたが結構使えます。

設定部分を抜き出しておきますねー
forcus_set(vector cpos) {
    llSetCameraParams([
        CAMERA_ACTIVE,                    TRUE,
        CAMERA_FOCUS_LAG,                0.0,
        CAMERA_FOCUS_LOCKED,            FALSE,
        CAMERA_FOCUS_THRESHOLD,            0.0,
        CAMERA_POSITION,                cpos,    //←
        CAMERA_POSITION_LAG,            0.0,
        CAMERA_POSITION_LOCKED,            TRUE,
        CAMERA_POSITION_THRESHOLD,        0.0,
        CAMERA_FOCUS_OFFSET,            gEyeOfs  //←
    ]);
}


基本設定は、上に書いたとおりフォローカメラの設定です。
FOCUS: 位置指定なし、ロックもしない
POSITION: 位置指定する。ロックする
フォーカスをロックしなければアバターに追従するようになりますが、
位置を固定しているので、カメラがじっとしてアバターを追いかける動きになります。

①の部分で、アバターの位置・回転から計算したカメラの位置を設定しています。
また、フォーカスがアバターの腰の位置にくるので、②で目の高さのオフセットを設定しています。
あとは、3秒おきとかで、この関数をコールすればできあがりです。

概ね、こんな感じでうまくいきました。


フォローカメラにしたので、アバターが動いてもフレームから見えなくなりません。






操作がいつもと違うのでなれないと人にぶつかったりクルマにひかれたりしますので
ご注意ください



■もうひと工夫してみる

ちょっと使ってみると気になる点がいくつかあったので、以下の機能もつけました。

◎THRESHOLD的な動き
ちょっとだけ動いたり、その場でちょっと回転したりしたときに、カメラが動くと結構ウザい感じがします。
パラメータの中にもTHRESHOLDがあるのですが、これをいじるとカメラがセンターに来ないので
スクリプトで別にコントロールするようにしました。

◎座ったとき対策
なんでかよく調べられてないのですが、立ってるときと座ったときでは、見え方が違っていました。
オフセットを設定したまま座るとずいぶん高い位置になってしまいます。
このための対策をしました。

◎テレポートの対策
スクリプトが動かないところにテレポートすると大変なことになるので
これも対策しました。




■とりあえず(永久に?)ベータ版

いつもそうなんですが、自分で使う程度にできると興味を失ってしまいます。
本当は、パラメータ調整とか、HUDのデザインとかしてちゃんと商品化すれば面白いんですが、
めんどくさいし、よく考えると誰か作ってそうなので、
とりあえずベータ版としてお店においてみようと思います。

場所はこちら
Lionheart Nala/100/189/28


見てもらうのが早いもんねー
んで、もっと使いやすいの是非作ってみてください^^

自分が好きな方には楽しいかもです^^
(ぱるちゃんによるとみんな"自分スキー"らしいので安心してるけど)

機会がございましたらどうぞお持ちくださいませ。
ご意見とかいただけるとすごくうれしいなー


Creation