Alpha Mask

Shadery i tematy z nimi związane.

Alpha Mask

Postprzez Ether_141 » 11 Wrz 2018, 23:34

Cześć. Czy istnieje jakaś możliwość użycia maski przezroczystości w Unity? Mam teksture twarzy w której przezroczystość mają mieć same rzęsy, więc przygotowałem sobie maskę, ale nie wiem w jaki sposòb jej użyć. Próbowałem zrobić przezroczyste tło rzęs i dać shader transparent, ale to nie działa, ponieważ wtedy cała twarz jest przezroczysta i widać gałki oczne czy zęby.
Awatar użytkownika
Ether_141
 
Posty: 375
Rejestracja: 29 Sie 2015, 11:47
Has thanked: 0 time
Been thanked: 0 time

Re: Alpha Mask

Postprzez Wichur » 12 Wrz 2018, 05:38

najlepiej bedzie jak rzęsy dasz jako osobny objekt. Material Twarz opaque a rzesy transparent.
Awatar użytkownika
Wichur
 
Posty: 98
Rejestracja: 19 Gru 2017, 10:33
Miejscowość: Pruszcz Gdański
Has thanked: 0 time
Been thanked: 0 time

Re: Alpha Mask

Postprzez Ether_141 » 12 Wrz 2018, 11:28

Nie mam możliwości ingerencji w tekstury czy materiały nałożone na model. Wszystko co mogę zrobić to ustawienia materiałów w Unity.

Dobrze. Udało mi się zdobyć i trochę przerobić shader:
Kod: Zaznacz wszystko
Shader "Custom/Skin Shader" {
   Properties{
      _MainTex("Base (RGB)", 2D) = "white" {}
       _AlphaTex("Alpha mask (R)", 2D) = "white" {}
   }

      SubShader{
      Tags{ "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" }
      LOD 100

      Blend SrcAlpha OneMinusSrcAlpha

      Pass{
      CGPROGRAM
#pragma vertex vert
#pragma fragment frag

#include "UnityCG.cginc"


      struct appdata_t {
      float4 vertex : POSITION;
      float2 texcoord : TEXCOORD0;
   };

   struct v2f {
      float4 vertex : SV_POSITION;
      half2 texcoord : TEXCOORD0;
   };

   sampler2D _MainTex;
   sampler2D _AlphaTex;

   float4 _MainTex_ST;

   v2f vert(appdata_t v)
   {
      v2f o;
      o.vertex = UnityObjectToClipPos(v.vertex);
      o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
      return o;
   }

   fixed4 frag(v2f i) : SV_Target
   {
      fixed4 col = tex2D(_MainTex, i.texcoord);
   fixed4 col2 = tex2D(_AlphaTex, i.texcoord);

   return fixed4(col.r, col.g, col.b, col2.r);
   }
      ENDCG
   }
   }

}


działa bardzo dobrze. Nakładam maskę i jest ok, ale chciałbym dodać do tego shadera normal mape oraz zrobić tak, aby shader obsługiwał cienie (?). Nigdy w życiu nie pisałem shaderów. Nie mam bladego pojęcia o tym.
Awatar użytkownika
Ether_141
 
Posty: 375
Rejestracja: 29 Sie 2015, 11:47
Has thanked: 0 time
Been thanked: 0 time

Re: Alpha Mask

Postprzez Wichur » 12 Wrz 2018, 12:27

Powinno Ci to pomóc: https://forum.unity.com/threads/how-to- ... er.240390/

Ewentualnie mógłbyś frag dac jako pass a pozniej normalnie surface. Teoretycznie powinno dzialac. Nie jestem dobrze obeznany w shaderach, czesto dzialam metodą prób i błędów ;) i nałogowe szukanie w google ;)
Awatar użytkownika
Wichur
 
Posty: 98
Rejestracja: 19 Gru 2017, 10:33
Miejscowość: Pruszcz Gdański
Has thanked: 0 time
Been thanked: 0 time

Re: Alpha Mask

Postprzez Ether_141 » 12 Wrz 2018, 12:37

Wielkie dzięki. Powinienem sobie poradzić. Będę różne rzeczy tam wpisywał, coś może zatrybi. Dzięki za poświęcony czas ;)
Awatar użytkownika
Ether_141
 
Posty: 375
Rejestracja: 29 Sie 2015, 11:47
Has thanked: 0 time
Been thanked: 0 time

Re: Alpha Mask

Postprzez Marcin » 12 Wrz 2018, 14:48

Dodanie cieni do grubsza sprawa ton bardziej, jeżeli chodzi o transparenty. Myślę, że łatwiej Ci będzie ugryźć to surface shaderem z alpha blendingiem + fullforwarddhadows.
Marcin
 
Posty: 292
Rejestracja: 25 Lip 2016, 10:44
Has thanked: 0 time
Been thanked: 0 time


Wróć do Shader Lab

Kto jest na forum

Użytkownicy przeglądający to forum: Brak zarejestrowanych użytkowników oraz 3 gości