第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

訪問網(wǎng)格頂點性能問題

訪問網(wǎng)格頂點性能問題

C#
UYOU 2021-11-28 19:36:15
我遇到此代碼運行緩慢的問題(執(zhí)行循環(huán)大約需要 250 毫秒)mesh.triangles.Length 是 8700。我在最新的 Unity 平臺(版本 2018.2.3)上使用 c#。我懷疑這是因為我每次迭代都在兩個數(shù)組之間切換,即。我從三角形中取一個值,然后查找它的頂點元素。mesh.triangles 是一個整數(shù)數(shù)組。mesh.vertices 是 Vector3 的數(shù)組。while (j < mesh.triangles.Length)  {    m_Particles [currentParticlePos].position =  vertices[mesh.triangles[j]];       // allocate a particle to every 3rd vertex position.    j = j + 3;    currentParticlePos++;}
查看完整描述

3 回答

?
阿晨1998

TA貢獻2037條經(jīng)驗 獲得超6個贊

在這里手動強制進行一些微優(yōu)化可能會對您有所幫助。


首先,mesh.triangles是一個屬性,有自己的 getter 和 setter。每次循環(huán)都會對性能造成輕微影響。因此,讓我們在循環(huán)開始之前將該地址存儲為局部變量。


其次, 的值mesh.triangles.Length始終相同。因此,讓我們將其存儲在局部變量中,而不是在每個循環(huán)中調(diào)用該屬性。


從那以后,您的代碼使用vertices [ ]而您的問題是指mesh.vertices [ ]. 如果您正在檢查mesh.vertices [ ]每個循環(huán),您還需要在本地存儲它。


現(xiàn)在,根據(jù)編譯器的不同,以下微優(yōu)化可能已經(jīng)完成。因此,您必須使用計時技術(shù)來驗證這是否值得。說了這么多,現(xiàn)在讓我們看一下代碼:


int [ ] triangles = mesh.triangles;

int length= triangles.Length;

int [ ] vertices = mesh.vertices;


while (j < length)  

{

  m_Particles [ currentParticlePos++ ].position = vertices [ triangles [ j ] ];   

  // allocate a particle to every 3rd vertex position.

  j = j + 3;

}

作為旁注,雖然現(xiàn)在對您沒有幫助,但 C#7.x 引入ref struct了一些其他有用的功能,可以加快訪問速度,將所有內(nèi)容保留在堆棧中。這篇文章很有趣,當 Unity 迎頭趕上時會很有用。


編輯:如果您的網(wǎng)格沒有改變(這很可能),您可以預(yù)先定義您需要的確切頂點數(shù)組。然后你也只需要增加一個變量。這是一個極端的微觀優(yōu)化。這可能有助于 CPU 預(yù)取...(在此處插入聳肩表情符號)。


// The mesh. Assigned as you see fit.

Mesh mesh;


// The length of the new vertices array, holding every third vertex of a triangle.

int length = 0; 


// The new vertices array holding every third vertex.

Vector3 [ ] vertices;


void Start ( )

{

    int [ ] triangles = mesh.triangles;

    length = triangles.Length / 3;

    vertices = new Vector3 [ length ];


    for ( int count = 0; count < length; count++ )

        vertices [ count ] = mesh.vertices [ triangles [ count * 3 ] ] ;

}


private void Update ( )

{

    int j = 0;

    while ( j < length )

    {

        m_Particles [ j ].position = vertices [ j++ ];

    }

}


查看完整回答
反對 回復(fù) 2021-11-28
?
慕尼黑5688855

TA貢獻1848條經(jīng)驗 獲得超2個贊

您正在使用mesh但沒有修改任何值。在這種情況下,您可以考慮sharedMesh改用。mesh在您的特定情況下,問題在于,mesh創(chuàng)建一個副本并返回它。有了它,sharedMesh您就可以擺脫網(wǎng)格的另一個實例的額外開銷。查看meshsharedMesh的文檔以獲取更多信息。


查看完整回答
反對 回復(fù) 2021-11-28
?
江戶川亂折騰

TA貢獻1851條經(jīng)驗 獲得超5個贊

循環(huán)運行不慢;此循環(huán)、Unity 引擎和您可能擁有或不擁有的任何其他資產(chǎn)的時間為 250 毫秒。


查看完整回答
反對 回復(fù) 2021-11-28
  • 3 回答
  • 0 關(guān)注
  • 257 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號