我之前已经处理过glsl,但是我对如何使用逐像素处理实现某些效果的理解仍然存在问题。我要做的是使用片段着色器来模拟墨水在纸张上的散布。简而言之,我想模拟大量的墨水滴在纸上,墨水从墨源散布开来,也许有些毛细作用。除了一滴水,它还将应用于整个图像。有一个随机的初始“质量”应用于每个像素,我正在考虑的一种方法是使纹理比例向外,初始“质量”的值减小到0。

我该怎么办试图实现这一目标而缺失?有谁知道在构建此着色器时可以参考的类似着色器效果吗?

评论

您能说明一下您希望看到的每一帧有什么区别吗?您是否希望总的“质量”保持恒定,并使其在每一帧中分散一小段距离,直到其均匀分布?您是否希望它在各个方向均匀分布,并呈圆形分布?

我认为以恒定的速率向外扩展每个帧是最合适的,但是由于每个像素的初始质量是随机的,因此所有像素将在不同的时间停止扩展。如果“质量”在所有像素上都是恒定的,则效果将只是均匀的圆形扩展。我认为我遇到的一个主要问题是弄清楚如何传递这种大众价值。

也许尝试从仅描述要提供的总体效果开始,而不是从实现细节开始。您是要全部独立散布并最终重叠的多滴墨水,还是要为单个墨水滴建模的一部分提到多个像素?

谢谢大家的帮助。我想要的效果好像是一滴墨水滴在纸上,墨水向外扩散。这样,它会以不同程度扩散,甚至可能具有某种毛细管元件。

这要清楚得多。您可以编辑问题以反映此更具体的要求吗?评论不能保证永远持续下去。

#1 楼

如果要使用GLSL实现此功能,则可以应用的一般概念是多遍渲染。在第一个渲染过程中,在屏幕上绘制一些墨水,然后将结果写入帧缓冲区对象(FBO)。然后在第二个渲染过程中,绘制一个屏幕大小的四边形并附加FBO的纹理。在第二个渲染过程中,您可以使用GLSL着色器来分配墨水。在下面的示例中,我使用了一个简单的腐蚀和高斯滤波器,但在这里可能会有更复杂的效果。然后将结果用作绘制更多油墨的第一个渲染通道的背景,然后将其传递到第二个渲染通道,依此类推......等等。 >我使用名为GLSN着色器和WebGL的在线工具“ GSN Composer”生成了上面的示例。您可以在以下位置找到相应的节点图:简单的实现,墨水的扩散将永远不会停止。为此,您需要记住每个像素的状态(例如,您在问题中提到的“质量”或“存储区”),并在执行扩展的着色器中使用此每个像素的状态。此状态可以编码在纹理输出中(例如在alpha通道中),也可以写入沿着色器管道传递的第二个纹理中。

评论


$ \ begingroup $
现在可以在这里找到更完整的示例:gsn-lib.org/docs/…
$ \ endgroup $
– NodeCode
18-10-12在13:21