打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

原创文章如需转载请注明:转载自风宇冲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.           #pragmavertex vert
  14.           #pragmafragment 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.              returno;
  29.           }
  30.           float4 frag(v2f i) : COLOR
  31.           {
  32.              float4texCol = tex2D(_MainTex,i.uv+0.1);
  33.              float4outp;
  34.              outp =texCol * float4(1,0,0,1);
  35.              returnoutp;
  36.           }
  37.           ENDCG
  38.        }
  39.       
  40.        pass
  41.        {
  42.           Blend oneone
  43.           Name"pass2"
  44.          CGPROGRAM
  45.           #pragmavertex vert
  46.           #pragmafragment 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.              returno;
  60.           }
  61.           float4 frag(v2f i) : COLOR
  62.           {
  63.              float4texCol = tex2D(_MainTex,i.uv);
  64.              float4outp;
  65.              outp =texCol * float4(0,1,0,1);
  66.              returnoutp;
  67.           }
  68.           ENDCG
  69.        }
  70.     }
  71. }

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

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





本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Unity3d游戏角色描边
Unity3D Shader 使指定颜色过滤成透明
一个有趣的模拟光照的shader(类似法线贴图)
RenderDoc[03] 还原粒子特效shader
【Unity Shader】Unity3D中的屏幕着色器和图像特效
Shader: 获取深度贴图数据
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服