2011年11月28日月曜日

カウントダウン!

どうにかしてカウントダウンのようなツールが出来ないかな?
ということで、たどり着いたのが「jQuery」

なんとなくしか知りませんでしたが、使ってみると色々な事が簡単に表現できて重宝します。

スタイリッシュなカウントダウンパーツを作成するjQueryまとめ「9 Cool jQuery Countdown Scripts」

上記のサイトを参考にして、例えば「○○の締め切りまで 残り...」 という具合で、
残りの日数をカウントダウン表示できます。


3dsMaxだけでなく、他のDCCツールもHTMLを表示させることは簡単なので、
色々な応用ができるんじゃないかと思います。

2011年11月25日金曜日

実行時間の計測

処理時間の削減を行いたい時など、
作成した処理にどの程度時間がかかっているか?を調べたい時などに。

いわゆるタイムスタンプを使用する一連の処理をまとめてスクリプト化しただけですが、
時々使う気がするのでアップ。

myStopWatch.ms をMaxScriptフォルダのStartupフォルダに格納しておくと、
3dsMax起動時にタイムスタンプを扱う関数が生成されます。
タイムスタンプを計測したい場合、下記のようにします。
実行結果は下記のように出力されます。
※このツールをインストールしていないPCに
上記関数を埋め込んだままスクリプトを配布しないよう注意して下さい。

MatineeでSkeletalMeshにヘッドトラッキングをさせる

自分で調べたはいいものの、きっと忘れそうなので備忘録として。

MatineeでアニメーションさせているSkeletalMeshに
ヘッドトラッキングをさせるにはどうすればよいか?

 全体の流れ                                         
  1. 骨格コントロールを実装したAnimTreeを作成する
  2. 対象のSkeletalMeshはSkeletalMeshMATとしてレベルに配置する
  3. 作成したAnimTreeをSkeletalMeshMATに設定する
  4. Matineeを用意(以降Matinee編集)
  5. アニメーションは普通にAnimControlトラックにて設定(Slot指定)
  6. HeadTrackingトラックを追加

 1. 骨格コントロールを実装したAnimTreeを作成                   


 AnimTreeノードに骨格コントロールを追加するには、
 事前にAnimTreeノードのプロパティ設定が必要。
  • [Preview SkeletalMesh] に対象のSkeletalMeshを設定する

 設定後、AnimTreeノードを右クリックして、
 ヘッドトラッキング対象のボーンを選択していく。(骨格コントロールチェーン)


 作成されたボーンのコネクタに対して、[SkelControlLookAt]ノードを作成する。
 [SkelControlLookAt]ノードのプロパティを編集する
  • [Control Name] にいい感じの識別名を設定
  • [Look At Axis] or [Invert Look At Axis] などを調整し、正しい状態にする
  • [Max Angle] など必要であればリミットをかける

 2. 対象のSkeletalMeshはSkeletalMeshMATとしてレベルに配置         
 3. 作成したAnimTreeをSkeletalMeshMATに設定する                
 4. Matineeを用意                                     
 5. アニメーションは普通にAnimControlトラックにて設定(Slot指定)        



 6. HeadTrackingトラックを追加                              


 対象のSkeltalMeshグループに、[HeadTracking]トラックを追加する。
 トラッキング状態にしたいフレーム区間をトリガーでON/OFFしておく。
 [HeadTracking]トラックのプロパティを設定する。
  • [Track Controller Name] AnimTreeで設定した識別名(Control Name)
  • [Look At Actor Radius] ルックアット有効範囲を設定
  • [Disable beyond Limit] 有効範囲を使用するのであればチェック
  • [Target Bone Names] 特定のボーンをルックアットするなら設定

 結果確認                                          

 正面

 左へ移動

 右へ移動



2011年11月24日木曜日

ウィンドウ状態の保存と復元

ウィンドウ(ロールアウト・ロールアウトフロータ)を使用するツールを作成する時、
ウィンドウの状態を保存・復元するというのをよく実装します。

例えば下記のようなものを扱います
  • ウィンドウ位置
  • ロールアウトの開閉状態
  • チェックボックスのチェック状態
以上のような情報をウィンドウがクローズされたタイミングで、
設定ファイルとして保存する。

そして、次回起動時に設定ファイルの情報をもとに
前回起動時の状態を復元します。


この時、標準で読み書きが提供されているINIファイル関数を私はよく使用します。

 ウィンドウがクローズされたタイミングで情報を保存する事が多いので、 ほとんどロールアウトが閉じられた時に実行しています。
ロールアウトのmovedイベントで一時的にウィンドウ位置を変数に格納していますが、
ロールアウトを使用した場合、createDialog後にウィンドウ位置を
取得する方法がわからなかったからです(^^; )

ロールアウトフロータを使用する場合は、フロータのプロパティから
直接その時のウィンドウ位置が取得できます。


外部ファイルに何か情報を保存する際、
直接テキスト出力したり、XMLを使用する方法もありますが、
手軽なこの方法を使用する事が多いです。



2011年11月23日水曜日

ソースコード掲載にあたり、SyntaxHighlighter を設定

今後、ソースコードを貼り付けていくので、
SyntaxHighlighter のテストをしておく。


導入は下記を参考にさせていただきました。
BloggerにおけるSyntaxHighlighterの使い方


maxScriptは対応していないので、"js"を指定しておく。

※上記コードをscriptタグで表示することは出来ないようですね。
preタグで囲んで表示させています。


試し書き1:基本スタイル
local myName = ""

myName = "0303"

if myName == "0303" do (
    print "hello world!"
)  

問題なさそうですね。


下記サイトに進んだ使い方があったので参考にさせて頂きました。
ブログ上でプログラムソースを表示する方法②

試し書き2:よく使いそうなタイトル表示と行ハイライト