使用精灵掩盖Unity中的3D对象

问题描述

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

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

我之所以使用这种方法,是因为内置的统一“ 2D Sprite蒙版”仅影响使用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,压缩),但是结果是相同的。

解决方法

我已经使用“透明” 3D遮挡器进行了类似的操作并渲染了优先级,我想这与子画面类似...

  1. 渲染不可遮挡的几何图形(包括Sprite){“ Queue” =“ Geometry”}
  2. 渲染可封闭的几何体{“ Queue” =“ Geometry + 1”}

严格来说,如果遮挡物(子画面)始终是透明的,则只需渲染到深度(Z)缓冲区即可。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...