3Dの最近のブログ記事
talby #1 living
talbyのサイトでShockwave3Dコンテンツが公開されてました。
Flashムービーをテクスチャに使うのは簡単だけど、
↓こちらはインタラクティブなFlashをテクスチャにしてしまおうというチュートリアル。
解説(仏語)
Mapping d'animation Flash interactive sur un objet 3D
demo(3MB)
3D Flash
Jpeg画像のメンバープロパティ、member("xxx").compressedmedia
2004/9/5追記
どうやらオーサリング環境でしか使えないっぽい。残念。
modelsUnderRay高速化を今度は少し違うやり方で。
■HYO-GONOSUKEさん方式
当たり判定専用の3Dキャストメンバーを別に用意して、modelsUnderRayだけそのワールドで行う。
詳しくは、HYO-GONOSUKEのGAME制作日記参照。
■bamseさん方式
前のエントリーでは対象外グループを消す(worldグループから外す)事で高速化しましたが、bamseさん方式は、判定用モデルだけworldグループに置いて、それ以外の見た目とカメラをworldグループ外にするというやり方。
例えば、"myGroup"に見た目のモデルを入れて、
SW3DMember.group("myGroup").removeFromWorld()
とすればmyGroupはworldに属さないので判定対象から外れます。
そしてカメラのrootNodeをmyGroupにすれば、判定用モデルは不可視になり、見た目用モデルだけが表示されます。
参照:plasma Note 5
■オガワさん方式
modelsUnderRayの回数を半分に減らすというやり方。modelsUnderRayしない時は、前回と前々回のポジションデータから割り出す。
当然精度は落ちるけど、実用上さほど問題なく、負荷は2分の1なので判定対象を減らせない時などに有用です。
参照:もろこしクエスト制作記 :過去ログ
それぞれ好みやケースに合わせて活用しよう。
数少ないSW3D制作者にとっては役立つTIPSです。
modelsUnderRay()は遅いとよく言われますが、というか遅いですが
特定のオブジェクトだけを判定対象にすればかなり速くなります。
具体的には、対象外にしたいモデルをグループに入れて、ray-castingする時だけそのグループを削除します。例えばignoreRaysGroupにモデルを入れて、下記のコードを実行するとignoreRaysGroup内のモデルは計算の対象から外れます。
SW3DMember.group("ignoreRaysGroup").removeFromWorld ()
M = SW3DMember.modelsUnderRay (vector (1,2,3), vector (1,0,0))
SW3DMember.group("ignoreRaysGroup").addToWorld ()
対象外グループを作る方法として、3Dソフト上でモデルのユーザー定義プロパティにignoreRays=trueフラグを設定しておくと便利です。
下記のコードで対象外モデルを選別してグループにまとめることができます。
G = SW3DMember.newGroup ("ignoreRaysGroup")
repeat with i=1 to SW3DMember.model.count
if SW3DMember.model[i].userData[1][#ignoreRays] = "true" then
G.addChild (SW3DMember.model[i])
end if
end repeat
modelsUnderRayに限らずmodelUnderLocやmodelsUnderLocについても同様です。
対象外にするポリゴン数に比例して、かなり効果がありますよ。
modelsUnderRayについて。
軸に沿ってRayを飛ばすより、ずらした方が速くなるという謎のTips。
たしかに効果があった。
Slow:
modelsUnderRay(startPos, vector(0,-1,0), 1 , #detailed)
Fast:
modelsUnderRay(startPos, vector(0.0001, -0.9999, 0.0001), 1 ,#detailed)
ちょっとテストした結果。
1)視野外のモデルも描画速度に影響する
2)ワールド内の全ポリゴン数がmodelsUnderRayの処理速度に影響する
3)camera.yonについて、遠くまで続く地面など単一モデルがクリッピングされても描画速度は向上しないが、遠くの別オブジェクトがクリッピングされて消えれば速くなる
仕事が一段落してやっと自由な時間ができたのでBoids理論を使ったネオンテトラの魚群シミュレーションを作った。

カクレクマノミで作ろうと思ったけど、魚群を作らずツガイで生息することが判明したので今回はパス。そのうちアクアリウムソフトに仕上げたい。
久しぶりにKYUCON 3D CHAT を更新。
変な岩山を作った。
他のユーザーの位置がたまにおかしくなるのを何とかしないといけない。
ついでにブリッジの傾斜地で止まると滑り落ちるようにした。
Lingoメモ:modelsUnderRayの#isectNormalで傾斜を判断。
