首先。unity是一款遊戲引擎。不是影視渲染器。所以。不大會有人在遊戲引擎裡面做幾千個動態模型的實時動力學計算。畢竟實時渲染和預渲染的差距還是很大的。
因為unity是遊戲引擎。所以它的物理碰撞效率是取決於顯示卡效能的。比如N卡就是使用的nvidia physx。這和影視預渲染基於CPU不同。所以,如果你用unity開發專案。一張好的遊戲顯示卡比專業製圖顯示卡頂用的多,在這點上,你的麗臺K620可能還比不上街頭2快錢一小時的網咖機器……
如過一定給個最佳化建議,首先。降低collider面數。我見過好多開發者直接拿模型就給上一個meshcollider,這是非常粗糙的做法。遊戲行業裡面一般這麼幹:真正參與渲染的模型一般面數比較高。所以我們會在這個模型上面拓撲出一個面數比較低的模型出來,讓這個低模代替高模參與物理計算。比如如下這張圖。
但是。你是幾千個模型,我估計你也沒有那麼閒的功夫幾千個模型一個個的去做低模。那麼。就在簡單一點。直接拋棄meshcollider吧。用boxcollider。這個指令碼會按照你的模型的軸向和長寬比,生成一個大小匹配的box來參與物理計算。其實你完全不用擔心效果不好。在實際使用中。幾千個模型動力學算起來,這點小誤差其實是不容易發現的。
真正的遊戲專案裡面。那種爆炸,倒塌,很炫酷的效果也很多。但是也沒有很消耗效能。其實。遊戲裡面的視覺效果很多都是使用了其他的障眼法來實現的。比如粒子。一個好的粒子特效加上少量幾個實體模型的物理動畫。完全可以做出影視級的爆破效果了。
還有一種很笨的解決辦法。就是預計算。首先在maya或者3Dmax裡面。吧你要的動畫效果。幾千個石塊爆炸的動畫,先解算好。然後吧動畫資訊透過FBX檔案匯出來。這樣,在unity裡面只需要播放動畫就可以了。不需要消耗大量的計算了。
首先。unity是一款遊戲引擎。不是影視渲染器。所以。不大會有人在遊戲引擎裡面做幾千個動態模型的實時動力學計算。畢竟實時渲染和預渲染的差距還是很大的。
因為unity是遊戲引擎。所以它的物理碰撞效率是取決於顯示卡效能的。比如N卡就是使用的nvidia physx。這和影視預渲染基於CPU不同。所以,如果你用unity開發專案。一張好的遊戲顯示卡比專業製圖顯示卡頂用的多,在這點上,你的麗臺K620可能還比不上街頭2快錢一小時的網咖機器……
如過一定給個最佳化建議,首先。降低collider面數。我見過好多開發者直接拿模型就給上一個meshcollider,這是非常粗糙的做法。遊戲行業裡面一般這麼幹:真正參與渲染的模型一般面數比較高。所以我們會在這個模型上面拓撲出一個面數比較低的模型出來,讓這個低模代替高模參與物理計算。比如如下這張圖。
但是。你是幾千個模型,我估計你也沒有那麼閒的功夫幾千個模型一個個的去做低模。那麼。就在簡單一點。直接拋棄meshcollider吧。用boxcollider。這個指令碼會按照你的模型的軸向和長寬比,生成一個大小匹配的box來參與物理計算。其實你完全不用擔心效果不好。在實際使用中。幾千個模型動力學算起來,這點小誤差其實是不容易發現的。
真正的遊戲專案裡面。那種爆炸,倒塌,很炫酷的效果也很多。但是也沒有很消耗效能。其實。遊戲裡面的視覺效果很多都是使用了其他的障眼法來實現的。比如粒子。一個好的粒子特效加上少量幾個實體模型的物理動畫。完全可以做出影視級的爆破效果了。
還有一種很笨的解決辦法。就是預計算。首先在maya或者3Dmax裡面。吧你要的動畫效果。幾千個石塊爆炸的動畫,先解算好。然後吧動畫資訊透過FBX檔案匯出來。這樣,在unity裡面只需要播放動畫就可以了。不需要消耗大量的計算了。