3DCGbook

映像プロダクションに所属しています。主に毎日のアウトプットを配信していこうと思います。

Level of Detail in Maya

学校で数学を勉強していた時に僕は、
「こんなん実際に使うことないねん!」と思っていました。

ただいろんな場面で使えるんだなぁ…
といい歳こいた今実感しております。

今回は、これを使ってみましょう。

y = mx + b

これは誰でも見覚えがあると思います。
2次元の傾き・切片型の直線の式となります。

これを利用してLevel of Detailを表現してみましょう。

Level of Detailとはカメラとオブジェクトの距離によって
オブジェクトの頂点数を増減させるものです。

今回はポリゴンのsmoothの機能と直線の式を使って作ってみます。
pCube1とcamera1を作って、以下のExpressionを入れます。

vector $objPosition = `xform -q -ws -rotatePivot pCube1`;
vector $cameraPosition = `xform -q -ws -rotatePivot camera1`;
vector $afterSubtraction = $objPosition - $cameraPosition;
float $distance = mag($afterSubtraction);
int $division = -0.166*$distance + 4.966;
polySmoothFace1.divisions = $division;

これはオブジェクトとの距離が、
30の時にsmooth Division4に。
6の時にsmooth Division1になるようになっています。

数学も3Dで勉強するとちょっと面白いですね。