rainyeve
  • 首页
  • 编程
  • 涂鸦
  • 其他
  • 关于
2020年3月24日
编程

【Unity Shader】结界墙效果

【Unity Shader】结界墙效果
2020年3月24日
编程

交界高光+法线扭曲做一堵透明的墙,用作划分“战场范围”。

Shader Graph

分两部分完成,一是噪声图用作法线扭曲并滚动,二是深度比对把交界处识别出来。

相比起以前做的扭曲效果,这次直接用Normal From Height节点生成高度图用于法线扭曲。

交界处检测

  • 关闭zwrite,在Shader Graph中把master node设为transparent时即包含了此操作
  • 通过ScreenPosition在raw模式下获取到w分量,此时的w相当于clip空间下该顶点的z值,选用raw模式是因为此时的w分量没做归一化,详见Screen Position Node说明
  • 由于关闭了zwrite,所以从Scene Depth Node中取出场景深度图的时候是不包含自己的z值的,此时把ScreenPos.w(即Screen Position的RGBA中的A channel)当做深度,在同一UV取样下,与场景深度图的点作差,若差值足够小,说明顶点在物体交界处
  • 差值太大的点说明已远离了交界处,用Step Node把它们统统过滤出来
  • 过滤结果是有用的点全是0,无用的点全是1,于是要用OneMinus做反向,把StepNode的In和Edge参数调转过来,即省略了OneMinus

参考资料

  • 《Unity Shader入门精要》章节4.6.7 关于clip空间的计算
  • unity connect博客文章 神奇的深度图

Post Views: 4,113

shader unity3d

上一篇【Unity Shader】径向模糊下一篇 【动作游戏设计】关于“击退”的小结

发表评论 取消回复

邮箱地址不会被公开。 必填项已用*标注

分类目录

  • 其他 (2)
  • 旅行 (1)
  • 涂鸦 (6)
  • 编程 (28)
Email: wuch441692@163.com