GameDesign 板


LINE

因为前阵子有个关於游戏玩法的发想 想做一个关於涟漪特效 因此来请教板上的前辈们 有没有什麽改进效能的做法 我所指的涟漪 就是假设以一张图片为底图 触碰某个点的时候会产生随时间扩散的涟漪 类似像这样的效果 https://www.youtube.com/watch?v=Wtyxbi1c7r4
我使用的语言是android的openGL ES2 网路上找到一个关於涟漪的演算法 http://freespace.virgin.net/hugo.elias/graphics/x_water.htm 而网路上我看到对应到图片的作法 大致上有两类 一是将整张图片切成大量的三角片 再将水深资讯对应到Z轴坐标 二是将深度资讯做为texture的偏移量 越深的就偏移越多 我在试做的时候所使用的是第二种 是因为刚好找到这个 http://dl.dropbox.com/u/35529986/kokokakku/Mika.html 参考他的原始码来做的 做出来了之後没想到FPS低到差点吐血 我用的测试机是HTC OneX 所以深度资讯的array就用原生的1280x720 (PS:我是用sampler的buffer来丢深度资讯) 结果计算array以及把array丢进shader的buffer 没想到100 frames竟然需要47539ms!! (算深度 23xxx,丢进buffer 23xxx) 等於等於FPS只有2....XDDDDDDDDDDD ( 题外话 ( 另外android放进buffer的方式有两种 ( 1. buffer.array()[index] = depth[index] ( 2. buffer.position(index) ( buffer.put(depth[index]) ( 上面说的时间是-1-的时间 ( -2-更高达73493ms ( 偏偏第一种方法在一些比较早期的手机会crash.... 後来我把buffer改小剩下125x62就超顺 (约700ms) 只是解析度有点悲壮 原本期待第一种更变z轴buffer的方法 不过後来想想他也是堆进buffer啊.... 只是还没试就是了 很想让深度资讯丢给shader自己算 可是参考那个网页的演算法 每次的深度资讯都需要前一次的深度资讯来计算 等於必须要存下每次的计算结果 不过shader program好像没有办法拿来储存结果? 看youtube别人的demo都跑好顺 不知道自己哪个环节出了错 请教板上的前辈有没有什麽好的建议? 感谢耐心看完! 後面附上片段的code ==计算深度的code== for (int y = 1; y < rippleHeight - 1; y++) { for (int x = 1; x < rippleWidth - 1; x++) { rippleMap[y][x][1-bufferSwitch] = (((rippleMap[y][x+1][bufferSwitch] + rippleMap[y][x-1][bufferSwitch] + rippleMap[y+1][x][bufferSwitch] + rippleMap[y-1][x][bufferSwitch] ) / 2f - rippleMap[y][x][1-bufferSwitch] )*rippleViscosity); } } // PS:bufferSwitch是用来区分前後两次深度值的array ==array丢进buffer的code== for (int y = 0; y < rippleHeight; y++) { int tempY = y*rippleWidth*4; for (int x = 0; x < rippleWidth; x++) { depthBuffer.array()[tempY+x*4] = (byte)(rippleMap[y][x][1-bufferSwitch]*rippleAmpRatio + 127); } } ==array丢进buffer的另一个方法== ==所花时间是上面那个方法的两倍,不过某些型号的手机只能用这个方法== for (int y = 0; y < rippleHeight; y++) { int tempY = y*rippleWidth*4; for (int x = 0; x < rippleWidth; x++) { depthBuffer.position(tempY+x*4); depthBuffer.put( (byte)(rippleMap[y][x][1-bufferSwitch]*rippleAmpRatio + 127)); } } --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.24.6.218
1F:推 littleshan:这个可以用shader算,用render to texture就可以存结果 03/21 01:37
马上来研究看看! 感谢提供关键字!
2F:→ azureblaze:你需要使用shader 03/21 01:37
我是有写shader, 不过我一直以为没办法让shader算的结果存起来QQ" ※ 编辑: Morshues 来自: 114.24.6.218 (03/21 22:07)
3F:推 cjcat2266:VertexShader可以存结果,google "transform feedback" 03/22 01:36
4F:推 Killercat:普通都是丢pixel shader忽略掉y轴 03/22 12:10
5F:→ Killercat:要用vs的话 效能一定会被吃很大 直接用ps作弊会好点 03/22 12:11
6F:→ Killercat:当然你要做的很拟真就得vs或者gs(D3D11+)了 03/22 12:12
7F:→ Killercat:如果你用gs实作成功记得分享一下 关於gs资料真的太少=P 03/22 12:13
8F:推 Bencrie:gs 资料应该不算少吧 03/22 14:58
9F:→ bachi95:GL ES2应该没有支援geometry shader 03/22 16:20
10F:推 Bencrie:没注意到是 GLES2 XD 03/23 01:00







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP