如何将Shader渲染的效果固化下来

  • Creator 版本: 2.4.3
  • 目标平台: Web

最近在学习探照灯Shader,效果如下:

现在实现的功能就是鼠标拖着这个圈到处挖洞~
我做了一些扩展,就是鼠标点击的地方都挖个洞,而且上一个洞不会消失,现在有两个思路:
1、第一个方法是用数组的方式来传递坐标,这种方法应该是最好的,但是shader只能接受静态的数组,需要在shader里面设置固定的数组长度,如果超出数目就没办法了

2、第二个方法是在第一个方法的基础上来的,在JS中判断如果超出shader定义的数组长度,就把当前的shader应用对象用 RenderTexture 截个图,然后清空之前的数组,重新在新的纹理上做处理。。。

我想请问下,有没有更好的方式来做处理,使用RenderTexture截图会有点消耗。。。

求各位大佬指点~:bowing_man:

1赞

这个问题也一直困扰了我,帮顶下

自己定义个tex 存储鼠标的位置 传递给shader渲染

我现在是用vec4数组来传递坐标,但是数量是在shader里面写死的,超出长度就不行了。。。

大佬可以详细说下你的方案么,没大理解~thx

你把你之前存入到uniform的数据按顺序存入到贴图内 然后在通过uniform传进去鼠标的点数 取值的时候从第一个一直取到最终的点数

额。。。存入到贴图内是用什么方法哇,方便提供一下关键词么,我去搜素学习下~当然有关键代码就更好了~灰常感谢:pray::pray::pray:

https://developer.mozilla.org/zh-CN/docs/Web/API/ImageData/ImageData

https://developer.mozilla.org/zh-CN/docs/Web/API/WebGLRenderingContext/texImage2D 这里的pixels参数

其实你本质你传进去的贴图就是一个二进制数组 这个数组怎么构造是由你自己决定的. 你只要能读出正确的结果就可以了

我之前做个动态迷雾的效果,根本上还是用renderTexture,但是不使用截图的形式。提供一个思路:
1.新增一个相机用作位置挖洞的层级,将target指定renderTexture.
2.shader中传入该renderTexture用作为挖洞的数据。
3.后续的操作应该和你本来的一致。

另外一种方案就是创建一张纹理,然后将数据写入纹理中来解决数组传参问题

当初我做橡皮擦功能也用到了 RenderTexture ,这样做出的橡皮擦滑到哪 擦到哪!