2017-09-11 2 views
0

Ich habe vor kurzem begonnen mit dem Stencil Shader auf Unity 5 (Version 2017.1.1) zu arbeiten. Ich versuche eine Sichtlinienmaske in einem Top-Down-Spiel zu erstellen (dh der Spieler kann nur was sehen Blockiert nicht die Ansicht ihres Charakters) Ich habe ein YouTube-Tutorial zu diesem Thema verfolgt (https://www.youtube.com/watch?v=xkcCWqifT9M&t=185s), aber trotz der Verwendung desselben Codes konnte ich mein Projekt nicht zum Laufen bringen.Unity Shader Stencil Ausgabe

Ich habe versucht, verschiedene Werte einschließlich GTEST, ColorMask und viele der Schablonenbefehle und keine der Aussagen in der Stencil Teil des Shader zu verändern scheinen keine Wirkung zu haben, wie die Shader auf dem Bildschirm erscheint

I 2 Shader: Einer wird auf ein Mesh angewendet, das darstellt, was der Spieler sehen kann und der zweite wird auf Objekte angewendet, die bis zum Sichtliniennetz des Spielers verdeckt werden sollen Dies ist der erste Shader, der auf die Linie angewendet wird Sichtmasche

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 



    } 

// Alles was nach diesem Punkt in diesem Shader ist, ist der Standard-Unity-Shader, ich habe ihn überhaupt nicht bearbeitet

// Der zweite Shader wird auf Objekte angewendet, die vom ersten Shader enthüllt werden sollen:

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 

    } 

ich bin ganz neu zu Shaders so wäre jede Hilfe sehr geschätzt werden, verwende ich auch Einheit persönlich, aber ich weiß nicht, ob Schablone Shaders eine Unity Pro-Funktion ist oder nicht

Antwort

0

One Ein möglicher Täter ist, dass Schablonen beim verzögerten Rendern nicht ordnungsgemäß funktionieren.

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

Stencil-Funktionalität für Objekte in dem aktiven latenten Rendering Weg gemacht ist etwas begrenzt, da während der Basiskarte und Beleuchtung der Schablonenpuffer für andere Zwecke verwendet werden, übergeben. Während dieser zwei Phasen wird der im Shader definierte Schablonenzustand ignoriert und nur während des letzten Durchlaufs berücksichtigt. Aus diesem Grund ist es nicht möglich, diese Objekte basierend auf einem Schablonentest auszublenden [...]

+0

danke für die Hilfe mate! Weißt du, wie ich es in einem nicht verzögerten Rendering-Pfad zur Schablone zwingen kann? –

+0

Ich habe deinen Code benutzt (kopiere ihn in einige Standard und Unlit Shader) und es funktioniert wie erwartet. Allerdings achten Sie auf diese Details: 'ZWrite Off' in StencilMask.shader: hat eine Hauptstadt O ' #pragma Oberflächenbrandung Standard fullforwardshadows addShad 'in StencilObject.shader: Ich musste hinzufügen ** addshadow ** für Schatten zu Verhalten Sie sich ordnungsgemäß –

+0

Außerdem funktioniert es nicht mehr im verzögerten Rendering-Modus wie erwartet :) –

Verwandte Themen