【问题标题】:Using a sprite to mask 3D objects in Unity在 Unity 中使用 sprite 遮罩 3D 对象
【发布时间】:2020-08-11 22:54:59
【问题描述】:

我有一个 png 图像,我想将其用作透明蒙版,它将在场景中完全透明,但不会显示其后面的 3D 对象(类似于精灵蒙版,但需要使用 3D 对象)。

所以我在我的 3D 场景中将图像添加为精灵(点 - 无滤镜),并且我已经将着色器应用于精灵材质,但它无法正常工作。看起来像素在边框中没有被“正确切割”。

我正在使用这种方法,因为统一内置的“2D 精灵蒙版”仅影响使用 Sprite Renderer 的对象(如此处所述 https://docs.unity3d.com/Manual/class-SpriteMask.html),但我希望它影响 3D 对象。

这就是着色器:

    Shader "Masked/Mask" {
 
     SubShader {
         Tags {"Queue" = "Geometry+10" }
         ColorMask 0
         ZWrite On
         Pass {}
     }
 }

这是用作遮罩的精灵(png 图像): sprite mask

这些是我想要的结果与我得到的结果: results compared

我不擅长着色器,所以我想知道是否可以对代码进行更改以改善结果。我已经为精灵图像尝试了不同的格式(png、tif、压缩),但结果是一样的。

【问题讨论】:

  • 这是一个可能对您有帮助的资源。 docs.unity3d.com/Manual/class-SpriteRenderer.html 查看 Mask 交互部分。
  • 蒙版交互部分是关于使用预先构建的“精灵蒙版”,它只影响使用 Sprite Renderer 的对象,而不影响 3d 对象。

标签: unity3d shader mask


【解决方案1】:

我已经使用“透明”3D 遮挡物和渲染优先级做了类似的事情,我想它与精灵类似......

  1. 渲染不可遮挡的几何体(包括 Sprite){"Queue" = "Geometry"}
  2. 渲染可遮挡几何 {"Queue" = "Geometry+1"}

严格来说,你的遮挡物(精灵)只需要渲染到深度(Z)缓冲区,如果它总是透明的。

【讨论】:

  • 确实,着色器在应用于 3D 遮挡物时效果很好。问题是我使用精灵来遮挡 3D 对象。
猜你喜欢
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-13
  • 2023-04-03
  • 1970-01-01
相关资源
最近更新 更多