分享

【风宇冲】Unity3D教程宝典之Shader篇:第二十二讲MultiPass

 雪柳花明 2016-06-03

原创文章如需转载请注明:转载自风宇冲Unity3D教程学院

                             第二十二讲  MultiPass

实现高级效果时,往往需要用到多个Pass.

用AlphaBlend混合
例1:
将一张图 分别用红色 和 绿色渲染并混合

(1)新建场景新建一个plane
(2)新建一个material并随便赋张贴图,并让plane使用该material
material所使用的shader如下

  1. Shader "Custom/MyMultiPass" {
  2.     Properties {
  3.         _MainTex ("Base (RGB)", 2D) = "white" {}
  4.     }
  5.     SubShader
  6.     {
  7.          Tags{"Queue"="Transparent"}
  8.      
  9.         pass
  10.         {
  11.             Name "pass1"
  12.             CGPROGRAM
  13.             #pragma vertex vert
  14.             #pragma fragment frag
  15.            
  16.             #include "UnityCG.cginc"
  17.             sampler2D _MainTex;
  18.             float4 _MainTex_ST;
  19.             struct v2f {
  20.                 float4  pos : SV_POSITION;
  21.                 float2  uv : TEXCOORD0;
  22.             } ;
  23.             v2f vert (appdata_base v)
  24.             {
  25.                 v2f o;
  26.                 o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
  27.                 o.uv =  TRANSFORM_TEX(v.texcoord,_MainTex);
  28.                 return o;
  29.             }
  30.             float4 frag (v2f i) : COLOR
  31.             {
  32.                 float4 texCol = tex2D(_MainTex,i.uv+0.1);
  33.                 float4 outp;
  34.                 outp = texCol * float4(1,0,0,1);
  35.                 return outp;
  36.             }
  37.             ENDCG
  38.         }
  39.        
  40.         pass
  41.         {
  42.             Blend one one
  43.             Name "pass2"
  44.             CGPROGRAM
  45.             #pragma vertex vert
  46.             #pragma fragment frag
  47.             #include "UnityCG.cginc"
  48.             sampler2D _MainTex;
  49.             float4 _MainTex_ST;
  50.             struct v2f {
  51.                 float4  pos : SV_POSITION;
  52.                 float2  uv : TEXCOORD0;
  53.             } ;
  54.             v2f vert (appdata_base v)
  55.             {
  56.                 v2f o;
  57.                 o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
  58.                 o.uv =  TRANSFORM_TEX(v.texcoord,_MainTex);
  59.                 return o;
  60.             }
  61.             float4 frag (v2f i) : COLOR
  62.             {
  63.                 float4 texCol = tex2D(_MainTex,i.uv);
  64.                 float4 outp;
  65.                 outp = texCol * float4(0,1,0,1);
  66.                 return outp;
  67.             }
  68.             ENDCG
  69.         }
  70.     }
  71. }

效果如下,红色渲出来的图像 和 绿色渲出来的图像 混合。

【风宇冲】Unity3D教程宝典之Shader篇:第二十二讲MultiPass

如果把AlphaBlend的指令 Blend one one去掉,那么效果如下,即显示的是最后一个pass的效果。

【风宇冲】Unity3D教程宝典之Shader篇:第二十二讲MultiPass



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多