struct Input {
float2 uv_MainTex
float2 uv_NoiseTex
}
void vert(inout appdata_full v,Input o)
{
UNITY_INITIALIZE_OUTPUT(Input o)
o.vertcolor=v.color
}
void surf(Input IN, inout SurfaceOutput o) {
float2 speed=float2(xscroll,yscroll)*_Time.x+IN.uv_NoiseTex
fixed4 noise1 = tex2D(_NoiseTex,speed)
fixed4 noise2 = tex2D(_NoiseTex,speed)
half4 c=tex2D(_MainTex,float2(noise1,x+noise2,y,noise1.y+noise2.x))
o.Albedo = c.rgb * N.vertex.color.rgb + _MainColor.rgb
o.Alpha = d.a*IN.vertex.color.a*_MainColor.a
}
其中核心的部分就是使用noisetex贴图对maintex进行UV采样从而实现模拟的流水折射扭曲效果
注:
UNITY_INITIALIZE_OUTPUT(type,name)这个函数的作用就是吧name类型 转成type类型;
打开一个需要添加水效果的工程,点击Unity3D编辑器上的Assets菜单,在d出来的下拉菜单中选择ImportPackage-->"Water(ProOnly)"。1、d出一个Importingpackage窗口,里面显示的是即将导入的资源包,一般默认即可,点击Import按钮。
2、水体的资源包导入成功后,点击Assets-->StandardAssets-->Water(ProOnly),可以看到Project视图左侧的目录,在Project视图右侧可以看到Daylight和Nighttime。
3、将Project视图右侧的Daylight直接拖入到游戏场景中。
4、Inspector视图看到此时的添加的Water(Script)与DaylightWater与添加简单水时不太一样。
5、点击Inspector视图下DaylightWater里面有好多设置参数。
6、将游戏场景中的水模型,进行适当的拉伸(WIndows下按快捷键R,然后拖动三个坐标轴),使其符合游戏场景。
7、点击Unity3D中的运行按钮,在Game视图看以看到复杂的水效果,这个水效果比简单的水效果更加真实。
建议还是用自带的water4如果自己做的话,先要自己写一个水的shader,然后还要写脚本控制水的反射、折射、流动、波纹间隔等等很多参数
图的话要:一张Foam图做波浪,一张Bump图做水的波纹,一张Fallback图做发生错误的时候的渲染,其他的调一下颜色
还需一个Plane
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)