Lazy Nezumi Pro 的脚本教程(十一)

531 阅读3分钟

本文已参与掘金创作者训练营第三期「高产更文」赛道,详情查看:掘力计划|创作者训练营第三期正在进行,「写」出个人影响力

栗子9 —— 闪电

在这个例子中,我们将编写一个脚本来帮助我们画闪电。

如果你看看闪电的参考照片,你会发现闪电有一个大致的形状,有几个主要方向。在这些主要方向中有较小的缺陷,因为闪电在空中寻找到地面的路径。和前面的例子一样,我们将使用组合几个不同周期和振幅的波函数的方法。这一次,我们将使用 noise 函数而不是 cellNoise

seed = seed ? seed : rand()*10000; 
offsetDist = d + seed; w1 = w1Amplitude * noise(offsetDist/w1Period); 
w2 = w2Amplitude * noise(offsetDist/w2Period); 
w3 = w3Amplitude * noise(offsetDist/w3Period); 
offset = smoothStep(0, 20, abs(d)) * (w1+w2+w3); 
ox = x + nx * offset; oy = y + ny * offset;

在这个脚本中,种子是随机生成的,因为我们通常希望每次绘制时都有不同的闪电。我们使用 smoothStep 函数逐渐淡出超过 20 像素的位置偏移,以避免在线的开始有偏移(我们希望闪电从我们笔实际的位置开始)。

你需要设置一个取值范围在 [0..200] 之间的 amplitude 参数,[1..150] 之间的 period 参数。下面是使用以下参数值生成的结果:

w1Amplitude = 46, 
w2Amplitude = 25, 
w3Amplitude = 4, 
w1Period = 130, 
w2Period = 57, 
w3Period = 8

2233333.gif

栗子10 —— 信号错误识别

为了保持敏捷和响应,你的平板电脑或鼠标驱动程序以固定的速率采样它的位置。这意味着如果你画得非常快,那么你线条的样本会比你画得慢些的时候的样本来得少。

LNP (Lazy Nezumi Pro)处理平板电脑和鼠标数据,之后才将其传递给艺术应用程序。它本身并没有画出线条。这意味着,如果您使用的脚本基于当前距离采样函数,如上述示例中使用的 wave 函数,如果您绘制得太快,将遇到一个名为 信号错误识别 的问题。这种情况发生在函数采样不足时,并将导致最终输出看起来不像完全采样的模式。解决这个问题的唯一方法是在使用这些脚本时放慢速度。

下面的图片用例 3 中的虚线脚本说明了这一点

image.png

栗子11 —— 调试

如果您的脚本没有执行您希望它执行的操作,您可以查看图形窗口,尝试确定在图形上出现了什么问题。但有时你需要看看变量的实际值来真正理解发生了什么。

为此,您可以使用特殊的调试函数 debugOut1debugOut2 。作为参数,这些函数接受一个文本字符串和一个或两个变量。文本应该包含使用printf语法的格式说明符,它将被最后字符串中的变量值替换。这里有一个例子:

debugOut2("p: %f, d: %e", p, d);

这将以十进制格式输出输入的压力变量的值,并以科学记数格式输出距离变量的值。

要真正看到这个文本,你需要使用 DebugView 应用程序,你可以在这里下载。由于这个应用程序可以在 Windows 中监控大量的事件,我们建议使用 DebugOut 输入过滤器,只看到 LNP 脚本相关的文本。

image.png