ソラマメブログ

2008年08月15日

光について


光源に関しての検証は既に諸氏の手により行われていると思いますが、 Facelightを作るにあたって光についていろいろ実験してみたのでまとめておきます。

結論から言えば以下の通りです。

  • 光源はその自分が操作しているAvatarの腰に近いものから6つが有効
  • 近い遠いは光源半径と輝度による
  • 光源は点光源(オブジェクトの形によらない)
つまり、フェースライトに関しては、光源数は6より多くても どれかが消えちゃうので意味が無い。 形は何であれオブジェクトの中心で発光しているので、中心座標が重要。 ということになります。 まぁ、形はアバタ登場時に透明化が遅れてしばらく見えるときの 雰囲気作りには役立つかも??

なお、これから紹介する検証は周囲(大気)シェーダをONにしています。グラフィックの オプションやビューワのバージョンで若干異なるかもしれません。 なお、ここに記述する内容は私が独自に行ったものであり 正確でない部分があるかもしれませんのでご了承ください:p

 

内容


有効光源数の確認
有効光源数は6つといわれています。その確認です。
通常のオブジェクトではライトのOn/Offがわかりにくいので、 人体実験しました:p

上図は両方とも光源オブジェクトが7つあります。 "半径"はいずれも0.3mで、"弱まる"は0です。各オブジェクトの 背景色は光源色と同じにしてあります。 また、わかり易いように発光しているオブジェクトに白点をつけました。
左図はアバタ上の6つの光源が発光しています。右手右側の橙は発光していません。 右図は、橙を右手首に近づけた場合です。橙が発光し、首の青が消灯しました。 以上から光源数の上限は6であることがわかります。

ちなみに、下の図は画面から一部を見えなくした場合です。赤い線は Snapshot時のwindow枠を表しています。 首の青は消灯したままなので、 画面から見えなない部分の光源も有効になっていることがわかります。

有効光源の選ばれ方(その1)
腰がポイントです。アニメーションの座標、例えばllSitTarget() でも指定するのは腰(pelvis)座標です。 どうやら光源選択においても腰が基準となっているようです。
光源条件等は"有効光源数の確認"のときと同じす。ここでも発光光源に白点 をつけています。
上の例では腰から近い光源6つが発光していることがわかります。 他にもいろいろ試しましたが、腰から近い6つの光源が発光する ことを確認できました。

有効光源の選ばれ方(その2)
その1では、光源の条件が同じ場合でした。 人様のフェースライトで自分のフェースライトが消えるこ状況は 他の条件を考慮しないと説明できません。
ここでは"半径"、"輝度"、"弱まる"、"色"の影響の影響についてみていきます。

半径の影響
下図は、3つの光源をもつフェースライトを装着したアバターを 光源の並んだ壁際に立たせたものです。 つまり、壁の光源は3つ発光することになります。 ここでは、一番奥の光源の半径を変化させました。 左図では、半径が大きくなったものの 一つ手前の光源を飲み込むほどではありません。 右図は奥の光源が手前の光源を覆っており、結果として飲み込まれた 光源が消灯し、飲み込んだ光源が発光しています。

アバターを壁側光源の中に入れていました。 フェースライトの3つのうち1つが消灯しました(下図)。こちらから見て 右側のフェースライトが消えています。

以上からわかるように、光源の座標だけでなく、 半径も考慮する必要があります。
ということで、いろいろ調べてみました。 下図は調査中のスナップショット:p

結論は以下の通りです。

アバターを軸の原点に置きます。 アバターの腰位置から光源sまでの距離をx(0以上の値)とし、 半径を, 輝度をbとするとき、 光源sの評価関数fsは以下のようになります。

  fs = x - b * r......................(式1)

bはここでは1とします(次節ではこの係数について検証します)。
この評価関数が小さいほど発光優先度が上がります。つまり、viewerは あなた(アバター)の周りの光源の評価値を求め、小さいものから順に 6つを発光させていると考えることができます。

上の例における評価値は、外側から順に
  -2.2,-1.0,0.2, 0.8
となり、半径が大きいほど光源としての優先度が高いということを示しています。

以下の例ではどうでしょう。 緑と黄色の光源はどちらが優先度が高いでしょうか?

評価値は、緑が-0.2,黄色の半径が破線ときは0.0、 実践のときが-0.2です。 つまり、破線であれば緑が優先、実践であれば黄色が優先となります。

ちなみに、半径外でも光の影響はあるようです。下図は半径外にアバターをおいた例 です。中は”弱まる”2.0としてますが、光が漏れています。右は完全に色がついているのが わかると思います。優先度と直接関係ありませんが参考まで。

輝度の影響
輝度は先ほどの評価値に影響を与えます。式1のbについて 確認してみました。はじめ "b = 輝度" と予測し検証しましたが、 若干異なるようです。
予測通りであれば、半径3m,輝度1.0の光源と半径6m,輝度0.5の光源は同じ 影響を与えるはずです。結果は半径6m,輝度0.5の方が少しだけ優先度が 高くなりました。輝度0.45くらいで同程度の優先度でした。
面倒なのでその先はさぼりましたが、10%程度の誤差なので、私の中では 式1のbは輝度とすることにしました:p

弱まるの影響
選択される光源に影響ありませんでした。

色の影響
選択される光源に影響ありませんでした。
ただ、黒い光源は応用ができそうです。 下の図は、黒光源をOFF(上)、ON(下)したものです。

両者で違いはありませんが、当然ながらONのときは光源として扱われます。 近くに光源があれば、これまで述べてきたルールで他の光源と競合します。 だけど黒い^^

6つ黒光源をまとえば… おまけに続きます:)

光源形状
最初に述べた通り、光源は点光源です。オブジェクトの形に拠りません。 板状にしようが、棒状にしようが、その中心しか発光しません。
以下に発光オブジェクトの形を球、円柱、棒状、板状と変えた場合のスナップショットを 示します。どれも壁に映った光の状態は同じです。 コントラストは画像処理であげてあります。

まとめ
以上から、他のAvatarへの影響が少ないフェースライトを作るには、次の2点に 注意すればよいということになります。
  • 半径X強度の値を小さくする
  • できるだけAvatarに近い位置に装着する

おまけ
あそびです。良い子はまねをしないでね。
アロハを着たアバターは2つ光源のフェースライトを装着しています。 彼女の周りには3つの光源があり木の根元を照らしています(上)。
そこへ、俗にいう灯台アバターがやってきました。 白ライト(半径最大・輝度最大)4つからなるフェースライトを装着しています(下)。

アロハアバターのフェースライトは消えてしまいました。

で、光源色で紹介した黒ライト(半径最大・輝度最大)6つからなるフェースライトを アロハアバターに装着してみると… 

灯台が消えました^^v 他も消えちゃいますけどね。

えっと、断っておきますが灯台フェースライトを非難するものではありません。 昔のビューワーでは灯台になることは無かったわけですし、 新しいビューワーでも周囲(大気)シェーダーOFFなら灯台にはなりません。 そういった環境で灯台ライトを使う人も、 これから作る人も、他への影響がわからないわけですから不可抗力ですよね。
強力黒ライトの方が悪質ですね^^; ごめんなさい:p

わかんないこと
光源の座標によってオブジェクトへの光の影響度が違います。さっぱり分かりませぬ。 スナップショットだけ残しておきます。

以上です



この記事へのトラックバックURL

http://ada.slmame.com/t336592
認証文字を入力してください