动态轮廓线-ShaderLab

动态轮廓线-ShaderLab

轮廓边:

两个Pass:一个计算纹理和光照,另一个计算轮廓

沿法线方向对轮廓边进行扩展

使用模板缓冲区是此技巧的另一重要部分。第一个Pass(光照和纹理遍历)将写入模板缓冲区。(4是任意参考编号。)第二个Pass(轮廓边)读取模板缓冲区,并且在看到已经写入的相同参考后,将原始像素保留在原位。这样可以达到使缩放后的网格看起来像是在原始网格之后(或仅使轮廓)轮廓化的效果。我还要确保关闭剔除功能,这样我们就不会丢弃轮廓网格的任何顶点。

虚线轮廓边:

使用了距离场

  1. 绘制轮廓时使用距离场跳过像素
  2. 使用时间滚动每个像素的“位置”以进行动画处理
  • 我们测量每个像素距_SourcePos.xy的距离。
  • 然后,我们采用该距离的绝对值的正弦值,该值在负值和正值之间振荡。
  • 我们使用_OutlineDot和_OutlineDot2(我知道是惰性名称)来修改负值和正值的频率。
  • 然后,对clip(skip)的调用将丢弃skip值为负的任何像素。
  • 最后,我们为每个未被丢弃的像素返回基本的_OutlineColor平面。
  • 我们通过input.pos.xy获取当前位置(这是从顶点着色器传入的)
  • 我们将位置乘以_Time和_OutlineSpeed以便随时间转换位置。