unity 3D 添加多个shader遮罩

shader遮罩利用alhpa通道改变纹理的区域透明度,添加多层贴图就可以实现纹理多个区域不同的透明情况。

结果如下图所示:

我们说一下如何实现,当然看这篇之前最好先看看这篇:

unity用shader遮罩模拟黑夜火把照明效果

http://jingyan.baidu.com/article/2fb0ba40a8113500f2ec5f0e.html

工具/原料

  • 一台电脑
  • unity4.0
  • unity用shader遮罩模拟黑夜火把照明效果http://jingyan.baidu.com/article/2fb0ba40a8113500f2ec5f0e.html

方法/步骤

  1. 首先在场景中放几个火盆,随便你想放几个。当然这里放几个,后面shader里就需要几张遮罩贴图。这里我们放俩个火盆。

    unity 添加多个shader遮罩
  2. 我们在shader中添加三张贴图来做遮罩,猪脚一张、火盆三张,分别为

     _Mask ("Mask", 2D) = "white" {}

     _Mask0 ("Mask0", 2D) = "white" {}

     _Mask1 ("Mask1", 2D) = "white" {}

  3. 在纹理混合中进行如下设置:

     SetTexture [_Mask] {combine texture}

     SetTexture [_MainTex] {combine texture,texture-previous}

     SetTexture [_Mask0] {combine previous,previous-texture}

     SetTexture [_Mask1] {combine previous,previous-texture}

     SetTexture 的原理在

    unity用shader遮罩模拟黑夜火把照明效果

    中有说过,这里就不详细说了

    总之就是将上一步计算的的alpha通道值减去这张贴图的alpha通道值就是了。

    unity 添加多个shader遮罩
  4. 保存一下,回到我们的主界面,将我们的遮罩贴图拖到三个子贴图中,

    但是这样场景中只看到了一个光圈。

    unity 添加多个shader遮罩
  5. 我们把他的offset都偏移一下,这样三个就齐了。

    将光圈对准火盆与光圈跟随猪脚移动原理一样。

    下一步让光圈移到火盆处。

    unity 添加多个shader遮罩
    unity 添加多个shader遮罩
  6. 我们打开脚本,

    脚本中添加:

    public GameObject fire;

    public GameObject fire0;

  7. 然后按照获得俩火盆的位置:

    float firex = fire.transform.position.x;

    float firey = fire.transform.position.y;

    float fire0x = fire0.transform.position.x;

    float fire0y = fire0.transform.position.y;

    然后就是根据火盆的位置获得遮罩的偏移量:

    float offsetfirex=-firex/(Le*2f);

    float offsetfirey=-firey/(Wi*2f);

    float offsetfire0x=-fire0x/(Le*2f);

    float offsetfire0y=-fire0y/(Wi*2f);

    最后是改变遮罩的位置:

    renderer.material.SetTextureOffset ("_Mask0", new Vector2 (offsetfirex,offsetfirey));

    renderer.material.SetTextureOffset ("_Mask1", new Vector2 (offsetfire0x,offsetfire0y));

  8. OK,回到场景运行,测试一下效果不错:

    unity 添加多个shader遮罩
  9. 我们最后让火盆的光圈也能和猪脚一样忽大忽小:

    我们在如图所示脚本位置添加:

    renderer.material.SetTexture("_Mask0",mask[i]);

    renderer.material.SetTexture("_Mask1",mask[i]);

    具体脚本如下:

    f(Time.time>b){

    b=b+c;

    if(i<mask.Length-1){

    i++;

    }else

    {

    i=0;

    }

    renderer.material.SetTexture("_Mask",mask[i]);

    renderer.material.SetTexture("_Mask0",mask[i]);

    renderer.material.SetTexture("_Mask1",mask[i]);

    }

    原理就是循环一组大小不同的的光圈图片作为遮罩的贴图,具体在

    unity 贴图动画实现照明忽大忽小

    http://jingyan.baidu.com/article/72ee561a58724ae16138df25.html

    里面说过,就不详细说了。

    最终脚本如下图:

    unity 添加多个shader遮罩
    unity 添加多个shader遮罩
  10. 10

    OK,最终效果如下图,很不错吧!

    unity 添加多个shader遮罩
    END

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值