2016年12月20日火曜日

年末商戦 VRHMDを買うならどれよ?という話

まぁ雑に

・PC用VRはどうしてもプレイしたいコンテンツが具体的にあって
 予算もPCのアップグレード込みで最低20万くらい準備できるなら今買っても問題無い

 買って後悔するのが嫌なら第二世代VIVEの発表やwindows10がVR対応する来年を待て

 エロ目当てならVIVEがええ
 Riftはトラッキングセンサー周りの問題が多すぎるのでオススメしない

 RiftのDK2とDK1は もらえるならアリだがわざわざ買うのはやめとけ
 今となっては低スペすぎて地雷だ

・予算10万ならPSVRで一式揃う
 ただしプレイできるタイトルが基本的に既存ゲームシリーズのスピンオフばっかりなので
 もうしばらくタイトルが出揃うまで待ったほうがいいかもしれん


・SLでVRやりたいなら LumiyaてビューワーがVRモードに対応した
 対応するスマホは とりあえずdaydreamとかcardbordとかその辺対応してるかをチェック

 android6.0対応のキャリアスマホなら大体ついてるはずだ
 ハードの機能的な話だと"ジャイロセンサー"ってのを積んでるやつを選ぶこと

 ちょっと前ならポケモンGOのARモードフル対応してるかを確認すればよかったんだが
 最近は互換モードで動いちゃうからなぁと


大体この辺

以上

2016年12月19日月曜日

メモ ワイヤリングでIKを使う場合の話

まぁあdaeでエクスポートするときは結局マージしないといけないけどね


バージョンは2.77

参考サイト

インバースキネマティクス(IK) その1【Blenderの便利な機能を超簡単に紹介】


IKのやり方について

まずそれっぽい形状にベースのワイヤーを作る

アーマチュア(ボーン)を作って ワイヤー→ボーン の順番に選択して親子付する

ウェイトはとりあえず自動でもいけるみたいだけど
挙動的にウェイトペイントはやり直したほうがよさげ

ウェイトペイント手順は
アーマチュアをポーズモードでボーン選択
その後オブジェクトを選択してウェイトペイントモードにすると

あとは選択したボーンのウェイトが出て来るのでペイントで修正する
ペイントのブラシは左側に切り替えボタンがあるはずだ


単純に位置だけ調整でなんとかなるワイヤリングならIKのみでいけるが
そうでないなら"たわみ"の挙動が自動だとあんまよくないので

ボーンの回転ある程度手付けせんとだめくさい


IKのチェーン長に関しては
デフォルト設定のままいじるとゼッテー崩壊するので
ある程度設定は見といたほうがいい




dae出力する前段階のマージする話 最終的な手修正が必要な場合も同上


とりあえず ワイヤ→アーマチュア の順番で選択して移動コピーする

ワイヤ側についてる モディファイアのアーマチュアを適用してしまう

そのあとプロパティのオブジェクトタブで ワイヤの親子関係を削除
(ここの手順で結構ハマってしまう場合がある)

親子関係カットしたアーマチュアは邪魔なので削除してしまう




作業中にハマりそうな罠

モディファイア適用のチェック入れて出力すると何故かポリゴンメッシュが二重化するので
出力オプションに頼らずに複製して適用して出力すること



大体この辺だな

以上

2016年12月10日土曜日

割と旧世代の書かれ方したスクリプトを現代の技術で軽量化する場合のお話

具体的には1プリム複数スクリプト状態を是正するための話

・リサイズスクリプトはllScaleByFactor使っとけ

 これで回避出来ないissueはMOD可にして対応しろ 時間と手間の無駄になる
 スクリプトでリサイズしつつ平面マップ貼り付けした面をどうにかしたいとかだと
 とりあえず面番号と貼ってあるテクスチャのUUIDは現状どうやったって必須なので
 そっち方面の専門家(最低でもダンプが取れること)に依頼して
 専用ロジックを組んでもらう以外の方法は無い

 可能ならルートプリムのXYZどれかを1Mとかにすると
 いきなりリセットかかったりした際の管理が楽だ

あととりあえず避けないといけない部分として

・物理ヴィークルで特定のプリムのみでコリジョンを拾いたい場合は
 そのプリムにスクリプトを入れてLSL2でコンパイルする

これだけはもうSLのSIM自体のバグによるものなのでここだけはどうにもならん
ヴィークル系で完全シングルスクリプトのは無理だ 諦めろ

あとはレスポンスアップとか作動のスムースさの話

・llSetLinkPrimitiveParamsFast は可能な限り最小の回数で済ます

大昔だと大量のパーツを同時稼働するためだけに
全部の稼働プリムにこれだけが入ってるやつとかあったっぽいな

 PRIM_LINK_TARGET これを多用すること
 逆にこれを使えない構造になっているロジックはレートコントロールとか考えたほうがいい

・SetTextとTargetOmegaはllSetLinkPrimitiveParamsにある

大昔のスクリプトだとボタン類とかホイール類で
この辺やるためだけにスクリプト分割するのが常道だったんだけど
現在ならPRIM_LINK_TARGETと併用することでスクリプトを使わなくて済む

・テクスチャアニメとパーティクル再生は一枚のスクリプトに全部ぶちこむ


これでカバー出来ないレベルで大量のパーティクルやテクスチャアニメの同期制御があるなら
コンセプト自体に何らかの間違いがあるから再検討すること

・モデリング段階でのピボットオフセットは場合によっては危険だが有用

 当たり判定を考えなくて良くて関節が一個でスイングさせたいだけならかなり有用
 ただし自動車のドアみたいな複数の関節制御や
 ある程度形状通りのまともなコリジョンが必要な場合はスクリプトでやったほうがええ

2016年12月2日金曜日

手動リセットする手段が無いスクリプトで複数ステートをまたぐ場合 onrezが無いと死ぬ

ものすごい具体的には

特定の変数をリセットしたくないがイニシャライズだけは通したい みたいな場合な

現状でinit みたいな初期設定ステートがあり
そっから mode1 mode2みたいな分岐の仕方するやつ

resetってステート作って一端全部そこに飛ばしてから initを通す場合

reset自体に state_entryしかない場合

resetに飛んでstate_entryが始まる前にtakeやdetachされると

state_entryが破棄されて 再び装着やrezをしても

resetのステートから抜ける手段が存在しないために
その状態でスクリプトがデッドロックになる

対策は
全部のステートに何らかの形でonrezイベントなりattachイベントを入れて
そっちで正常系の作動をするように修正することとなる

今更こんなとこで引っかかるやついないだろと思うんだけど

まぁ引っかかってしまった当事者なので記録とする

以上