Unity運用GPU代替CPU處理和計算簡單測試

來源:互聯網
上載者:User

標籤:核心   height   mat   span   簡單   get   標識   迴圈   入參   

http://www.manew.com/thread-110502-1-1.html

 

 

隨著遊戲玩法的增強,計算的多量化,我們的CPU並不足以迅速的處理這些問題,而Unity給我們開放了一個介面,我們需要用它來處理大量的運算;我們可以把大量的處理運算的邏輯放入這個Shader中,用GPU的並行能力來計算,這裡簡單的說一說他的使用方式和如何把參數傳入和傳出。讓我們像一個方法一樣調用。首先:在Unity中我們可以建立一個ComputeShader:<ignore_js_op> 開啟之後會發現一個這樣的指令碼:<ignore_js_op>簡單的介紹一下,1、這個#pragmakernel  Multiply 這是一個核心, 也可以稱作入口。這個至少有一個!這個Multiply請紅線標註,很重要,我們在代碼裡需要用到它;2、接下來就是一個結構體,這個結構體是我們定義的一個結構體。我們用它來和外面的結構體相呼應。3、RwStructuredBuffer<VecMatpair>dataBuffer  相當於我們聲明的一個可讀寫的變數我用C#表示:   VecMatPair[] dataBuffer;4、就是方法主體,跟第一條呼應,外部會調用這個類似於Main函數的方法;可以寫一些簡單的邏輯,給上面的變數賦值:(這裡值得重點一說,這個變數又當輸入又當輸出,注意!);這裡我們的ComputeShader也就構建完成了;下面進行C#的編寫,讓其呼應,傳入和輸出;<ignore_js_op>1、  我們需要定義一個和Shader裡面呼應的結構體。2、  擷取這個shader,我們直接拖入就OK;然後變數基本就完事了:我們看一下代碼主體:<ignore_js_op> 
除去單行符號,我們一行一行解釋,千萬別亂:1、  聲明一個長度為15的結構體,這是我們的輸入參數;(然而並用不到15個)2、  制定一個迴圈,我給他了一個賦值,都是相同的值;迴圈體裡的內容跳過;3、  這個很重要,還記得讓你們標紅線的地方嗎。這個就是擷取這個入口的標識;4、  下面這個數組結構,用來最後來收取需要的5個資料;5、  這裡是測試列印跳過;6、  ComputeBuffer 這個也很重要,你還需要聲明一個Buffer 參數需要制定這個收取的長度,和這個數組的所有佔用位元組(提前計算(這裡就是Float=4 因為是2個Float=8 又因為是個長度為5的數組=5*8=40 ));7、  下面就是一套流程了,對,就是走走流程;關聯這個資料結構和Shader的變數相關聯;SetData()把需要傳入的資料送進Shader;接著!重點,一定要運行,第一開始我寫完發現怎麼都沒變化,一定要運行Shader;Dispatch();最後收取返回資料(我們需要接收這40個位元組的資料);列印結果附圖:<ignore_js_op> 

Unity運用GPU代替CPU處理和計算簡單測試

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.