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

扫一扫,访问微社区

教程分享

关注:606

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

查看: 1130|回复: 3

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

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

1547

主题

1557

帖子

4001

积分

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

UID
132510
好友
17
蛮牛币
42402
威望
0
注册时间
2015-12-24
在线时间
324 小时
最后登录
2017-4-21
发表于 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日久生情
1513/5000
排名
868
昨日变化

0

主题

408

帖子

1513

积分

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

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

回复

使用道具 举报

排名
17427
昨日变化
8

0

主题

6

帖子

33

积分

Rank: 1

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

回复

使用道具 举报

排名
45696
昨日变化
74

0

主题

3

帖子

5

积分

Rank: 1

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

回复

使用道具 举报

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

本版积分规则

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