Houdini 利用圓切面來做環繞球型的線

前陣子有一個需求效果,是要做許多環繞在球型上的切線。

在經過幾個測試評估後,決定在球心附近產生亂數點,給予方向屬性,然後找出通過此點並垂直球心的的圓切面來取得線段,可以達到最大的調整彈性跟計算效率。

產生參考點

首先就是要產生每個切線的圓心,利用一顆要小許多的球來產生點,讓範圍只在球心附近徘徊,因為不想產生半徑太小的圓切面。

設定參考點屬性

接著幫每個點設定隨機的垂直 up 跟 N,去決定圓切面的方向。

求出圓心

最重點的地方,利用數學公式去找出通過點並垂直球心的圓心。

整理後的公式如下:

vector getCircleCenter(vector p_normal, p_pos){
    float a, b, c, x, y, z;
    assign(a, b, c, p_normal);
    assign(x, y, z, p_pos);
    float d = -a*x - b*y - c*z;
    float t = -( d / (a*a + b*b + c*c) ); 
    return p_normal * t;
}
// p_normal = 點的N,p_pos = 點的位置,這是圓心為{0, 0, 0}下的簡易公式

有圓心後再依據其方向投射到球面(外殼)的位置找到半徑數值寫在pscale裡面,並用copy circle的方式便可以產生環繞球型的切線。

particle點綴

這邊是點綴效果,讓每個線上都有particle在跑,因為有up跟圓心的數值,可以用cross product輕鬆求出v值的方向做出這個效果。