我最近开始使用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功能
答案 0 :(得分:0)
一个潜在的罪魁祸首是模板在延迟渲染中无法正常工作。
https://docs.unity3d.com/Manual/SL-Stencil.html
在延迟渲染路径中渲染的对象的模板功能在某种程度上受到限制,因为在基本传递和光照传递期间,模板缓冲区用于其他目的。在这两个阶段中,着色器中定义的模板状态将被忽略,并且仅在最终传递期间考虑。因此,不可能基于模板测试来掩盖这些对象[...]