2017-09-11 3 views
0

J'ai récemment commencé à travailler avec le gabarit Shader on Unity 5 (Version 2017.1.1) J'essaie de créer un masque de visée dans un jeu descendant (ie le joueur ne voit que ne pas bloquer la vue de leur personnage) Je suivais un tutoriel YouTube sur le sujet (https://www.youtube.com/watch?v=xkcCWqifT9M&t=185s) mais en dépit d'utiliser exactement le même code que lui, je ne pouvais pas faire fonctionner mon projet.Unity shader Pochoir numéro

J'ai essayé de modifier différentes valeurs, y compris ZTest, ColorMask et la plupart des commandes de pochoir et aucune des instructions contenues dans la partie Pochoir du Shader semblent avoir un effet sur la façon dont le Shader apparaît à l'écran

I avoir 2 shaders: l'un appliqué à un maillage qui représente ce que le joueur peut voir et le second est appliqué aux objets qui doivent être cachés jusqu'à ce qu'ils soient couverts par la ligne de visée des joueurs maille Ceci est le premier shader qui est appliqué à la ligne de maille à vue

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 



    } 

// Tout ce qui se trouve après ce point dans ce shader est juste le shader d'unité standard, je ne l'ai pas édité du tout

// Le second shader est appliqué aux objets qui doivent être révélés par le premier shader:

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 

    } 

Je suis tout nouveau à Shaders de sorte que toute aide serait très apprécié, je suis également d'utiliser l'unité personnelle, mais je ne sais pas si Shaders pochoir sont une unité fonctionnalité Pro ou non

Répondre

0

One le coupable potentiel est que les pochoirs ne fonctionnent pas correctement dans le rendu différé.

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

fonctionnalité Pochoir pour des objets rendus dans le trajet de rendu différé est quelque peu limitée, comme au cours de la passe de fond et d'éclairage passent le tampon de stencil est utilisé à d'autres fins. Durant ces deux étapes, l'état du pochoir défini dans le shader sera ignoré et pris en compte uniquement lors du dernier passage. Pour cette raison, il n'est pas possible de masquer ces objets sur la base d'un test de pochoir [...]

+0

Merci pour l'aide-mate! Savez-vous comment je peux le forcer à pochoir dans un chemin de rendu non différé? –

+0

J'ai utilisé votre code (copiez la pâte dans des shaders standards et non éclairés de base) et cela fonctionne comme prévu. Cependant prêter attention à ces détails: 'ZWrite Off' dans StencilMask.shader: a une capitale O ' # surface de surf de pragma Standard fullforwardshadows ajoutehadow 'dans StencilObject.shader: Je devais ajouter ** addshadow ** pour les ombres à se comporter correctement –

+0

En outre, il cesse de travailler en mode de rendu différé comme prévu :) –