小夥伴們是否玩過很多3d的遊戲呢,想要製作3d遊戲你可以使用Speedtree for Unity最新版,但是很多朋友都想知道speed tree是如何渲染樹木,或者speed tree怎麼光照渲染,那麼你可以耐心的往下看,使用何種技術來渲染大範圍的植物一直令我不解。因為在很多遊戲中對樹木的渲染都可以很明顯地看到多邊形的痕跡,而在speed tree中你幾乎看不到任何破綻,繁茂的樹葉、精確的光照、shadow、self-shadow,這些元素構造起了一個完美的樹木。
在speed tree中將所有的植物模型保存在.spt文件中,一個model按照我的觀察應該分為三部分:主幹、支幹、樹葉。主幹是指樹木本體和其最粗大的枝幹,這主要是由mesh構成,一個比較有意思的地方在於speed tree並不是使用通常的頂點來保存這個mesh,而是使用多條貝塞爾曲線來保存整個mesh,在運行時再轉換為mesh,按照我的考慮這樣做有兩大優勢:一個是非常方便做mesh的lod,因為貝塞爾曲線是一個函數,可以快速獲得任意位置的頂點坐標,這樣不必象一般的mesh那樣預計算lod數據,減少了內存的占用量。另一個是非常方便做碰撞檢測,使用曲麵要比一般的mesh使用的bv tree檢查碰撞效率要高很多。
支幹是指樹木上較細的枝幹,在真實的樹木上枝幹是非常多的,如果使用mesh來對這一部分建模,那麼渲染的負擔是非常可觀的,因此對這一部分speed tree使用了一個簡化模型,每一個支幹由兩個quad mesh構成,這兩個quad形成一個V字型,然後將支幹的貼圖渲染到quad上,通常情況下支幹的主枝位於兩個quad的接縫處,這樣做完alpha blend後會是一個V型的立體模型,不仔細觀察很難發現這隻是有一張紋理產生的支幹。
對於樹木的樹葉speed tree處理起來更加簡單,就是一個billboard加上樹葉的紋理,這樣大量渲染時負擔也不是太重。
speed tree中對樹木的光照分為三部分進行處理:對於主幹部分使用的是per-pixel lighting,因為speed tree中帶有normal map。支幹部分由於是兩個quad mesh因此計算光照時使用麵法線,這樣一個quad總是一個麵為亮麵另一個為暗麵。而對於樹葉稍微有些複雜,由於樹葉是illboard,因此不能用法線,而是根據樹葉的位置來確定光照值,根據我的觀察speed tree根據樹種的不同使用了多種光照模型來確定光照,最簡單的一種是通過sunlignt的方向獲得一個和其垂直的通過樹木中心點的水平軸線,將樹葉分成兩部分,一部分渲染為帶光照,一部分渲染為不帶光照。
Tree C Technology推VR4MAX 7插件新增天氣係統