您当前的位置: 首页 >  unity

Jave.Lin

暂无认证

  • 1浏览

    0关注

    704博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Unity Shader - ShaderToy - Waves

Jave.Lin 发布时间:2019-08-11 19:32:25 ,浏览量:1

Unity Shader - ShaderToy - Waves

参考了:【OpenGL】Shader实例分析(一)-Wave

因为觉得太漂亮了,所以复制了,改了一下 在这里插入图片描述

shader就不讲解了,反正我是乱改的。 觉得这种在fragment shader里实现的特效,真的是很难理解,除非数学到达了登峰造极的大神,可以随便搞。

shader:

Shader "shadertoy/Waves_MyTest" {
	Properties
	{
		_lineThick("line tick", Range(1, 10)) = 1
		_blockNum("block num", Range(10, 50)) = 30
	}
	CGINCLUDE  
		#include "UnityCG.cginc"              
		struct vertOut {  
			float4 pos:SV_POSITION;  
			float4 srcPos : TEXCOORD;
		};
		float _lineThick;
		float _blockNum;
		vertOut vert(appdata_base v) {
			vertOut o;
			o.pos = UnityObjectToClipPos (v.vertex);
			o.srcPos = ComputeScreenPos(o.pos);
			return o;
		}
		fixed4 frag(vertOut i) : COLOR0 {
            float siny = sin(_Time.y);
            float sinx = sin(_Time.x);
            float sinz = sin(_Time.z);
            float siny01 = siny * 0.5 + 0.5;
            float sinx01 = sinx * 0.5 + 0.5;
            float sinz01 = sinz * 0.5 + 0.5;

            float divTimes = siny01 * 10 + _blockNum - 10;
            float fmodV = 1 / divTimes;

            float radius = (siny01) * 0.1 + 0.25;
 
            // xy数值范围:[0~1],左下角是(0,0)点
            // x:[0~1]是从左到右
            // y:[0~1]是从下到上
			float2 screenXY = (i.srcPos.xy/i.srcPos.w);
			float2 sxy_bk = screenXY;
            screenXY = screenXY * 2 - 1;
            screenXY.x += (cos(_Time.y) * 0.5 + 0.5) * radius;
            screenXY.y += (siny01) * radius;
            float r = fmod(screenXY.x, fmodV) * divTimes; 
            float g = fmod(screenXY.g, fmodV) * divTimes; 

            float2 v = floor(screenXY * divTimes);
            if (fmod(v.x, 2.0) == 0 || fmod(v.y, 2.0)==0)
                r = g = 0; // 偶数的行列都不显示

            float amp = 0.2;
			fixed2 wave_color2 = 0;
			float count = 10;
			screenXY.y -= 0.12 * count;
			for(float i = 0; i             
关注
打赏
1664331872
查看更多评论
0.0804s