作者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/cn.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