设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

Pixel Shader[来吧 杀了这个就能升级了]

查看数: 9694 | 评论数: 28 | 收藏 2
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2013-4-3 08:14

正文摘要:

本帖最后由 viktor 于 2013-4-3 21:39 编辑 ===拿出所有的VIP悬赏 跪求能够在RM中使用Shader的脚本=== 具体要求: 能够使用Shader对RM的Bitmap进行操作,或者使用其他的合适方式,引入Shader对RM的画面进行 ...

回复

秋寒 发表于 2013-4-25 13:02:00
建议下个《少侠一炷香》开源版,记得里面有一个技能使用后突然全场变黑白,效果差不多吧...

点评

那个黑白用事件就可以做吧。改变画面色调  发表于 2013-4-26 12:18
嗯用Shader做黑白很容易 我去下一个看看~~  发表于 2013-4-26 11:47
viktor 发表于 2013-4-24 14:09:04
yangff 发表于 2013-4-4 23:58
我懂了,你的光照是一个窗口大小的bitmap是吧。
很遗憾的告诉你……就算你用了Shader,优化效果不会特别 ...

果然是我想复杂了。
如果光是为了做视野的话,根本不需要用到Shader,只要能用DX往画面上叠加3D模型就好了。

如果屏幕是20x15格的话 ,就搞一个20x15格的3D平面模型,顶点是每个格子的中心点,
然后顶点的颜色是那个格子的亮度,格子中间的颜色让他自己去插值。
设置合适的视角让他显示出来和屏幕一样大。
生成了这样一个3D模型以后,渲染到纹理,然后传送给RGSSBitmap 就可以了。

但是这个问题还是留在这里。毕竟用了Shader可以实现更多的功能啊
chd114 发表于 2013-4-5 19:06:35
除非你不用RMAV,否则不可能,因为语言不同,就算转换成同种语言也不会是一种效果
晴兰 发表于 2013-4-5 16:01:39
提示: 作者被禁止或删除 内容自动屏蔽
viktor 发表于 2013-4-5 15:22:21
本帖最后由 viktor 于 2013-4-5 15:29 编辑
yangff 发表于 2013-4-4 23:58
我懂了,你的光照是一个窗口大小的bitmap是吧。
很遗憾的告诉你……就算你用了Shader,优化效果不会特别 ...


恩……好吧我还是把视野脚本悄悄地贴出来吧。关于实现原理在这里不想做更多的解释了,看了就知道了其实做法很水 而且也并不是真正的【光照】计算。
因为我根本就没有想要做光照 只是想做一个根据当前的地图障碍物的情况改变视野明暗的,实时的 但是是伪的 视野效果。这个效果有点像是Elona的那种

主要的函数是iterate_tiles和update_bitmap,像素填充和准备做的模糊都写在update_bitmap里面,那个也是主要要优化的地方
http://blog.csdn.net/xulai1001/article/details/8761416
@Sion @yangff  
yangff 发表于 2013-4-4 23:58:35
本帖最后由 yangff 于 2013-4-5 00:01 编辑
viktor 发表于 2013-4-4 22:43
另外因为我暂时只需要对1个大的Bitmap进行处理,从效率上来说,就按你先前说的,先拷贝过去,再处理,再 ...


我懂了,你的光照是一个窗口大小的bitmap是吧。
很遗憾的告诉你……就算你用了Shader,优化效果不会特别明显(比Ruby肯定快,但是和直接用C操作),而且这种实现其实是有问题的。
首先,你是要计算一个BrightnessMap作为每个像素的亮度,
如果直接
for i in 0...width
  for j in 0...height
  end
end
的话非常慢(O(N^2))(其实我搞不懂你为什么一定要用模糊)。
另外我也不知道你到底用了什么算法计算:
是根据光源暴力扩展亮度还是根据距离和轮廓线进行计算……
【另外提一点,这里可以用kdtree优化……具体看《计算几何算法与应用》光线采样什么的。。】

但是实际上就算你用了shader……也不能改变内存和显存交换数据的问题……
(如果要做到兰兰所谓的单向,仅仅外包一个dx是不够的)
数据交换还是width*height的……

所以我还是坚持,MMX解决问题……

另外,我不知道你是怎么把光源合成进地图的。
如果是修改地图的亮度,然后把光源用加法合成上去……其实是会出问题的。
不细说,你把全局亮度调到0,然后光源亮度随便给,东西会全部没掉。
不过如果是固定alpha然后修改颜色……虽然可以……但是其实效果比较坑爹。。

点评

另外对于填充像素,C实现和Ruby脚本速度没多大区别。毕竟只有MMX或者Shader才是game-changing的。而Shader能做的会更多,不仅仅是模糊。  发表于 2013-4-5 15:31
我现在是用O((N/32)^2)的办法计算的亮度,所以需要加上模糊,差不多就是暴力扩展。交换数据并不是问题。比如Blt整个屏幕,也还是很快的。  发表于 2013-4-5 15:24
viktor 发表于 2013-4-4 22:43:23
yangff 发表于 2013-4-4 13:21
如果只是这样用shader的话,直接用兰兰的DxRuby就行了。
不过我很奇怪,这种覆盖的操作方式是怎么处理加 ...

另外因为我暂时只需要对1个大的Bitmap进行处理,从效率上来说,就按你先前说的,先拷贝过去,再处理,再拷贝回来,那也是完全可以接受的。
所以就按你说的做一个就行了~不要想那么多

1. 把Bitmap的内容拷贝到DX可以处理的结构里
2.渲染
3.拷回来

我会拿DxRuby试一下的

点评

用了DX11你会发现……shader真是又爱又恨啊。。  发表于 2013-4-4 23:13
主要是最近折腾DX11有点蛋疼= =|  发表于 2013-4-4 23:13
yangff 发表于 2013-4-4 13:21:35
本帖最后由 yangff 于 2013-4-4 13:35 编辑
viktor 发表于 2013-4-4 12:29
不需要操作Tilemap,只需要引用里面的地形标记。现在是直接Fill_rect填充32x32的格子,每帧大概0-800次操 ...


如果只是这样用shader的话,直接用兰兰的DxRuby就行了。
不过我很奇怪,这种覆盖的操作方式是怎么处理加法和减法的?
另外,你这样的操作(我是指你现在这种效果,其实不用fillrect,直接操作单点,然后zoom=32就行了……)
模糊不是很理解,阙值多少?
viktor 发表于 2013-4-4 12:29:32
yangff 发表于 2013-4-4 10:12
LZ的做法我只想知道,会不会涉及到对tilemap图元的操作,如果不会(也就是简单的加法减法合成,给方块光 ...

不需要操作Tilemap,只需要引用里面的地形标记。现在是直接Fill_rect填充32x32的格子,每帧大概0-800次操作,是可以流畅运行的。
但是我还需要动态模糊效果。所以想到用shader
当然如果使用MMX混合的话,还有一种办法就是做一个32x32的圆形渐变图,把它按照当前格子的亮度值 blend到光照mask上面,但是这样做也就是15年前云风那个时代使用的折中的处理办法。在云风的博客里面也有很多相关内容。相比之下,如果能够使用Shader 岂不更加优美一些?
yangff 发表于 2013-4-4 10:12:10
本帖最后由 yangff 于 2013-4-4 10:20 编辑
晴兰 发表于 2013-4-4 00:27
不管你怎么界定,和我相同也好不同也好(二进制层面上是不分引用/导入/需要/包含啥的。。),
现在的实际 ...


LZ的做法我只想知道,会不会涉及到对tilemap图元的操作,如果不会(也就是简单的加法减法合成,给方块光源增加梯度),我有不需要shader的处理方法(在RM的最后一次描绘的之后直接MMX修改,效率不会太差,至少640*480.。)。

如果只是问题本身的话,绝对是要dd7hook的,这货谁爱弄谁弄去。
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-9 02:50

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表