.[ ČeskéHry.cz ].
Unity - sloučení dvou shaderů

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Vojtas



Založen: 10. 08. 2012
Příspěvky: 11
Bydliště: Chrudim

PříspěvekZaslal: 13. leden 2014, 06:56:16    Předmět: Unity - sloučení dvou shaderů Odpovědět s citátem

Zdravím opět! A zas s hloupým dotazem...
Zde je lehké nastínění mého problému: Mám dva shadery. První je standardní shader pro sprite v Unity 4.3, vypadá zhruba takto:

kód:
Shader "Custom/FoldInvisSprite"
{
   Properties
   {
      [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
      _Color ("Tint", Color) = (1,1,1,1)
      [MaterialToggle] PixelSnap ("Pixel snap", Float) = 0
   }

   SubShader
   {
      Tags
      {
         "Queue"="Transparent"
         "IgnoreProjector"="True"
         "RenderType"="Transparent"
         "PreviewType"="Plane"
         "CanUseSpriteAtlas"="True"
      }

      Cull Off
      Lighting Off
      ZWrite Off
      Fog { Mode Off }
      Blend SrcAlpha OneMinusSrcAlpha

      Pass
      {
      CGPROGRAM
#pragma exclude_renderers d3d11 xbox360
         #pragma vertex vert
         #pragma fragment frag
         #pragma multi_compile DUMMY PIXELSNAP_ON
         #include "UnityCG.cginc"
         
         struct appdata_t
         {
            float4 vertex   : POSITION;
            float4 color    : COLOR;
            float2 texcoord : TEXCOORD0;
         };

         struct v2f
         {
            float4 vertex   : SV_POSITION;
            fixed4 color    : COLOR;
            half2 texcoord  : TEXCOORD0;
            float _a;
            float _b;
         };
         
         fixed4 _Color;

         v2f vert(appdata_t IN)
         {
            v2f OUT;
            OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex);
            OUT.texcoord = IN.texcoord;
            OUT.color = IN.color * _Color;
            #ifdef PIXELSNAP_ON
            OUT.vertex = UnityPixelSnap (OUT.vertex);
            #endif

            return OUT;
         }

         sampler2D _MainTex;

         fixed4 frag(v2f IN) : COLOR
         {
            return tex2D(_MainTex, IN.texcoord) * IN.color;
         }
         
      ENDCG
      }
   }
}

Druhým je surface shader, který jsem dal dohromady, funguje docela dobře, ale jen pro quad:

kód:
Shader "Custom/FoldInvis" {

   Properties {
      _MainTex ("Base (RGB) Trans(A)", 2D) = "white" {}
      _Color ("Color", Color) = (1,1,1,1)
      _a ("a", float) = 100
      _b ("b", float) = 100
   }

   SubShader {
      Tags{"Queue"="Transparent"}
      LOD 200

      CGPROGRAM
      #pragma surface surf Lambert

      sampler2D _MainTex;
      float4 _Color;
      float _a;
      float _b;
      
   
      struct Input {
        float2 uv_MainTex;
      };
     

      void surf (Input IN, inout SurfaceOutput o) {
        half4 result = tex2D (_MainTex, IN.uv_MainTex);
        clip(IN.uv_MainTex.y < _a * IN.uv_MainTex.x + _b ? 1 : -1 );
        o.Albedo = result.rgb * _Color.rgb;
        o.Alpha = result.a;
      }
      ENDCG
   }
}


Snažím se tyto dva shadery zkombinovat, bohužel bez úspěchu. Vyhledal jsem spoustu podkladů pro syntézu svou shaderů různých typů, ale očividně nejsem s to pochopit podstatu. Myslíte, že byste mi mohli jakkoliv poradit? Každá rada je mi teď drahá...

Děkuji předem za jakoukoliv odezvu a přeji hezké dny a týdny...
-Vojta Kočí
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Vojtas



Založen: 10. 08. 2012
Příspěvky: 11
Bydliště: Chrudim

PříspěvekZaslal: 17. leden 2014, 17:48:29    Předmět: Odpovědět s citátem

Tak jsem nakonec problém vyřešil, popravdě, stydím se, že jsem se vůbec ptal, řešení bylo smutně snadné:

kód:
Shader "Custom/FoldInvisSprite"
{
   Properties
   {
      [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
      _Color ("Tint", Color) = (1,1,1,1)
      [MaterialToggle] PixelSnap ("Pixel snap", Float) = 0
      _a ("a", float) = 100
        _b ("b", float) = 100
   }

   SubShader
   {
      Tags
      {
         "Queue"="Transparent"
         "IgnoreProjector"="True"
         "RenderType"="Transparent"
         "PreviewType"="Plane"
         "CanUseSpriteAtlas"="True"
      }

      Cull Off
      Lighting Off
      ZWrite Off
      Fog { Mode Off }
      Blend SrcAlpha OneMinusSrcAlpha

      Pass
      {
      CGPROGRAM
         // Upgrade NOTE: excluded shader from DX11 and Xbox360; has structs without semantics (struct v2f members _a,_b)
         #pragma exclude_renderers d3d11 xbox360
         #pragma vertex vert
         #pragma fragment frag
         #pragma multi_compile DUMMY PIXELSNAP_ON
         #include "UnityCG.cginc"
         
         struct appdata_t
         {
            float4 vertex   : POSITION;
            float4 color    : COLOR;
            float2 texcoord : TEXCOORD0;
         };

         struct v2f
         {
            float4 vertex   : SV_POSITION;
            fixed4 color    : COLOR;
            half2 texcoord  : TEXCOORD0;
         };
         
         fixed4 _Color;

         v2f vert(appdata_t IN)
         {
            v2f OUT;
            OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex);
            OUT.texcoord = IN.texcoord;
            OUT.color = IN.color * _Color;
            #ifdef PIXELSNAP_ON
            OUT.vertex = UnityPixelSnap (OUT.vertex);
            #endif

            return OUT;
         }

         sampler2D _MainTex;
         float _a;
          float _b;

         fixed4 frag(v2f IN) : COLOR
         {
         if(IN.texcoord.y < _a * IN.texcoord.x + _b)
            return tex2D(_MainTex, IN.texcoord) * IN.color;
         else
            return 0;
         }
         
      ENDCG
      }
   }
}


Snad někdy někomu tento kód pomůže... Hezký den!
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna