(二十一)unity Shader——————shader中的动画效果:下篇(顶点动画)

本文介绍了如何在Unity Shader中实现顶点动画,以创建流动的河流和广告牌效果。对于河流,通过正弦函数模拟水流波动,调整多个属性实现动态效果。广告牌技术利用视角方向旋转多边形,使其始终面向摄像机。文章还探讨了顶点动画的注意事项,包括批处理和阴影投射的处理方法。
摘要由CSDN通过智能技术生成

顶点动画可以让我们的场景变得更加生动有趣。在游戏中,我们常常使用顶点动画来模拟飘动的旗帜,河流的效果。下面将学习两种常见的顶点动画应用:流动的河流以及广告牌技术,最后还给出一些顶点动画中的注意事项以及解决方法。

一、流动的河流

河流的模拟是顶点动画最常见的应用之一。原理通常是使用正弦函数等来模拟水流的波动效果。本节会展示如何模拟一个2D的河流效果。

1.声明属性:

Properties {
		_MainTex ("Main Tex", 2D) = "white" {}
		_Color ("Color Tint", Color) = (1, 1, 1, 1)
		_Magnitude ("Distortion Magnitude", Float) = 1
 		_Frequency ("Distortion Frequency", Float) = 1
 		_InvWaveLength ("Distortion Inverse Wave Length", Float) = 10
 		_Speed ("Speed", Float) = 0.5
	}

其中,_MainTex是河流纹理,_Color用于控制整体颜色,_Magnitude用于控制水流波动的幅度,_Frequency用于控制波动频率,_InvWaveLength用于控制波长的倒数(_InvWaveLength越大,波长越小),_Speed用于控制河流纹理的移动速度。

2.为透明效果设置合适的Subshader标签:

SubShader {
		// Need to disable batching because of the vertex animation
		Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "DisableBatching"="True"}

我们除了为透明效果设置Queue、IgnoreProjector和RenderType外,还设置了一个新的标签——DisableBatching。一些subshader在使用unity批处理功能时会出现问题,这时可以通过该标签来直接指明是否对该Subshader使用批处理。而这些需要特殊处理的shader通常就是指包含了模型空间的顶点动画的shader。这是因为批处理会合并所有相关的模型,而这些,模型各自的模型空间就会丢失,本例我们需要在模型空间下对顶点位置进行偏移,因此这里取消对该shader的批处理操作。

3.接着设置了Pass的渲染状态:

Pass {
			Tags { "LightMode"="ForwardBase" }
			
			ZWrite Off
			Blend SrcAlpha OneMinusSrcAlpha
			Cull Off

这里关闭了深度写入,开启并设置了混合模型,并关闭了剔除功能,这是为了让水流的每个面都能显示。

4.在顶点着色器进行了相关的顶点动画:

v2f vert(a2v v) {
				v2f o;
				
				float4 offset;
				offset.yzw = float3(0.0, 0.0, 0.0);
				offset.x = sin(_Frequency * _Time.y + v.vertex.x * _InvWaveLength + v.vertex.y * _InvWaveLength + v.vertex.z 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值