纳金网

标题: 简单的波浪shade [打印本页]

作者: 烟雨    时间: 2016-7-30 22:01
标题: 简单的波浪shade

最近在学shader,当一个学习笔记记载下。原理就是一个正弦波计算公式来改变plane的vertex坐标。模拟下海浪滚动
  1. Shader "Custom/wave" {
  2.                 SubShader{
  3.                         pass {
  4.                         CGPROGRAM
  5.                         #pragma vertex vert
  6.                         #pragma fragment frag

  7.                         #include "unitycg.cginc"
  8.                                 float _W;
  9.                         float _H;
  10.                         struct v2f {
  11.                                 float4 pos:POSITION;
  12.                                 fixed4 color : COLOR;
  13.                         };

  14.                         v2f vert(appdata_base v)
  15.                         {
  16.                                 //正弦波公式 a*sin(w*x+t)         公式套用如下
  17.                                 // a振幅(也就是波的平缓程度) w角速度(控制正弦周期,也就是波的周期) x也就是开始的顶点坐标位置没有起伏的平面一开始的时候都是0
  18.                                 //t是一个初相,x=0时的相位;反映在坐标系上则为图像的左右移动。可以简单理解为一个当w*x等于0的时候一开始的一个波形
  19.                                        
  20.                                 //通过_Time
  21.                                 //v.vertex.y = v.vertex.y + 0.8*sin(v.vertex.z+ _Time.y);//横向波
  22.                                 //v.vertex.y += 0.2*sin(-length(v.vertex.xz) + _Time.y);//圆形波

  23.                                 //下面两个斜向波形组成海浪的翻滚  关键字_Time:表示使用时间的一个变化因子
  24.                                 v.vertex.y +=  0.2*sin(v.vertex.z+ v.vertex.x + _Time.y);//斜向波形
  25.                                 v.vertex.y += 0.3*sin((v.vertex.z - v.vertex.x) + _Time.w);//斜向波形 两个斜向叠加制造一个海浪波
  26.                                 v2f o;
  27.                                 //UNITY_MATRIX_MVP Unity提供的矩阵,M-当前模型矩阵 v-摄像机矩阵,p-投影的矩阵
  28.                                 o.pos = mul(UNITY_MATRIX_MVP, v.vertex);//mul-矩阵乘法,也就是矩阵在3d世界中的显示坐标,前面矩阵影响后面的
  29.                                 o.color = fixed4(v.vertex.y, v.vertex.y, v.vertex.y, 1);
  30.                                 return o;
  31.                         }
  32.                         float4 frag(v2f IN) :COLOR
  33.                         {
  34.                                 return IN.color;
  35.                         }

  36.                                 ENDCG
  37.                 }
  38.         }
  39. }
复制代码

作者: 神的圣诞结    时间: 2016-7-31 11:08
,不错
作者: elvaad    时间: 2016-8-1 15:51
不能加贴图吗
作者: walknight    时间: 2016-9-7 16:15
回复做记号有时间学学
作者: 342391201    时间: 2016-9-8 09:48

O(∩_∩)O谢谢分享...........
作者: 毛毛虫    时间: 2016-9-29 16:24
谢谢分享,很厉害啊!!!!!!




欢迎光临 纳金网 (http://c-www.narkii.com/club/) Powered by Discuz! X2.5