作者doasgloria (青柳立夏)
看板GameDesign
標題[請益] 在Unity中快速Get/Set大量Pixel的方法
時間Tue May 19 14:26:08 2020
今天想要做的是
假設我有兩個
Texture2D (
A /
B)
寬跟長不一定(至少都2000+)
A 是已經有內容的Texture (從圖片讀來or其他..)
B 則是宣告出來的空白的
想要把A中的某些符合條件的像素點到B裡面去的話
有什麼很快的方式嗎?
比如說
A每橫移3格 才把該像素點到B 就會像:
假定--> 寬等於 3000 , 高等於 2000
for (
int x = 0;
x < 3000;
x+=3)
{
for (
int y = 0;
y < 2000;
y++)
{
Color thePixel =
A.
GetPixel(
x,
y);
B.
SetPixel(
x,
y,
thePixel);
}
}
用兩層For迴圈是可以完成, 可是效率應該是最低的
有沒有比較快速的語法或方法可以加速呢
希望版上的大大可以指引點方向 >///< 感謝 !!
--
如果我們要把磁鐵棒放進線圈,
線圈會說「不!!不要過來!!」而發出阻力不讓磁鐵棒靠近。
但是如果我們要把放進去的磁鐵棒從線圈拿走, 「傲嬌是一種
線圈反而會說「我…我又沒有叫你走!!」而發出阻力不讓磁鐵棒離開。 自然現象」
這種現象不就是傲嬌嗎! 新科科人雜誌
所以傲嬌這東西根本不是新梗,19世紀就有科學家發現傲嬌了。 /民明書房
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.37.20.18 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/GameDesign/M.1589869572.A.F33.html
1F:推 BSpowerx: 另外做一個Mask貼圖C來運算? 05/20 00:01
2F:推 andysneo: Compute Shader 05/20 14:15
3F:推 cjcat2266: blit + shader或compute shader,不管使用何者,shader 05/20 14:28
4F:→ cjcat2266: 負責的都是在一個GPU thread中處理一個像素,執行你的 05/20 14:28
5F:→ cjcat2266: 取值、比較、賦值的邏輯,3000x2000個GPU thread一次 05/20 14:30
6F:→ cjcat2266: render/dispatch完成 05/20 14:30
7F:→ doasgloria: 查了一下 感覺完全是shader的功能 該來研究一下了=w= 05/20 15:43
8F:推 cjcat2266: shader擅長簡單且大量平行的運算 05/21 01:46
9F:→ doasgloria: 讚嘆Compute Shader ! 05/21 19:58
10F:→ doasgloria: 還沒寫出來 但是突然想到一個問題 如果把這樣的運算用 05/21 19:59
11F:→ doasgloria: GPU, 我的資料SIZE這麼大 會不會在送到GPU這段 耗費很 05/21 20:00
12F:→ doasgloria: 多時間呢 05/21 20:00
13F:推 diorleoroy: 不會,速度很快,我用compute shader做跟你一樣的事, 05/21 20:23
14F:→ diorleoroy: resolution更大,張數要求更嚴苛,處理速度快到炸 05/21 20:23
15F:→ doasgloria: 讚嘆Compute Shader, 正在努力研究中 !! 05/21 21:41
16F:推 cjcat2266: texture已經是在VRAM上的資料了,你做的事情只是給GPU 05/22 01:10
17F:→ cjcat2266: 下指令去存取而已,沒有”送大量資料過去給GPU”這問題 05/22 01:10
18F:→ doasgloria: 原來如此 !! 讚嘆 !! 感覺這就是我需要的 !! 05/22 09:19