Batman Equation

今天看大企鹅发的连接显示Duncan穿越到今天发了一个使用Maya的表达式和自己写的流体纹理来制作分形的一篇Blog,这老头果然还是像神一般存在着。突然想起前几日在微博上看了一个蛋疼的老外教师推的一个Batman Equation,用表达式实现之。


观察方程发现,

  • 方程为因式相乘=0的形式,只要任何一个因式=0整个大串=0
  • 根号其实是相应因式的条件,也就是起作用的区间
看明白后实现了一下,感觉挺爽撒,还真的是这么个标志呢




上面的图就是实现的效果,下面是节点和表达式代码:



Expressions:

float $s3s33 = sqrt(33)*3;
float $s6s10 = sqrt(10)*6;

proc float f1(float $x,float $y){
	return  $x*$x/49 +$y*$y/9-1;
}

proc float f2(float $x,float $y){
	float $abs_x = abs($x);
	float $f = abs($abs_x-2)-1;
	return $abs_x/2 - ($s3s33-7)/112*$x*$x -3 + sqrt(1-$f*$f) - $y;
}

proc float f3(float $x,float $y){
	return 9-8*abs($x)-$y;
}

proc float f4(float $x,float $y){
	float $abs_x = abs($x);
	return $abs_x*3+.75-$y;
}

proc float f5(float $x,float $y){
	return 2.25-$y;
}
proc float f6(float $x,float $y){
	float $abs_x = abs($x);
	float $f = $abs_x - 1;
	return $s6s10/7 + (1.5-.5*$abs_x) - $s6s10/14 * sqrt(4-$f*$f) - $y;
}

proc float batmanEquation(float $x,float $y){

	float $abs_x = abs($x);
	float $abs_y = abs($y);
	
	if ($x>-.5 && $x<.5) 
		return f5($x,$y)>0 && f2($x,$y)<0;
	else if ($abs_x>.5 && $abs_x<=.75)
		return f4($x,$y)>0 && f2($x,$y)<0;
	else if ($abs_x>.75 && $abs_x<=1)
		return f3($x,$y)>0 && f2($x,$y)<0;
	else if ($abs_x>1 && $abs_x<=3)
		return f6($x,$y)>0 && f2($x,$y)<0;
	else if ($abs_x>3 && $abs_x<=4)
		return f1($x,$y)<0 && f2($x,$y)<0;
	else
		return f1($x,$y)<0;
}

float $scale = 0.07;
float $u = (samplerInfo1.uCoord-.5)/$scale;
float $v = (samplerInfo1.vCoord-.5)/$scale;
float $BE = batmanEquation($u,$v);

if ($BE == 4)
	ramp1.vCoord=0;
else if ($BE>0)
	ramp1.vCoord= .5;
else
	ramp1.vCoord=1;


清晰版:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值