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

Project1

 找回密码
 注册会员
搜索
楼主: viktor
打印 上一主题 下一主题

[已经过期] Pixel Shader[来吧 杀了这个就能升级了]

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
182 小时
注册时间
2012-2-11
帖子
233
跳转到指定楼层
1
发表于 2013-4-3 08:14:04 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 viktor 于 2013-4-3 21:39 编辑

===拿出所有的VIP悬赏 跪求能够在RM中使用Shader的脚本===



具体要求:
能够使用Shader对RM的Bitmap进行操作,或者使用其他的合适方式,引入Shader对RM的画面进行处理也行
处理速度要能满足实时处理:至少20fps吧
使用的hlsl/cg脚本很容易在脚本里修改
原创脚本或者在网上搜索的都可以(虽然在下已经粗略地搜索过了,没有相关内容),请提供一个中文或者英文的样例

现在的讨论进展:
  • 既然我诚心诚意地问了,那么一定有解决的办法,如果想放弃RGSS,请出门左转Unity
  • 本帖也是探讨一下使用Shader处理Bitmap的可行性,如果您觉得【不可能!】或者【不可能实时!】请说出您的理由,我也会重新考虑这个问题的可行性。如果真的不能做到,那么悬赏的VIP也会分给能提出充分理由的童鞋。
  • 关于那个视野脚本,如果Shader问题能够顺利解决,我会第一时间发一个XP/VA的版本呢。至于现在,我并不想发一个半成品。





以下是背景资料和线索

1【Shader是什么?】
pixel shader是在显卡上执行的一种程序。它可以高效地对纹理的每一个像素进行运算。
这使我们能够实时地完成多种特殊效果,比如多重纹理、逐像素光照、视野深度、云层仿真、火焰仿真和复杂阴影技术。
可以部分理解为使用显卡,实时地对游戏的图片进行PS

2 【为什么RM需要Shader?】
为了更炫丽的效果。
有很多前辈都开发过RM的图片滤镜库,例如6R天干宝典中就有“图片滤镜效果样例”,或者11区的WF-RGSS,或者RMVA自带的Bitmap.blur/radial_blur模糊效果。
但是这些库里面各种效果都没有办法实时使用,原因就是“这一操作需要时间”

因为它们都是使用CPU进行计算,没有利用到显卡。
而Shader的最大特点就是他完全是在显卡里运行,非常高效而且不耗CPU。现在即使是集显也支持相当数量的Shader效果

3 【有什么线索么?】
在下不会DX,知道的只有以下这些:
http://blog.csdn.net/pizi0475/article/details/4241024
RM的Bitmap,其实就是DX的纹理。所以用Pixel Shader去操作RM的图片,实际上是对纹理进行操作

4 【我拿这个准备用在哪里】
Shader有很多用途,上面已经说了。
我自己写了一个实时视野光效的脚本,现在需要增加一个动态模糊效果,否则效果只能是这样的……

如果有了动态模糊,这个光影就会变得非常自然。我曾经用那个WF-RGSS试过,非常慢(0.5fps)


再次跪谢


@喵呜喵5 @晴兰 @yangff @凌童鞋  
堵上人参的悬赏,当掉了骑士的高头大马,重新拿起量产型长剑

点评

不明觉厉,纯支持……  发表于 2013-4-3 13:57

Lv1.梦旅人

梦石
0
星屑
50
在线时间
182 小时
注册时间
2012-2-11
帖子
233
2
 楼主| 发表于 2013-4-3 15:33:42 | 显示全部楼层
没人回答么……自己顶一下,顺便站楼备用
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
182 小时
注册时间
2012-2-11
帖子
233
3
 楼主| 发表于 2013-4-3 21:46:51 | 显示全部楼层
Sion 发表于 2013-4-3 19:28
我对这个工程比较感兴趣,可以的话,发一个范例给我吧。
可以试着帮你优化一下。
...

额……因为这个脚本是和机油合作的,不能随意处置。
我大概说下原理吧……

1.每一帧计算每一格的光照值,视分辨率一共要算400-800次;
2.使用Fill_rect把亮度矩形画在1个Sprite上,只画改变的部分,一共要画0-800次;
4.把那个Sprite放在地图上面

其中第2步就是使用CPU进行像素填充,这已经非常吃亏了。在默认分辨率下很流畅,但是1024*600的时候就只有20-40fps了。
还有没做的第3步是动态模糊。每一帧只要把光照图模糊1个像素,显示效果就可以大幅提高。我曾经用过WF-RGSS和PRFilter的滤镜测试,他们都是用CPU进行模糊,加上以后直接变成0.5fps

点评

了解~ 那些底层的东西我不会,只有静观其变啦。  发表于 2013-4-3 22:46
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
182 小时
注册时间
2012-2-11
帖子
233
4
 楼主| 发表于 2013-4-3 21:50:14 | 显示全部楼层
yangff 发表于 2013-4-3 21:42
我来解释一下为什么DX(OGL)+RM无法对画面进行具有实用意义的实时的修改。
首先先说一下我现在能做到的。
...

[目测精灵超过200个就得跪]
恩……内存和显存的问题我意识到了,但是没有办法想的这么清楚。 但是
(还在找希望……)
如果我只有10个等于屏幕大小的精灵呢?

点评

嘛……看我楼下的吧。  发表于 2013-4-3 21:53
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
182 小时
注册时间
2012-2-11
帖子
233
5
 楼主| 发表于 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 岂不更加优美一些?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
182 小时
注册时间
2012-2-11
帖子
233
6
 楼主| 发表于 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
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
182 小时
注册时间
2012-2-11
帖子
233
7
 楼主| 发表于 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  
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
182 小时
注册时间
2012-2-11
帖子
233
8
 楼主| 发表于 2013-4-24 14:09:04 | 显示全部楼层
yangff 发表于 2013-4-4 23:58
我懂了,你的光照是一个窗口大小的bitmap是吧。
很遗憾的告诉你……就算你用了Shader,优化效果不会特别 ...

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

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

但是这个问题还是留在这里。毕竟用了Shader可以实现更多的功能啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-6-2 14:36

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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