unity3d - 在 Unity 中使用 Sprite mask 3D 对象

标签 unity3d shader mask

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

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

我使用这种方法是因为 unity 内置的“2D sprite mask”仅影响使用 Sprite Renderer 的对象(如此处解释 https://docs.unity3d.com/Manual/class-SpriteMask.html ),但我希望它影响 3D 对象。

所以这是着色器:

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

这是用作 mask 的 Sprite (png 图像): sprite mask

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

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

最佳答案

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

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

严格来说,如果遮挡物( Sprite )始终透明,则它只需要渲染到深度 (Z) 缓冲区。

关于unity3d - 在 Unity 中使用 Sprite mask 3D 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63367443/

相关文章:

audio - 当其他物体(球)击中立方体时播放声音

c# - 在 Chrome 中打开 Unity Scripting API Reference,而不是在 Visual Studio 浏览器中构建。

c++ - 在着色器程序中重新编译、重新链接、顶点着色器

iphone - 使用纹理进行 OpenGL ES 2.0 渲染

javascript - 适合 float 的 JavaScript 掩码

c# - File.Create 在 iPhone 5S 上失败

c# - 从 unity 运行一个 python 脚本,稍后在我的游戏中使用它的输出(文本文件)

opengl - glsl 折射被颠倒映射

cocoa-touch - 屏蔽 UIImage

javascript - 使用网站标题屏蔽 URL