Unity着色器模板问题

时间:2017-09-11 09:23:46

标签: unity3d shader unity5

我最近开始使用Unity 5上的模板Shader(版本2017.1.1)我试图在自上而下的游戏中创建一个视线模板(即玩家只能看到什么不阻止他们的角色观点)我正在关注这个问题的YouTube教程(https://www.youtube.com/watch?v=xkcCWqifT9M&t=185s),但是尽管使用与他完全相同的代码,我无法让我的项目工作。

我已经尝试更改各种值,包括ZTest,ColorMask和许多模板命令,Shader的Stencil部分内的所有语句似乎都没有影响Shader在屏幕上的显示方式

我有2个着色器:一个应用于网格,代表玩家可以看到的内容 第二个应用于被隐藏的对象,直到被玩家的视线网格覆盖 这是第一个应用于视线网格的着色器

Shader "Custom/StencilMask" {
Properties {
    _Color ("Color", Color) = (1,1,1,0.2)
    _MainTex ("Albedo (RGB)", 2D) = "white" {}
    _Glossiness ("Smoothness", Range(0,1)) = 0.5
    _Metallic ("Metallic", Range(0,1)) = 0.0

}
SubShader {
    Tags {"Queue"="Geometry-100" "RenderType"="Opaque"}

    LOD 200
    ColorMask 0
    ZWrite off

    Stencil {
        Ref 1
        Pass replace



    }

//此着色器中此点之后的所有内容都是标准的统一着色器,我根本没有编辑它

//第二个着色器应用于第一个着色器要显示的对象:

Shader "Custom/StencilObject" {
Properties {
    _Color ("Color", Color) = (1,1,1,1)
    _MainTex ("Albedo (RGB)", 2D) = "white" {}
    _Glossiness ("Smoothness", Range(0,1)) = 0.5
    _Metallic ("Metallic", Range(0,1)) = 0.0
}
SubShader {
    Tags { "RenderType"="Opaque" "Queue"="Geometry+10" }
    LOD 200

    Stencil{
        Ref 1
        Comp equal

    }

我对Shaders是全新的,所以任何帮助都会非常感激,我也使用团结个人,但我不知道模板着色器是否是Unity Pro功能

1 个答案:

答案 0 :(得分:0)

一个潜在的罪魁祸首是模板在延迟渲染中无法正常工作。

https://docs.unity3d.com/Manual/SL-Stencil.html

  

在延迟渲染路径中渲染的对象的模板功能在某种程度上受到限制,因为在基本传递和光照传递期间,模板缓冲区用于其他目的。在这两个阶段中,着色器中定义的模板状态将被忽略,并且仅在最终传递期间考虑。因此,不可能基于模板测试来掩盖这些对象[...]