はじめに
Unityのポイントライトの影でグリッドを出してみました。
今回はこの3Dモデルの作り方を紹介します。
www.youtube.com
作り方
グリッドを球面へ投影したようなモデルを作ります。 このモデルと点光源が地面に映し出す影はグリッドの形になります。
投影点の座標の求め方
線分PAの長さをD, 線分PBの長さをd、球の半径をRとおいたとき、以下のようになります。
dが分かれば、投影点Bの座標が分かります。
長さdの導出
三角形 HPA と 三角形BPHは相似なので、以下が成り立ちます。
投影点Bの座標は以下のようになります。
Houdiniで実装する
投影点Bの座標が求まったので、次にこれをHoudiniで実装します。
Grid
Gridノードを使ってグリッドを作成します。
PolyExtrude
PolyExtrudeノードを使ってグリッドに穴をあけます。
Attribute Wrangle
投影点の座標を計算して、グリッド点を球へ投影します。
vector origin = { 0, 1, 0 }; // 点Pの座標 vector p = (@P - origin); // 点Pから平面へ向かうベクトル vector dir = normalize(p); // 正規化 float R = 0.5; // 球の半径 float D = length(p); // 点Pから平面上の点までの距離 float d = 4 * R * R / D; // 点Pから投影点までの距離 @P = origin + d * dir; // 投影点の座標で置き換える
投影したモデルは、ROP FBX Outputノードなどで3Dモデル化します。
完成
モデルをUnityへ取り込み、点光源を置くと、影がグリッドになります。