开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

教程分享

关注:664

当前位置:游戏蛮牛 技术专区 教程分享

查看: 1522|回复: 3

[基础知识] Unity3D 纹理贴图移动特效产生岩浆、瀑布效果

[复制链接]  [移动端链接]
7日久生情
4297/5000
排名
2225
昨日变化
4

1646

主题

1657

帖子

4297

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
132510
好友
17
蛮牛币
59850
威望
0
注册时间
2015-12-24
在线时间
352 小时
最后登录
2017-6-20
发表于 2016-10-10 14:19:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
  纹理贴图移动特效产生岩浆、瀑布效果

  原理是改变动态改变纹理坐标uv的值,使之移动

  首先准备好一张贴图

20141208110851328.png

  建立一个shader

  变量一览:

  _MainTex 主纹理贴图

  _MainTint 主要颜色

  _ScrollXSpeed x轴移动速度

  _ScrollYSpeed  y轴移动速度

  [cpp] view plain copy

  Properties {

  _MainTex ("Base (RGB)", 2D) = "white" {}

  _MainTint ("Diffuse Tint", Color) = (1, 1, 1, 1)

  _ScrollXSpeed ("X Scroll Speed", Range(0, 10)) = 2

  _ScrollYSpeed ("Y Scroll Speed", Range(0, 10)) = 2

  }

  主要是在surf函数里进行操作

  fixed xScrollValue = _ScrollXSpeed * _Time;

  fixed yScrollValue = _ScrollYSpeed * _Time;

  x、y偏移量随时间增加

  [cpp] view plain copy

  void surf (Input IN, inout SurfaceOutput o) {

  fixed2 scrolledUV = IN.uv_MainTex;

  fixed xScrollValue = _ScrollXSpeed * _Time;

  fixed yScrollValue = _ScrollYSpeed * _Time;

  scrolledUV += fixed2(xScrollValue, yScrollValue);

  half4 c = tex2D (_MainTex, scrolledUV);

  o.Albedo = c.rgb * _MainTint;

  o.Alpha = c.a;

  }

  _Time是 unity shaderlab内置值

  float4 _Time : Time (t/20, t, t*2, t*3)

  是一个四维向量

  scrolledUV += fixed2(xScrollValue, yScrollValue);

  uv的x,y值随时间累加偏移量

  最后整合uv与主颜色到当前纹理上

  产生了这种移动的效果

20141208111418482.gif

  shader代码如下

  [cpp] view plain copy

  Shader "Custom/testShader" {

  Properties {

  _MainTex ("Base (RGB)", 2D) = "white" {}

  _MainTint ("Diffuse Tint", Color) = (1, 1, 1, 1)

  _ScrollXSpeed ("X Scroll Speed", Range(0, 10)) = 2

  _ScrollYSpeed ("Y Scroll Speed", Range(0, 10)) = 2

  }

  SubShader {

  Tags { "RenderType"="Opaque" }

  LOD 200

  CGPROGRAM

  #pragma surface surf Lambert

  fixed4 _MainTint;

  fixed _ScrollXSpeed;

  fixed _ScrollYSpeed;

  sampler2D _MainTex;

  struct Input {

  float2 uv_MainTex;

  };

  void surf (Input IN, inout SurfaceOutput o) {

  fixed2 scrolledUV = IN.uv_MainTex;

  fixed xScrollValue = _ScrollXSpeed * _Time;

  fixed yScrollValue = _ScrollYSpeed * _Time;

  scrolledUV += fixed2(xScrollValue, yScrollValue);

  half4 c = tex2D (_MainTex, scrolledUV);

  o.Albedo = c.rgb * _MainTint;

  o.Alpha = c.a;

  }

  ENDCG

  }

  FallBack "Diffuse"

  }

  可以看看我的这篇文章也运用了这个知识unity3d 老电影式的屏幕特效


回复

使用道具 举报

7日久生情
1931/5000
排名
609
昨日变化
3

1

主题

519

帖子

1931

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
111260
好友
0
蛮牛币
7096
威望
0
注册时间
2015-6-30
在线时间
327 小时
最后登录
2017-8-23
发表于 2016-10-10 16:08:52 | 显示全部楼层
谢谢分享!

回复

使用道具 举报

排名
18777
昨日变化
11

0

主题

6

帖子

34

积分

Rank: 1

UID
19302
好友
0
蛮牛币
65
威望
0
注册时间
2014-3-28
在线时间
10 小时
最后登录
2017-7-4
QQ
发表于 2016-12-1 14:29:56 | 显示全部楼层
感谢分享
[发帖际遇]: mountainlord 被钱袋砸中进医院,看病花了 2 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

排名
49710
昨日变化
353

0

主题

3

帖子

5

积分

Rank: 1

UID
194721
好友
0
蛮牛币
4
威望
0
注册时间
2016-12-21
在线时间
0 小时
最后登录
2016-12-21
发表于 2016-12-21 09:29:19 | 显示全部楼层
希望可以用

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表