2013-03-25 53 views
2

在我的Unity項目中,我有一個動態網格系統,需要大量優化。目前我正在尋找一種算法,通過在運行時刪除重複的頂點來優化網格(網格被組合成一個巨大的網格)。去除佔據相同空間的重複面很容易,因爲如果它們在閾值內共享相同的空間(因爲它們不會顯示),它們都可以安全地移除。在Unity中運行時刪除重複頂點

我對重複頂點有點麻煩,因爲它們需要以某種方式去除,或者網格完全搞砸了。在我第一次嘗試它之後,我得到了包含頂點的Vector3對象的數組,並且我能夠在一定程度上操縱它。看起來,刪除只是它的一半,因爲在查看更多網狀拓撲之後,似乎我需要在刪除另一個之後進行更多的合併。

這是我基本卡住的部分。看起來,我認爲這會很簡單。獲取所有需要移除的頂點的三角形,並將三角形重新分配給停留的頂點。但在實踐中並不那麼容易。

首先,有沒有更簡單的方法?我很驚訝Unity沒有合併頂點腳本,或者至少是一個例子。其次,有沒有更好的方法,以及如何?我遇到了空間哈希,然而,我仍然停留在我以某種方式合併頂點的部分。第三,合併實際的頂點。我應該如何以最有效的方式解決這個問題?

+0

Unity 4之後,在Droid和iOS發佈設置中,他們確實有一個名爲「優化網格」的通用複選框。我不知道它是否會優化到你上面談論的程度。您是在優化移動平臺的頂點以增加FPS,還是針對Web項目/獨立?只是好奇.. – ApolloSoftware 2013-03-25 21:16:59

+0

@AmitApollo該項目是爲桌面,它被用來在運行時構造網格。基本上是關卡編輯器,如果你願意,但它主要由基於網格的元素組成。我將這些網格組合起來,以便移除面(這比頂點要容易得多),並且頂點會帶來相當大的性能增益。 – ContingencyCoder 2013-03-25 21:20:48

+0

我不明白你是如何得到重複的頂點。你能解釋一下嗎? – 2013-03-25 21:50:31

回答

1

在這種情況下會使用HashSet嗎?對於那些不知道的,HashSet就像一個列表,但是在搜索元素時速度要快得多。由於HashSets的特性,它們不能存儲重複項。將頂點存儲在HashSet中可能意味着不添加任何重複項,幾乎沒有處理能力。

我知道這個問題很老,但我想我會盡我所能幫助其他人尋找這個答案 - 我不是一個編程專家,只是認爲寫這不會傷害。