2007年07月19日
高度なカメラ制御
「初級スクリプト」でカメラ制御について簡単な方法は紹介したのですが、さらに踏み込んだカメラ制御について書いておこうと思います。
高度なカメラ制御を使うと、一定の場所にカメラを固定するだけではなく、例えばアバターの周囲をぐるぐると回転させたり、俯瞰視点にしてみたり、はたまたカメラを固定してアバターが自由に歩き回れるようなものなど、面白い見せ方がいろいろとできます。
こうしたスクリプトは動画作成や乗り物、ライドなどに応用することができます。
高度なカメラ制御を使うと、一定の場所にカメラを固定するだけではなく、例えばアバターの周囲をぐるぐると回転させたり、俯瞰視点にしてみたり、はたまたカメラを固定してアバターが自由に歩き回れるようなものなど、面白い見せ方がいろいろとできます。
こうしたスクリプトは動画作成や乗り物、ライドなどに応用することができます。
カメラ制御で何ができるのか
まず最初に、カメラを制御する上での用語について簡単に説明しながら、一体どんなことが出来るのか概要をお話しておきます。
ここで言う「カメラ」と言うのは、SLの画面(視界)のことです。
SLという仮想世界をテレビカメラで撮影して、PC画面でモニタしているイメージです。
「カメラ制御」とは、このテレビカメラを動かして、例えばズームしてみたり、横に動かしてみたり、撮影している対象の周りを回ってみたりすることを言います。
カメラを固定して定点撮影のような視界にするのもカメラ制御の一つです。
カメラの位置(ポジション)は、テレビカメラが置かれている位置のことです。
通常、カメラの位置はアバターの背後になっています。
アバターが回転するとそれに合わせてカメラも移動し、常にアバターの背中からの映像を映しますよね。
LSLのカメラ制御ではカメラのポジションをアバターの背後以外の場所に設定することができます。
例えばアバターの背後ではなく、右側から見た視点にしたりすることが可能です。
カメラが見ている対象(の位置)のことを「フォーカス」と言います。
通常は「フォーカス」は自分のアバターになっていますが、ALTを押しながらオブジェクト等をクリックすると「フォーカス」がそのオブジェクトに合います。
誰か他のアバターに「フォーカス」を合わせると、カメラはその人を映し続けます。
俗に「ALTズーム」と言われますが、残念ながらフォーカス対象を追尾する機能はLSLではサポートされていません。
ですが「フォーカス」位置を設定することはできます。
例えばアバターの足元を映し続けるようなことが可能です。
ポジション及びフォーカスは「ロック」することが出来ます。
ロックとは固定することです。
通常ではアバターが動くとカメラもそれにつれて動き、ポジションやフォーカスは変化していきますが、「ロック」を使うとカメラポジションやフォーカスを固定することが可能です。
例えばポジションをロックすると、カメラは定点に設置されますが、アバターが動くとその動きを追うように向きを変えます。
フォーカスをロックすると、カメラはアバターの動きと共に移動しますが、フォーカス位置を常に映し続けます。
ポジションとフォーカスの双方をロックすると、完全な定点撮影になります。
アバターが画面外にスタスタ歩いて行ったとしても、カメラはひたすらに固定された位置を映し続けます。
カメラをズームインしたりズームアウトする動きは「ディスタンス」で表現されます。
つまりカメラの距離です。
ディスタンスが近くなれば視界はズームインし、遠くなればズームアウトします。
「ピッチ」はカメラの上下角度のことを指します。
通常は地面(水平線)と平行の角度になっており、上から見下ろす場合はプラスの角度、下から見上げる場合はマイナスの角度を設定します。
例えばピッチを最大まで上げると、俯瞰図のような視界になります。
「ビハインドネス」という聞きなれない設定項目もあります。
これはカメラがアバターの背後にどれくらい着いて回るかを設定する項目です。
通常ですと、アバターが向きを変えると、カメラはすぐにその背後へと回り込みますが、ビハインドネスを調整することで、例えばアバターが真横を向くまではカメラが回り込まないような設定をすることができます。
さらにはカメラの回りこみを完全に無効にもできます。
回り込みを無効にすると、普段は背中しか見れない自分のアバターを正面から見ることができるようになったりもします。
「ラグ」と聞くと我々の天敵のように思えますが、カメラ制御における「ラグ」はカメラの反応速度のことを指します。
アバターの動きに合わせてカメラが動くとき、通常ではカメラは即座に反応してアバターを追いかけます。
「ラグ」を大きく設定すると、カメラの動きは鈍くなります。
アバターが動いてから、ワンテンポ遅れてカメラが追いかけるような動きが可能です。
あるいは言い換えるなら、「ラグ」を大きく設定したときにはカメラの動きがソフトになると言ってもいいでしょう。
「ラグ」が小さいときには、カメラはシャープに動きます。
最後に「スレッショルド」ですが、直訳すると「敷居」です。
「スレッショルド」はカメラが移動したりフォーカスを追うときの「あそび」を設定します。
例えばフォーカスの「スレッショルド」が半径1mで設定されていた場合、カメラはフォーカス対象が1m以内で動く分には追尾しません。
フォーカス対象が1m以上移動して初めて、カメラは追尾します。
カメラ制御の関数
ではカメラ制御を行うための関数について見てみましょう。
できることは多岐に渡りますが、関数自体は多くありません。
llSetCameraParams(list rules)
カメラ制御を行うための関数はこれ一つだけと言ってもいいでしょう。
ただしカメラ制御を行うためにはパーミッションが必要です。
アニメーションなどのスクリプトにおいて何度か説明しているのでパーミッションについては改めて説明はしません。
llSetCameraParams関数の実行に必要なパーミッションはPERMISSION_CONTROL_CAMERAです。
例えば以下のようにしてパーミッションを取得します(アタッチメントにカメラ制御を組み込む場合の例です)。
llSetCameraParams関数の引数rulesはリスト型になっており、様々なカメラ制御用のパラメータをまとめて渡します。
引数rulesには以下の形式でパラメータを羅列します。
[パラメータ定数1, 設定値1, パラメータ定数2, 設定値2,....]
パラメータ定数及び設定可能な値は以下の通りです。
例えば、カメラ制御を有効にしてズーム距離を10mにするには以下のようなリストを引数として渡します。
カメラ制御を有効にしてデフォルトの設定を遣うときには以下のようにします。
こうしてみると、関数の使い方よりも各パラメータの意味を理解することが重要になってくるのがお分かりいただけるかと思います。
ついでにもう一つ二つ、カメラ制御に関わる関数を紹介しておきましょう。
llClearCameraParams()
カメラのパラメータをデフォルトに戻し、制御をOFFにする関数です。
引数はありません。
llReleaseCamera(key agent)
カメラ制御を引数agentに指定したUUIDのアバターに戻します。
つまりカメラ制御を終了するときに使う関数です。
以上、llSetCameraParams関数の引数がややこしい以外は難しい関数はありません。
俯瞰カメラ
具体的に一つ作ってみましょう。
実際に動かしてみるのが一番です。
簡単なものということで、俯瞰カメラを作ってみます。
上空から見下ろす視点のカメラです。
制御するのはピッチのパラメータになります。
それから高いところから見下ろしている感じを出すために、ディスタンスを最大にします。
また、アバターの回転に合わせてカメラがグルグル回ると酔うと思うので、ビハインドネスを最大にしてカメラが回らないようにしておきます。
このサンプルはアタッチメント用です。
何でもいいので適当なオブジェクトを作り、スクリプトを組み込んでアタッチして下さい。
アタッチされたとき、あるいはスクリプト開始時点でアタッチされていた場合にカメラ制御のパーミッションを取得しに行きます。
パーミッションが取得されたら、llSetCameraParams関数を使ってカメラ制御をONにし、ビハインドネスを180度、ディスタンスを10m、ピッチを80度に設定します。
デタッチされたときにはカメラ制御を開放します。
これでカメラは上空からアバターを映すようになります。
回転に応じてカメラは動きませんので、アバターを動かすときには奇異な動作に感じるかもしれません。
アバターの回転に応じてカメラを回したい場合は、CAMERA_BEHINDNESS_ANGLEの設定値を小さくしてやります。
普段とは違う視点を体感できたでしょうか。
カメラ制御を遣うと、このように面白い視界を得ることが可能になります。
固定追尾カメラ
他にも試してみましょう。
ポジションのロックを使用し、カメラの位置を固定しつつアバターの動きを追いかけるカメラを実現してみます。
カメラのポジションはアバターの現在位置から3mほどずらした位置にしてみます。
変えているのはllSetCameraParams関数の設定パラメータだけです。
CAMERA_POSITIONパラメータでカメラポジションを指定し、CAMERA_POSITION_LOCKEDパラメータをTRUEにしてカメラを固定します。
アバターを動かすと、カメラの位置は固定のまま、アバターの動きに合わせてカメラが向きを変えます。
ALT+クリックによる追尾ともまた違う面白い効果です。
せっかくですのでもう少しパラメータをいじってみましょう。
CAMERA_FOCUS_LAGパラメータの値を3.0にしてみて下さい。
カメラがフォーカスを合わせるときに遅延するようになり、追尾がソフトな動きになります。
すばやく動かすとアバターが画面外に出てしまったりもします(^^;
完全固定カメラ
ポジションのロックと同時にフォーカスにもロックをかけると、完全な固定カメラになります。
アバターが画面外に出て行こうが何をしようが、カメラはひらすら定点を映し続けます。
動画の撮影などをする際には便利なカメラ制御です。
カメラの動的制御
パラメータを連続的に変化させることで、動的にカメラを制御することも可能です。
動画などでは左右にぐるぐる回すカメラワークはよく見かけますが、せっかくですのでスクリプトならではの動きを実現してみましょう。
左右ではなく、縦方向に回転するカメラです。
・・・いや、何に使うのか知りませんが(^^;
このスクリプトは10秒ごとに“縦方向”にカメラを回転させます。
カメラが自由に回転できるよう、ビハインドネスを180度にし、ポジションの移動がスムーズになるよう、ポジションラグを大きく設定しています。
しかし・・・酔いそうです・・・。
というわけでいくつかサンプルをのっけてみましたが、他にも面白い視点を設定することができますので試してみて下さい。
まず最初に、カメラを制御する上での用語について簡単に説明しながら、一体どんなことが出来るのか概要をお話しておきます。
ここで言う「カメラ」と言うのは、SLの画面(視界)のことです。
SLという仮想世界をテレビカメラで撮影して、PC画面でモニタしているイメージです。
「カメラ制御」とは、このテレビカメラを動かして、例えばズームしてみたり、横に動かしてみたり、撮影している対象の周りを回ってみたりすることを言います。
カメラを固定して定点撮影のような視界にするのもカメラ制御の一つです。
カメラの位置(ポジション)は、テレビカメラが置かれている位置のことです。
通常、カメラの位置はアバターの背後になっています。
アバターが回転するとそれに合わせてカメラも移動し、常にアバターの背中からの映像を映しますよね。
LSLのカメラ制御ではカメラのポジションをアバターの背後以外の場所に設定することができます。
例えばアバターの背後ではなく、右側から見た視点にしたりすることが可能です。
カメラが見ている対象(の位置)のことを「フォーカス」と言います。
通常は「フォーカス」は自分のアバターになっていますが、ALTを押しながらオブジェクト等をクリックすると「フォーカス」がそのオブジェクトに合います。
誰か他のアバターに「フォーカス」を合わせると、カメラはその人を映し続けます。
俗に「ALTズーム」と言われますが、残念ながらフォーカス対象を追尾する機能はLSLではサポートされていません。
ですが「フォーカス」位置を設定することはできます。
例えばアバターの足元を映し続けるようなことが可能です。
ポジション及びフォーカスは「ロック」することが出来ます。
ロックとは固定することです。
通常ではアバターが動くとカメラもそれにつれて動き、ポジションやフォーカスは変化していきますが、「ロック」を使うとカメラポジションやフォーカスを固定することが可能です。
例えばポジションをロックすると、カメラは定点に設置されますが、アバターが動くとその動きを追うように向きを変えます。
フォーカスをロックすると、カメラはアバターの動きと共に移動しますが、フォーカス位置を常に映し続けます。
ポジションとフォーカスの双方をロックすると、完全な定点撮影になります。
アバターが画面外にスタスタ歩いて行ったとしても、カメラはひたすらに固定された位置を映し続けます。
カメラをズームインしたりズームアウトする動きは「ディスタンス」で表現されます。
つまりカメラの距離です。
ディスタンスが近くなれば視界はズームインし、遠くなればズームアウトします。
「ピッチ」はカメラの上下角度のことを指します。
通常は地面(水平線)と平行の角度になっており、上から見下ろす場合はプラスの角度、下から見上げる場合はマイナスの角度を設定します。
例えばピッチを最大まで上げると、俯瞰図のような視界になります。
「ビハインドネス」という聞きなれない設定項目もあります。
これはカメラがアバターの背後にどれくらい着いて回るかを設定する項目です。
通常ですと、アバターが向きを変えると、カメラはすぐにその背後へと回り込みますが、ビハインドネスを調整することで、例えばアバターが真横を向くまではカメラが回り込まないような設定をすることができます。
さらにはカメラの回りこみを完全に無効にもできます。
回り込みを無効にすると、普段は背中しか見れない自分のアバターを正面から見ることができるようになったりもします。
「ラグ」と聞くと我々の天敵のように思えますが、カメラ制御における「ラグ」はカメラの反応速度のことを指します。
アバターの動きに合わせてカメラが動くとき、通常ではカメラは即座に反応してアバターを追いかけます。
「ラグ」を大きく設定すると、カメラの動きは鈍くなります。
アバターが動いてから、ワンテンポ遅れてカメラが追いかけるような動きが可能です。
あるいは言い換えるなら、「ラグ」を大きく設定したときにはカメラの動きがソフトになると言ってもいいでしょう。
「ラグ」が小さいときには、カメラはシャープに動きます。
最後に「スレッショルド」ですが、直訳すると「敷居」です。
「スレッショルド」はカメラが移動したりフォーカスを追うときの「あそび」を設定します。
例えばフォーカスの「スレッショルド」が半径1mで設定されていた場合、カメラはフォーカス対象が1m以内で動く分には追尾しません。
フォーカス対象が1m以上移動して初めて、カメラは追尾します。
カメラ制御の関数
ではカメラ制御を行うための関数について見てみましょう。
できることは多岐に渡りますが、関数自体は多くありません。
llSetCameraParams(list rules)
カメラ制御を行うための関数はこれ一つだけと言ってもいいでしょう。
ただしカメラ制御を行うためにはパーミッションが必要です。
アニメーションなどのスクリプトにおいて何度か説明しているのでパーミッションについては改めて説明はしません。
llSetCameraParams関数の実行に必要なパーミッションはPERMISSION_CONTROL_CAMERAです。
例えば以下のようにしてパーミッションを取得します(アタッチメントにカメラ制御を組み込む場合の例です)。
default {
attach(key agent){
if (agent != NULL_KEY){
llRequestPermissions(agent, PERMISSION_CONTROL_CAMERA);
}
}
run_time_permissions(integer perm) {
if (!(perm & PERMISSION_CONTROL_CAMERA)) {
llRequestPermissions(agent, PERMISSION_CONTROL_CAMERA);
}
}
}
llSetCameraParams関数の引数rulesはリスト型になっており、様々なカメラ制御用のパラメータをまとめて渡します。
引数rulesには以下の形式でパラメータを羅列します。
[パラメータ定数1, 設定値1, パラメータ定数2, 設定値2,....]
パラメータ定数及び設定可能な値は以下の通りです。
パラメータ定数 | 定数値 | 設定値の型 | 初期設定値 | 設定値の範囲 | 説明 |
---|---|---|---|---|---|
CAMERA_ACTIVE | 12 | integer(有効/無効) | FALSE | TRUE か FALSE | カメラ制御のON/OFF |
CAMERA_BEHINDNESS_ANGLE | 8 | float(角度) | 10.0 | 0.0 から 180.0 | ビハインドネス角度 |
CAMERA_BEHINDNESS_LAG | 9 | float(秒) | 0.0 | 0.0 から 3.0 | ビハインドネスのラグ |
CAMERA_DISTANCE | 7 | float(m) | 3.0 | 0.5 から 10.0 | カメラの距離(ズーム) |
CAMERA_FOCUS | 17 | vector(位置) | なし | フォーカス位置(デフォルトはアバター) | |
CAMERA_FOCUS_LAG | 6 | float(秒) | 0.1 | 0.0 から 3.0 | フォーカスのラグ |
CAMERA_FOCUS_LOCKED | 22 | integer(固定/非固定) | FALSE | TRUE か FALSE | フォーカスロック/アンロック |
CAMERA_FOCUS_OFFSET | 1 | vector(m) | <0.0, 0.0, 0.0> | <-10,-10,-10>から<10,10,10> | フォーカス位置(アバターからの相対位置) |
CAMERA_FOCUS_THRESHOLD | 11 | float(m) | 1.0 | 0.0 から 4.0 | フォーカススレッショルド |
CAMERA_PITCH | 0 | float(角度) | 0.0 | -45.0 から 80.0 | ピッチ角度 |
CAMERA_POSITION | 13 | vector(位置) | なし | n/a | カメラポジション |
CAMERA_POSITION_LAG | 5 | float(秒) | 0.1 | 0.0 から 3.0 | カメラポジションのラグ |
CAMERA_POSITION_LOCKED | 21 | integer(固定/非固定) | FALSE | TRUE か FALSE | ポジションのロック/アンロック |
CAMERA_POSITION_THRESHOLD | 10 | float(m) | 1.0 | 0.0 から 4.0 | ポジションスレッショルド |
例えば、カメラ制御を有効にしてズーム距離を10mにするには以下のようなリストを引数として渡します。
llSetCameraParams([
CAMERA_ACTIVE, 1,
CAMERA_DISTANCE, 10.0
]);
カメラ制御を有効にしてデフォルトの設定を遣うときには以下のようにします。
llSetCameraParams([
CAMERA_ACTIVE, 1,
CAMERA_BEHINDNESS_ANGLE, 10.0,
CAMERA_BEHINDNESS_LAG, 0.0,
CAMERA_DISTANCE, 3.0,
CAMERA_FOCUS_LAG, 0.1 ,
CAMERA_FOCUS_LOCKED, FALSE,
CAMERA_FOCUS_THRESHOLD, 1.0,
CAMERA_PITCH, 0.0,
CAMERA_POSITION_LAG, 0.1,
CAMERA_POSITION_LOCKED, FALSE,
CAMERA_POSITION_THRESHOLD, 1.0,
CAMERA_FOCUS_OFFSET, ZERO_VECTOR
]);
こうしてみると、関数の使い方よりも各パラメータの意味を理解することが重要になってくるのがお分かりいただけるかと思います。
ついでにもう一つ二つ、カメラ制御に関わる関数を紹介しておきましょう。
llClearCameraParams()
カメラのパラメータをデフォルトに戻し、制御をOFFにする関数です。
引数はありません。
llReleaseCamera(key agent)
カメラ制御を引数agentに指定したUUIDのアバターに戻します。
つまりカメラ制御を終了するときに使う関数です。
以上、llSetCameraParams関数の引数がややこしい以外は難しい関数はありません。
俯瞰カメラ
具体的に一つ作ってみましょう。
実際に動かしてみるのが一番です。
簡単なものということで、俯瞰カメラを作ってみます。
上空から見下ろす視点のカメラです。
制御するのはピッチのパラメータになります。
それから高いところから見下ろしている感じを出すために、ディスタンスを最大にします。
また、アバターの回転に合わせてカメラがグルグル回ると酔うと思うので、ビハインドネスを最大にしてカメラが回らないようにしておきます。
default{
state_entry(){
if (llGetAttached() != 0){
llRequestPermissions(llGetOwner(), PERMISSION_CONTROL_CAMERA);
}
}
attach(key agent){
if (agent != NULL_KEY){
llRequestPermissions(agent, PERMISSION_CONTROL_CAMERA);
}else{
integer perm = llGetPermissions();
if (perm & PERMISSION_CONTROL_CAMERA){
llClearCameraParams();
llReleaseCamera(llGetPermissionsKey());
}
}
}
run_time_permissions(integer perm) {
if (perm & PERMISSION_CONTROL_CAMERA) {
llSetCameraParams([
CAMERA_ACTIVE, 1,
CAMERA_BEHINDNESS_ANGLE, 180.0,
CAMERA_DISTANCE, 10.0,
CAMERA_PITCH, 80.0
]);
}
}
}
このサンプルはアタッチメント用です。
何でもいいので適当なオブジェクトを作り、スクリプトを組み込んでアタッチして下さい。
アタッチされたとき、あるいはスクリプト開始時点でアタッチされていた場合にカメラ制御のパーミッションを取得しに行きます。
パーミッションが取得されたら、llSetCameraParams関数を使ってカメラ制御をONにし、ビハインドネスを180度、ディスタンスを10m、ピッチを80度に設定します。
デタッチされたときにはカメラ制御を開放します。
これでカメラは上空からアバターを映すようになります。
回転に応じてカメラは動きませんので、アバターを動かすときには奇異な動作に感じるかもしれません。
アバターの回転に応じてカメラを回したい場合は、CAMERA_BEHINDNESS_ANGLEの設定値を小さくしてやります。
普段とは違う視点を体感できたでしょうか。
カメラ制御を遣うと、このように面白い視界を得ることが可能になります。
固定追尾カメラ
他にも試してみましょう。
ポジションのロックを使用し、カメラの位置を固定しつつアバターの動きを追いかけるカメラを実現してみます。
カメラのポジションはアバターの現在位置から3mほどずらした位置にしてみます。
default{
state_entry(){
if (llGetAttached() != 0){
llRequestPermissions(llGetOwner(), PERMISSION_CONTROL_CAMERA);
}
}
attach(key agent){
if (agent != NULL_KEY){
llRequestPermissions(agent, PERMISSION_CONTROL_CAMERA);
}else{
integer perm = llGetPermissions();
if (perm & PERMISSION_CONTROL_CAMERA){
llClearCameraParams();
llReleaseCamera(llGetPermissionsKey());
}
}
}
run_time_permissions(integer perm) {
if (perm & PERMISSION_CONTROL_CAMERA) {
llSetCameraParams([
CAMERA_ACTIVE, 1,
CAMERA_POSITION, llGetPos() + <-3.0,0,0>,
CAMERA_POSITION_LOCKED, TRUE,
CAMERA_FOCUS_LAG, 0.0
]);
}
}
}
変えているのはllSetCameraParams関数の設定パラメータだけです。
CAMERA_POSITIONパラメータでカメラポジションを指定し、CAMERA_POSITION_LOCKEDパラメータをTRUEにしてカメラを固定します。
アバターを動かすと、カメラの位置は固定のまま、アバターの動きに合わせてカメラが向きを変えます。
ALT+クリックによる追尾ともまた違う面白い効果です。
せっかくですのでもう少しパラメータをいじってみましょう。
CAMERA_FOCUS_LAGパラメータの値を3.0にしてみて下さい。
(略)
llSetCameraParams([
CAMERA_ACTIVE, 1,
CAMERA_POSITION, llGetPos() + <-3.0,0,0>,
CAMERA_POSITION_LOCKED, TRUE,
CAMERA_FOCUS_LAG, 3.0
]);
(略)
カメラがフォーカスを合わせるときに遅延するようになり、追尾がソフトな動きになります。
すばやく動かすとアバターが画面外に出てしまったりもします(^^;
完全固定カメラ
ポジションのロックと同時にフォーカスにもロックをかけると、完全な固定カメラになります。
default{
state_entry(){
if (llGetAttached() != 0){
llRequestPermissions(llGetOwner(), PERMISSION_CONTROL_CAMERA);
}
}
attach(key agent){
if (agent != NULL_KEY){
llRequestPermissions(agent, PERMISSION_CONTROL_CAMERA);
}else{
integer perm = llGetPermissions();
if (perm & PERMISSION_CONTROL_CAMERA){
llClearCameraParams();
llReleaseCamera(llGetPermissionsKey());
}
}
}
run_time_permissions(integer perm) {
if (perm & PERMISSION_CONTROL_CAMERA) {
llSetCameraParams([
CAMERA_ACTIVE, 1,
CAMERA_POSITION, llGetPos() + <-3.0,0,0>,
CAMERA_POSITION_LOCKED, TRUE,
CAMERA_FOCUS, llGetPos(),
CAMERA_FOCUS_LOCKED, TRUE
]);
}
}
}
アバターが画面外に出て行こうが何をしようが、カメラはひらすら定点を映し続けます。
動画の撮影などをする際には便利なカメラ制御です。
カメラの動的制御
パラメータを連続的に変化させることで、動的にカメラを制御することも可能です。
動画などでは左右にぐるぐる回すカメラワークはよく見かけますが、せっかくですのでスクリプトならではの動きを実現してみましょう。
左右ではなく、縦方向に回転するカメラです。
・・・いや、何に使うのか知りませんが(^^;
default{
state_entry(){
if (llGetAttached() != 0){
llRequestPermissions(llGetOwner(), PERMISSION_CONTROL_CAMERA);
}
}
attach(key agent){
if (agent != NULL_KEY){
llRequestPermissions(agent, PERMISSION_CONTROL_CAMERA);
}else{
integer perm = llGetPermissions();
if (perm & PERMISSION_CONTROL_CAMERA){
llClearCameraParams();
llReleaseCamera(llGetPermissionsKey());
}
}
}
run_time_permissions(integer perm) {
if (perm & PERMISSION_CONTROL_CAMERA) {
llSetTimerEvent(0.5);
}
}
timer(){
llSetTimerEvent(10.0);
float i;
vector camera_position;
for (i=0; i< TWO_PI; i+=.05){
camera_position = llGetPos() + <5, 0, 0> * llEuler2Rot(<i, 0, 0>);
llSetCameraParams([
CAMERA_ACTIVE, 1,
CAMERA_BEHINDNESS_ANGLE, 180.0,
CAMERA_FOCUS_LAG, 0.1 ,
CAMERA_POSITION_LAG, 3.0,
CAMERA_BEHINDNESS_LAG, 0.0,
CAMERA_POSITION, camera_position
]);
}
}
}
このスクリプトは10秒ごとに“縦方向”にカメラを回転させます。
カメラが自由に回転できるよう、ビハインドネスを180度にし、ポジションの移動がスムーズになるよう、ポジションラグを大きく設定しています。
しかし・・・酔いそうです・・・。
というわけでいくつかサンプルをのっけてみましたが、他にも面白い視点を設定することができますので試してみて下さい。
タグ :カメラ制御
Posted by Miz at 12:15
│スクリプト小技
この記事へのトラックバック
昨晩完成したキキちゃん(風)コスプレ。どうしてもホウキに乗って空を飛んでみたいんです。動くスクリプトを求めて、いろいろ検索してみたのですが、これというのが出てきません。し...
ホウキに乗って飛んでみたい・・・【jinkoさんSL日記】at 2007年08月07日 00:18
hid Voom|渡邉英徳です。 LSLにもかなり慣れてきました。いろいろと実験...
空中に逆さに座る|鉛直カメラ【メタバースの建築|Architecture in Metaverse】at 2007年09月09日 03:22
この記事へのコメント
Mizさん!こんにち( ゚∀゚)・∵. グハッ!!
すごいすごい><w
こんなことが出来るんですねーーーーーー!!!
ポケットの中に小道具として入れておけば
自分でカメラマン兼俳優ということができるんですね(´∀`*)ウフフ
前回の三脚のスクリプトも大活用させて頂いてたんですが
今回のはさらにマシニマ作ってる方には必須と言って良いほどの(涙
どんどん試してみます!!!ありがとうございましたー☆
すごいすごい><w
こんなことが出来るんですねーーーーーー!!!
ポケットの中に小道具として入れておけば
自分でカメラマン兼俳優ということができるんですね(´∀`*)ウフフ
前回の三脚のスクリプトも大活用させて頂いてたんですが
今回のはさらにマシニマ作ってる方には必須と言って良いほどの(涙
どんどん試してみます!!!ありがとうございましたー☆
Posted by awyete at 2007年07月19日 13:26
>awyeteさん
こういう関数見てると、やっぱりSLは動画作ることを想定しているシステムなんだなァと思います。
一人で作るようなときはカメラワークに苦労しますが、このスクリプト利用するとかなり楽になります(^^
こういう関数見てると、やっぱりSLは動画作ることを想定しているシステムなんだなァと思います。
一人で作るようなときはカメラワークに苦労しますが、このスクリプト利用するとかなり楽になります(^^
Posted by Miz at 2007年07月19日 22:10
すごいですねー
映画を撮るときにカメラマン役のAVを数人用意しておけば、一度にいろんな角度から映像が撮れますね。
他にも数日前に「WEBブラウザーからSLの情報を取得する技術を開発した」
という記事が載ってましたが、これを使えば定点カメラを複数箇所に設定して携帯などから常時街の様子を見ることが出来る。
とかいけそうですね。
ところでソラマメというのはブログ全体の名前だったのですね。
私はてっきり ソラマメ=Makapu=Mizさん だと思ってました、
道理で他のAVと話しててたまに違和感を感じてたわけだ(w
それでですね、今度HPを作りまして。
そこのスクリプトの説明は「ここのアドレスを載せるだけ」という暴挙に出たのですが、よろしいでしょうか?
ダメでしたら削除しますので、ご検討お願いします。
最後にリクエストなのですが
「ダイアログ」についてもう少し突っ込んだお話はお願いできませんか?
可能かどうか判断すら出来ないのですが、例えば
・ダイアログのデザインを変える(12個を一列にしたり、外見にテクスチャを張るとか、ボタンの形 等々)
・階層化する(右3個のボタンを階層移動用にするとか)
・出現位置を変える
・オブジェクトに貼り付ける(最終的に上に書いたこととこれができると、スイッチ付きのオブジェクトができるなーと)
無茶なこと言ってたらごめんなさい(><
・
映画を撮るときにカメラマン役のAVを数人用意しておけば、一度にいろんな角度から映像が撮れますね。
他にも数日前に「WEBブラウザーからSLの情報を取得する技術を開発した」
という記事が載ってましたが、これを使えば定点カメラを複数箇所に設定して携帯などから常時街の様子を見ることが出来る。
とかいけそうですね。
ところでソラマメというのはブログ全体の名前だったのですね。
私はてっきり ソラマメ=Makapu=Mizさん だと思ってました、
道理で他のAVと話しててたまに違和感を感じてたわけだ(w
それでですね、今度HPを作りまして。
そこのスクリプトの説明は「ここのアドレスを載せるだけ」という暴挙に出たのですが、よろしいでしょうか?
ダメでしたら削除しますので、ご検討お願いします。
最後にリクエストなのですが
「ダイアログ」についてもう少し突っ込んだお話はお願いできませんか?
可能かどうか判断すら出来ないのですが、例えば
・ダイアログのデザインを変える(12個を一列にしたり、外見にテクスチャを張るとか、ボタンの形 等々)
・階層化する(右3個のボタンを階層移動用にするとか)
・出現位置を変える
・オブジェクトに貼り付ける(最終的に上に書いたこととこれができると、スイッチ付きのオブジェクトができるなーと)
無茶なこと言ってたらごめんなさい(><
・
Posted by Syousa at 2007年07月20日 03:29
>Syousaさん
HP開設おめでとうございます。
リンクはご自由にしていただいて構いませんし、記事のアドレス載せるのも問題ないです。
ダイアログですが、「階層化する」以外のお話は残念ながら全て実現できないです(><
階層化については前に他の方からもどうやってるのか聞かれたことがあるので、今後記事を考えてみますね。
HP開設おめでとうございます。
リンクはご自由にしていただいて構いませんし、記事のアドレス載せるのも問題ないです。
ダイアログですが、「階層化する」以外のお話は残念ながら全て実現できないです(><
階層化については前に他の方からもどうやってるのか聞かれたことがあるので、今後記事を考えてみますね。
Posted by Miz at 2007年07月20日 09:28
快諾していただきありがとうございます。
ダメだって言われたらどうしようかと内心ドキドキでした(^^;
ダイアログはあまり融通が利かないのですね。
そうなるとプリムを並べてそれらしいテクスチャを貼り付け、それぞれ別チャネルを使ってスイッチにする。という手法でいくしかないですね。
「Gゲージ」というんですか、ミニSLを走らせるようなオブジェが作れないかなーと思ってまして。そのコンソールにダイアログを利用できないかと思った次第です。
今後の記事にも期待しています。
ありがとうございました。
ダメだって言われたらどうしようかと内心ドキドキでした(^^;
ダイアログはあまり融通が利かないのですね。
そうなるとプリムを並べてそれらしいテクスチャを貼り付け、それぞれ別チャネルを使ってスイッチにする。という手法でいくしかないですね。
「Gゲージ」というんですか、ミニSLを走らせるようなオブジェが作れないかなーと思ってまして。そのコンソールにダイアログを利用できないかと思った次第です。
今後の記事にも期待しています。
ありがとうございました。
Posted by Syousa at 2007年07月20日 10:14
>Syousaさん
そうですね、オブジェクトの操作パネルを作るにはボタンをprimで作るしかないです。
本体と各ボタンをリンクしておけば、どのボタンが押された(タッチされた)かは簡単に判定することができます。
以下の関数を参考にしてみて下さい。
http://miz.slmame.com/e12418.html#llDetectedLinkNumber
http://miz.slmame.com/e14880.html#llGetLinkName
これらを利用するとタッチされた子primの名前を判定できますので、子primボタンの名前を"start"とか"stop"とかにしておいて、本体のタッチイベント内で押されたボタンに応じた処理を書きます。
そうですね、オブジェクトの操作パネルを作るにはボタンをprimで作るしかないです。
本体と各ボタンをリンクしておけば、どのボタンが押された(タッチされた)かは簡単に判定することができます。
以下の関数を参考にしてみて下さい。
http://miz.slmame.com/e12418.html#llDetectedLinkNumber
http://miz.slmame.com/e14880.html#llGetLinkName
これらを利用するとタッチされた子primの名前を判定できますので、子primボタンの名前を"start"とか"stop"とかにしておいて、本体のタッチイベント内で押されたボタンに応じた処理を書きます。
Posted by Miz at 2007年07月20日 10:40
Mizさん、はじめまして。
私、マシニマをやろうとしているうちの一人(w)なのですが
実際の撮影を意識したカメラとなると難しくありませんか?
ズームやパンチルトを任意の速度でやるのは
難しいですよね?
また、ズームはターゲットを指定していないと
ズームできないし・・。
フィックス映像のつなぎだったら今の仕様でもいけそうなのですが
実際のカメラのように動かそうと考えると・・・。
とりあえず撮影はマウスルックでの撮影メインで予定しています。
マウスルックの照準は編集上で消してですw。
私、マシニマをやろうとしているうちの一人(w)なのですが
実際の撮影を意識したカメラとなると難しくありませんか?
ズームやパンチルトを任意の速度でやるのは
難しいですよね?
また、ズームはターゲットを指定していないと
ズームできないし・・。
フィックス映像のつなぎだったら今の仕様でもいけそうなのですが
実際のカメラのように動かそうと考えると・・・。
とりあえず撮影はマウスルックでの撮影メインで予定しています。
マウスルックの照準は編集上で消してですw。
Posted by エビちゃん at 2007年07月24日 09:21
>エビちゃんさん
そうですね、あらゆるカメラワークが可能というわけではないです。
ラグやスレッショルドの値を上手に調整しないとカクカクしたカメラワークになってしまう難点もあります。
ズームやパンの速度をコントロールするには、それなりにスクリプト側で制御をしてやらないといけないので、簡単に出来るとは言えません。
あくまでも参考までに、ですが、私の作ったマシネマを見ていただくと、どの程度のカメラワークができるかわかるかと思います。
http://miz.slmame.com/e5201.html
そうですね、あらゆるカメラワークが可能というわけではないです。
ラグやスレッショルドの値を上手に調整しないとカクカクしたカメラワークになってしまう難点もあります。
ズームやパンの速度をコントロールするには、それなりにスクリプト側で制御をしてやらないといけないので、簡単に出来るとは言えません。
あくまでも参考までに、ですが、私の作ったマシネマを見ていただくと、どの程度のカメラワークができるかわかるかと思います。
http://miz.slmame.com/e5201.html
Posted by Miz at 2007年07月24日 12:43
いつも大変お世話になってます。
この記事のおかげで、カメラ制御することができました♪
とはいえ、イチから作ることなんてできないので、
Makapuさんのスクリプトを今回も、
おおいに参考にさせていただきました。
カメラ制御って難しいですけど、面白いですね^^
また、いろんな技の紹介、楽しみにしています♪
この記事のおかげで、カメラ制御することができました♪
とはいえ、イチから作ることなんてできないので、
Makapuさんのスクリプトを今回も、
おおいに参考にさせていただきました。
カメラ制御って難しいですけど、面白いですね^^
また、いろんな技の紹介、楽しみにしています♪
Posted by jinko at 2007年08月24日 06:13
安価販売大人気 時計
激安!高品質の問屋! サービスもいいです。
新型は発売して、当社はブランドの専門販売会社です。
◆信用第一、良い品質、低価格は 私達の勝ち残りの切り札です。
◆ 当社の商品は絶対の自信が御座います。安心に取引できます。
◇ S品質 シリアル付きも有り 付属品完備!
◆ 必ずご満足頂ける品質の商品のみ販売しております。
◇ 品質を最大限本物と同等とする為に相応の材質にて製作している為です。
◆ 絶対に満足して頂ける品のみ皆様にお届け致します。
以下は当店の特恵です:
当社URL:http://www.shopping-brand.com
店長:山崎雪子
連絡先:virgoods1@yahoo.com
激安!高品質の問屋! サービスもいいです。
新型は発売して、当社はブランドの専門販売会社です。
◆信用第一、良い品質、低価格は 私達の勝ち残りの切り札です。
◆ 当社の商品は絶対の自信が御座います。安心に取引できます。
◇ S品質 シリアル付きも有り 付属品完備!
◆ 必ずご満足頂ける品質の商品のみ販売しております。
◇ 品質を最大限本物と同等とする為に相応の材質にて製作している為です。
◆ 絶対に満足して頂ける品のみ皆様にお届け致します。
以下は当店の特恵です:
当社URL:http://www.shopping-brand.com
店長:山崎雪子
連絡先:virgoods1@yahoo.com
Posted by 山崎雪子 at 2010年11月30日 17:54
送料無料(日本全国)
不良品物情況、無償で交換します
税関の没収する商品は再度無料にして発送します
●あなたのご光臨を期待します,宜しくお願いします!!(*^-^*)
不良品物情況、無償で交換します
税関の没収する商品は再度無料にして発送します
●あなたのご光臨を期待します,宜しくお願いします!!(*^-^*)
Posted by ブライトリング 偽物 at 2011年01月10日 17:48
2011年人気貴族店37bag.com!Louis Vuitton全新登場
●バッグ●時計●財布●指輪
★2011年人気最新品
中村人気店 www.37bag.com
--------------------------
★2011年超人気!随時更新
全物品運賃無料(日本全国)
不良品物情況、無償で交換します.
税関没収する商品は再度無料で発送します.
(注意:注文は多くて、特恵は多いです)
2010年人気貴族店37bag.com新年 当店の特大優惠活動:
◇各種のブランドの財布、最低の価格の2500円
◇ブランドのかばん、最低価格の4500円
◇ブランドの腕時計、最低の価格の7000円
当社HP:http://www.37bag.com
連絡先:37bagshop@gmail.com
店長:中村 美惠子
友達の店:http://www.bag79.com
●バッグ●時計●財布●指輪
★2011年人気最新品
中村人気店 www.37bag.com
--------------------------
★2011年超人気!随時更新
全物品運賃無料(日本全国)
不良品物情況、無償で交換します.
税関没収する商品は再度無料で発送します.
(注意:注文は多くて、特恵は多いです)
2010年人気貴族店37bag.com新年 当店の特大優惠活動:
◇各種のブランドの財布、最低の価格の2500円
◇ブランドのかばん、最低価格の4500円
◇ブランドの腕時計、最低の価格の7000円
当社HP:http://www.37bag.com
連絡先:37bagshop@gmail.com
店長:中村 美惠子
友達の店:http://www.bag79.com
Posted by 中村 美惠子 at 2011年02月19日 18:55
★★人気SS★
お客さんたちも大好評です:
新品種類がそろっています。
とっても安いし、作りも素敵です。
いい物がたくさんありますので、気に入ってます!
販売(LOUIS VUITTON)、(CHANEL)、
(GUCCI)、(HERMES)、(COACH)
◆スタイルが多い、品質がよい、価格が低い!
◆信用第一、良い品質、低価格は 私達の勝ち残りの切り札です。
◆当社の商品は絶対の自信が御座います。
◆S/SS品質 シリアル付きも有り 付属品完備!
◆全て激安特価でご提供!
◆送料無料(日本全国)!
↓↓↓
http://www.bag81.com
http://www.ss-shopping.com/
http://www.vuitton-love.com
お客さんたちも大好評です:
新品種類がそろっています。
とっても安いし、作りも素敵です。
いい物がたくさんありますので、気に入ってます!
販売(LOUIS VUITTON)、(CHANEL)、
(GUCCI)、(HERMES)、(COACH)
◆スタイルが多い、品質がよい、価格が低い!
◆信用第一、良い品質、低価格は 私達の勝ち残りの切り札です。
◆当社の商品は絶対の自信が御座います。
◆S/SS品質 シリアル付きも有り 付属品完備!
◆全て激安特価でご提供!
◆送料無料(日本全国)!
↓↓↓
http://www.bag81.com
http://www.ss-shopping.com/
http://www.vuitton-love.com
Posted by 小原 亮太 at 2011年03月06日 00:36
2011年★★人気SS★
お客さんたちも大好評です:
新品種類がそろっています。
とっても安いし、作りも素敵です。
いい物がたくさんありますので、気に入ってます!
販売(LOUIS VUITTON)、(CHANEL)、
(GUCCI)、(HERMES)、(COACH)
◆スタイルが多い、品質がよい、価格が低い!
◆信用第一、良い品質、低価格は 私達の勝ち残りの切り札です。
◆当社の商品は絶対の自信が御座います。
◆S/SS品質 シリアル付きも有り 付属品完備!
◆全て激安特価でご提供!
◆送料無料(日本全国)!
↓↓↓
http://www.sssjp.com
http://www.whybag.com
お客さんたちも大好評です:
新品種類がそろっています。
とっても安いし、作りも素敵です。
いい物がたくさんありますので、気に入ってます!
販売(LOUIS VUITTON)、(CHANEL)、
(GUCCI)、(HERMES)、(COACH)
◆スタイルが多い、品質がよい、価格が低い!
◆信用第一、良い品質、低価格は 私達の勝ち残りの切り札です。
◆当社の商品は絶対の自信が御座います。
◆S/SS品質 シリアル付きも有り 付属品完備!
◆全て激安特価でご提供!
◆送料無料(日本全国)!
↓↓↓
http://www.sssjp.com
http://www.whybag.com
Posted by 佐藤恵美 at 2011年03月14日 23:44