大家好,我是Shawn,今天我们用shaderlab来实现一个最简单的Voronoi图。首先什么是Voronoi图?Voronoi图,又叫泰森多边形或Dirichlet图,它是由一组由连接两邻点直线垂直平分线组成的连续多边形组成。它是一个程序纹理,通常用来实现一些随机的事件。有时候,我们可以简单的使用random函数来实现一些伪随机,但实际上,这通常表现的很不理想。想象一下你处在完全随机的迷宫里,或许它根本就没有出口。所以我们通常使用“噪声”来实现一些看起来比较自然的随机,而Voronoi图就是噪声的一种。
Voronoi是一种多孔状图,通常来模拟岩石,木纹等结构。
那这种Voronoi用数学是如何实现的呢?
现在我们有两个点,如果我们以这两个点为圆心向外扩张,我们会得到一条交线:
好了,我们给它再加几个点:
实现了!这就是Voronoi 几何图案
我们可以通过他的构造直观的了解到图形的边界就是两点之间的垂直平分线,每个顶点与相邻的点的距离又是相等的。
我们用shaderlab实现一个最简单的Voronoi图:
我们的思路是,抛出一些随机的点,计算每个点和所有点之间的距离,取最小值最为他的值,然后着色,当然您也可以选择第二小的值,第三小的值,这里我们使用最小值。
第一步,我们创建一个unlitshader 文件,添加如下自定义函数,这个函数帮助我们返回一个“随机”的粒子。
float2 N22(float2 p){
float3 a = frac(p.xyx*float3(123.34