忍者ブログ

Beyond the LightWave

技術だけでは作れない。けれど、集中して作る為の術は技に有ると思います。

   


[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2013/03/08 【ユーティリティ関数_その10】

54b8bd0a.jpeg
残り4つです。
随分のんびりとやってしまいました。

ユーティリティ関数は様々な関数を組み合わせた数式だったので覚える事が少し多かったですね。
でも、そのおかげで「数学」、「条件」、「ベクター」関数の特性が少し掴めたような気がします。



では、「Value Cross Fader」、「Value Decay」、「Velocity」を学んでいきましょう。




【Value Cross Fader (Type A)】
Value-Cross-Fader-A.gif


mapRange([CT1.Position.X],0.000,1.000,[CT2.Position.X],[CT3.Position.X])

 ※:「+」のNull。 スライダー。
 ※:スライダーの範囲。
 ※:緑のBox。 最小値。
 ※:赤のBox。 最大値。


3つのアイテムを利用して1つのNullを操作しています。
赤と緑のBoxはクロス移動する為の範囲になっていて、「+」のNullを指定した入力数値の範囲(今回の場合、0 m~1 m)に移動すると緑に接着していたボールが赤のBoxの方へ接着します。

さらに、「+」のNullを中間の「500 mm」の位置に移動すると、Lscript関数の「center」のような制御が出来るようになります。

「接着するアイテムの切り換え」、「アイテム間の中心値」と、一人二役こなしていて制御方法の自由度が高いのでとてもお世話になりそうです。


 


【Value Cross Fader (Type B)】
Value-Cross-Fader-B.gif


([CT2.Position.X]*[CT1.Position.X]+[CT3.Position.X]* ( 1.0 - [CT1.Position.X] ) )

 ※:緑のBox。 最小値。
 ※:「+」のNull。 スライダー。
 ※:赤のBox。 最大値。
 ※:スライダーの範囲。
 

タイプAとほぼ同じです。
違う点は数式(※)が全く異なる事と、接着するアイテムが逆になっていることくらいです。
(※:数式は「mapRange」が略化してた部分が式として表記されている。)

タイプAとタイプBどちらかを使うとしたら値が見易いタイプAになりそうかなぁ。
タイプBはこの数式から更に編集したい時に使いそうな気がします。



 

【Value Decay】
532aa2b1.png

ビルダーには「統計的な 'J' カーブを作成し~」と書かれていたので、曲線的なモーションを作る時に便利ということなのかな?

前々の記事で「Projectile Motion」を使って曲線的な移動を作りましたが、それとはちょっと違う感じみたいですね。
(上のグラフを見れば分かりますね。ちょうどJ字を寝かせたような形になってます。)
 

しかし、このExpressionには問題があります。
Expressionビルダーで入力値を指定してエクスプレッションを作成すると


ebaca6b3.png



このようなパネルが出現します。
つまり、Expressionの値が正しくないということですね。
作成された数式を見てどこがおかしいのか調べてみると、どうやら
 

exp( ( log( 0.5 /[CT1.Position.X]) *[CT2.Position.X]) )
 

この除算記号「/」が原因でExpressionが適用されないようです。
この記号を以下のように
 

exp( ( log( [CT1.Position.X]/0.5 ) *[CT2.Position.X]) )
 

と、位置を変えれば適用出来ますが正しい結果が得られません。
もしかしたらこの除算記号が間違っているのかもしれませんね。
除算記号「/」から減算記号「-」に置き換えることで上のようなグラフの形状を作り出すことが出来ました。
 

exp( ( log( 0.5 -[CT1.Position.X]) *[CT2.Position.X]) )
 

多分、これが正解なんじゃないでしょうか?
確信が持てませんが、今のところこれでまともに操作出来るしグラフのパスからもそのような感じがします。
 


寄り道の追記:「exp」と「log」

Expressionが適用出来なくて悩んでいる時、原因を探るために数式を分解したり関数の意味を調べていました。

その時「exp」と「log」の数学関数を学んだので簡単に説明します。
あまり数学的な事は書かないので詳しく知りたい方は「指数関数」と「対数」を調べて下さい。



【exp(指数関数)】

この関数の特徴は0フレーム(中心点から)は必ず+1 (m)になること。
そして徐々に値が大きくなっていきます。
この効果はLscript関数の「pow (累乗)」に似ていますが、「exp」と比べると以下の違いがあります。

 

4d8af54d.png
 pow:等速的の加速。

 

786648e4.png
 exp:変速的な加速。


このグラフを見れば「exp」が持つ効果が理解出来ると思います。



 

【log (対数)】
7579821a.png

これがパスを急激にJ字の形状に作る元みたいですね。
「Value Decay」ではlogはマイナスの値が入力値になっていて、さらにその値をexpで変換しています。

 




話はまた「Value Decay」に戻って、現在の数式のままではExpressionを適用したアイテムは「exp」の影響で+1 m移動してしまいます。
出来ればデフォルト値を0 mにしたいので値を以下のように編集していきましょう。
 

-1.0+(exp( ( log( 0.5-[CT1.Position.X]) *[CT2.Position.X]) ))
 

全ての値をカッコで閉じて-1.0の値を足してやります。
こうすることでExpressionを適用したアイテムのデフォルト値は0 mになります。
試しに入力値側の2つのアイテムを簡単に移動してみると、適用側のオレンジ色のBallアイテムにヨーヨーのような綺麗なカーブを持たせた動きを付けることが出来ました。
 

【こんな動き】
Value_Decay_test_yo_yo.gif

あと、二つのポジションのチャンネルにこのExpressionを適用して、値の欄に入力値であるCT2のチャンネル部分を「Time」に変更すると斜め直線移動が出来るようになります。

 


【Velocity (Description)】

これは前記事で紹介した「Speed」と全く同じで、数式も同じで値を手動で入力するものです。
「Speed」ではベクトルの値に対する速さを求めましたが、「Velocity」ではチャンネルの値が速さを求める為の入力値になります。

ただそれだけです。
 




長かったユーティリティ関数もこれで全て終わりです。
もし、一からExpressionを学ぶなら様々な関数や数式を組み合わせているユーティリティ関数は最後の方が良かったかもしれませんね~。
(そこが今回の大きな失敗だったかも。)

拍手[0回]

PR

COMMENT

NAME
TITLE
MAIL(非公開)
URL
EMOJI
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
COMMENT
PASS(コメント編集に必須です)
SECRET
管理人のみ閲覧できます

カレンダー

03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

プロフィール

HN:
d_suzukky
性別:
男性
自己紹介:
こんにちは、d_suzukkyです。

田舎暮らしでのほほんと3DCGの勉強をしています。

ブログ内検索

Booklog

最新トラックバック

バーコード

フリーエリア

Copyright ©  -- Beyond the LightWave --  All Rights Reserved
Design by CriCri / Photo by Geralt / powered by NINJA TOOLS / 忍者ブログ / [PR]