VRエンジン作成日記

ひたすらVRエンジンを作っていきます

コライダーの枠線を表示する機能を追加

ボックスコライダーとスフィアコライダーの枠線を表示する機能を追加した。また、ボックスとスフィアの当たり判定を修正した。

その他の変更点

・ラインレンダラのZ方向の値を反転

・スフィアコライダーの設定用UIを追加

 

・関連するコミット

add: box collider outline · hikipuro/tea.js@0a95959 · GitHub

 

クリックした時にオブジェクトを選択する機能を追加

シーンビューでオブジェクトをクリックした時に選択する機能を追加した。

その他の変更点

・1つのオブジェクトに同じコンポーネントを2個以上追加できないように修正

・スフィアコライダーを追加

 

・関連するコミット

add: select object when clicked scene view · hikipuro/tea.js@04958dc · GitHub

 

オブジェクトの選択範囲を表示する機能を追加

オブジェクトの選択範囲を表示する機能を追加した。110%に拡大したオブジェクトを事前に単色で描いておくことで、選択範囲っぽく表示している。シーンビューの状態が少し分かりやすくなってきた。

・関連するコミット

add: selected object outline · hikipuro/tea.js@141135a · GitHub

 

ライトの範囲をシーンビューに表示する機能を追加

昨日、カメラの視錐台をワイヤーフレームで表示する機能を追加したので、その流れで今日はライトの範囲を表示する機能を追加した。

次は選択されたオブジェクトの枠線を描く機能と、コライダーの範囲を同じようにワイヤーフレームで描く機能を追加したい。

・関連するコミット

add: draw light range feature · hikipuro/tea.js@89f8d95 · GitHub

 

視錐台を表示できるようにした

シーンビューで 視錐台を表示できるようにした。今のところ、ワイヤーフレームで簡単に表示している。

AnimationCurveについては、ひとまずweightを考えないことにした。いくつか前のバージョンのUnityではtangentの編集機能だけだったみたいなので、それと同じような感じになっていると思う。

・関連するコミット

add: draw frustum planes to scene view · hikipuro/tea.js@b5d85ee · GitHub

 

ベジェ曲線の描き方を調べなおしている

ベジェ曲線の描き方を調べなおしている。AnimationCurveクラスに実装を書いているんだけど、weight値を自由に設定した時に思ったような値が出ていなさそうだった。(3次の) ベジェ曲線は雑に言うと次のような感じで求める。

X(t) = t^3 * X0 + t^2 * X1 + t * X2 + X3

Y(t) = t^3 * Y0 + t^2 * Y1 + t * Y2 + Y3

t値を与えるとX,Yそれぞれの座標が出てくるような計算になっている。tというのはtimeのことだと考えている。tは0から1の間の実数の値を取るので、割合 (パーセント) として考えた方が分かりやすいのかもしれない。

3次のベジェ曲線というのは、2つの座標と2つの制御点からなる、合計4つの点で構成される曲線で、上のX0からX3、Y0からY3がそれぞれの点の座標になる。

どこら辺に行き詰まっているのかというと、Unityの場合はAnimationCurveクラスから曲線を求める時、Evaluateというメソッドを呼び出すんだけど、このメソッドのC#の定義は次のようになっている。

float Evaluate(float time)

認識が間違っていないとすれば、これは (t値ではなく) X座標を渡すとY座標が得られるような構造になっているのではないかと考えている。ただ、本当に1つの値を返すことができるのかという疑問がある。

上の2つのベジェ曲線の式を見てもらえれば分かると思うけど、3次関数になっている。3次関数ということは解が1つに定まらないのではないか、という気がしてしまう。AnimationCurveクラスの曲線の場合は、どんな形に曲げても解が1つに定まるんだろうか。

あともう1つ困っているのは、地道に解こうと思っても3次関数の解を出す公式が難しいというのがある。2次のベジェ曲線だったら簡単に疑問が解決したかもしれない。

別のところで考えてみると、AnimationCurveの4つの点はKeyframeというクラスに実装していて、Unityの場合はKeyframeから制御点を求める時、元の座標からの相対X,Y座標ではなくて、tangent (傾き) とweight (X方向の重み) という値で求めるような構造になっている。なぜ相対X,Y座標ではないのかという疑問が自分の中で解決していない。

 とりあえず、UnityのAnimationCurveにいろんな値を入れてみて挙動を見るというのが解決の糸口になる気がしてきた。

 

アニメーションカーブのエディタを作り始めた

アニメーションカーブのエディタを作り始めた。イラストレータみたいに、コントロールポイントとアンカーポイントでカーブを設定できるようにしたいんだけど、今のところカーブを描く機能しか作れていない。

グラデーションのエディタは、今のところほぼ不満なく動くようになった。

・関連するコミット

add: animation curve ui · hikipuro/tea.js@39d1f3c · GitHub