shadertoy知识点小总结20200512

今天是汶川地震12周年,其实早上来的时候我并不知道,是我同事和我说我才知道的。今天感觉很疲惫,但还是想总结一下,毕竟我这个金鱼的记忆力是靠不住的。

1、首先是几个函数的总结

(1)step函数:这个函数我其实见过很多遍了,但是我老是记不住,step(a,x)
当x<a时 函数为0,其他情况函数为1
(2)floor函数:成为阶梯函数,向下取整函数,取得当前小于或者等于x值的整数,需要注意的是,floor(-2.2)=-3 floor(2.2)=2
(3)fmod函数:取余函数 一开始对于这个函数是一点不懂的,后来在百度查呀查终于明白啦!
fmod这个函数的性质就是值域一定是小于或者等于被除数的。而且如果除数小于被除数,那么余数就是除数本身啦,而且余数本身是可以是小数和负数的。
(4)sign函数:称为符号函数,如果x<0,那么函数取值为-1,如果x>0,那么函数取值为1,如果x=0,那么函数取值为0。
(5)clamp函数:clamp函数称为固值函数(我自己起的哈哈),因此需要有三个参数,clamp(x,a,b)如果x<a,则函数为a,如果x>b,则函数为b,其余的就是x本身~

2、这几个函数是这几天用到的函数,组合起来有奇效奥~
首先我们如果在shader里面画圆,分为两种 第一种是画内⚪,内圆的意思就是我们得到的是圆内部的颜色,需要用到step函数。step(length(i.uv),r)
r也就是我们想要画的⚪的半径,如果想要给这个可爱的⚪涂色就可以在后面乘上fixed4()~
但是现在有点搞不明白的一点是为什么黑背景上可以加各色的⚪,但是白背景上不可以???可能是因为(1,1,1)上加上数都是大于1,因此还是白色~我是这么理解的啦

如果想要想要画外⚪,外圆就是我们可以控制圆外的颜色,一般用来画圆弧,我们只需要控制i.uv.y的大小,具体就是
首先我们令r=i.uv.y
然后r=2r-1;
我们将r的直接当作颜色输出,对于颜色而言,小于0就是黑色的,因此如果r<1/2,那么颜色就是黑色,如果r>0.5,那么就是其他的颜色,因此r就是我们圆的半径了哈哈哈~

当我们想要画圆弧的时候,我们需要在r=2r-1;后面再加一句代码,也就是 r=abs(1/(k*r))
我们如果观察1/30x的图像我们就可以发现在r>0.5之后,很快就又趋近于0了,因此我们圆环的宽度和这个k数值有关。在这里插入图片描述
最后一个是画虚线,采用的是step函数和fmod函数

我们举个例子

fixed4 frag (v2f i) : SV_Target
			{
				float c1 = fmod(i.uv.x, 2.0* 1);//fmod是一个周期函数,以2为周期,并且值域是(0,2)
				c1 = step(1, c1);//step函数是比较大小的函数,0.1处于(0,2)之间。
				//当fmod函数和step函数组合在一起的时候,随着i.uv.x逐渐变大,c1的值在0,1之间变化。
				float c2 = fmod(i.uv.y, 2.0* 2);
				c2 = step(1, c2);
				//c2同理,当i.uv.y逐渐变大,c2的值在0,1之间变化。
				fixed4 COLOR1 = fixed4(1, 0, 0, 1);
				fixed4 COLOR2 = fixed4(1, 1, 0, 1);
				fixed4 bg_color = lerp(i.uv.x * COLOR1, i.uv.y * COLOR2, c1*c2);//c1*c2的意思在于需要x和y同时都是1的时候才能上色~
				return bg_color;
			}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值