双骨节

很久以前我就给我的绑定预留了双骨节选项(指膝盖或者肘部用两个骨节)

这种方式在最初学绑定的时候就用过,但是,很无奈的有或多或少的问题,让它无法和无缝切换配合。

现在这个问题解决了,其实也就是换了小小的一步~但是时间却跨越了5个月~~

说起这个。。我的次控还没法和无缝切换配合,不过改起来不是太麻烦,有点结构上的东西想不太清楚。

我在手腕上还有个次控没有用到。我希望能加上去,不过考虑只加X轴位移

肘部次控的Y轴旋转和Z轴旋转依然不考虑添加。

剩下比较难的问题就是肩膀的anti rotateX,这个问题一直没有答案,对于maya这个基于欧拉角的系统而言,似乎没有可能性。所以,总需要多加一个控制器来解决。对了。。我可以在这个控制器上加个簇,这样就不会偶尔进入角色体内找不到了~~

这个控制器还是暂时方案,也许,某一天灵光一闪,就解决了吧。。

手臂上下有180度。。唉。。这个跨度很麻烦。我想想。如果是和shoulderUp向上的时候一起。

是不是可以做一个属性,让肩膀的属性过渡下。有点像ball的过渡~~

对Paolo Dominici所写的ZvRadialBlendShape的研究笔记

ZvRadialBlendShape用了一种非常精简效果却令人惊叹的方式完成了眼睛的变形器。
他把眼睛的变形归结为圆柱体坐标系上的变形,并且加上了线性的offset,非常有创造性的用简单的数学表达式来表现眼睛的神态!

在wiki上,有笛卡尔坐标系和圆柱坐标系的转换公式,不过这公式的轴向是如下:

maya里面的轴向有些不一样,而且需要按照我们的圆柱方向而定:

对于在圆柱上面的一点,如图上面的彩色locator。它的p是图上的蓝色曲线的下面一段,angle就是这个蓝色曲线所摆出的角度。最后的z,也就是我们的x轴。所以笛卡尔坐标系转化为圆柱坐标系:

	// radius
	outPoint.x = sqrt(point.z*point.z + point.y*point.y);
	// angle
	outPoint.y = atan2(point.y, point.z);
	// h
	outPoint.z = point.x;

这样,我们在变形之前,可以起始point和结束point都转化到圆柱坐标系中,然后中间的过渡就在圆柱坐标系中进行blend

——————————————————————————————————————————————————

细节:C++的atan2的范围在(−π, π]之间,参看http://zh.wikipedia.org/wiki/Atan2

π之后,即π到2π之间,没有连续性(-2π到-π之间曲线也没有连续性),y的线性blend也需要在这之间,所以需要对数据进行范围处理)

arcTan的是1阶曲线,它得到的y的结果曲线比较难看。相当于z= arcTan(y/1),这样的效果就像是一个半圆的曲线反向,然后被拉长了。。

atan2就有2个参数,它的结果就符合一个圆的规律。

————————————————————————————————————————

在此基础之上,Paolo Dominici还加入了额外的线性blend。这个blend与locator的tx相关。

根据point的tx与locator的tx之差,给blend加入了一个1阶和2阶的参数:

localBlend = (blend + (curvature*origPointLS.x + twist)*origPointLS.x)*weight;

在这里origPointLS.x 是以locator为参照系的point的position

——————————————————————

以闭眼为例,大概的outPoint.y都会在180度以上。也就是,终点会大概在-100+,起点是大概100+

所以,1阶的变形,也就是twist,它为正时,outpoint.y是从(100~0~-100)*origPointLS.x

利用atan2的园性变形过渡,结果就像在x大于0时,有个半圆向下运动(Y不断减小,并接近横向轴),在x小于0的地方,有个半圆不断向上运动(逆向增加),形成了一个非常帅的S形。

对于curvature而言,也是如此,默认情况下是,两个小一点的半圆(因为是x的2次方,Paolo在这里都让他们处于0~1之间)向下运动,Paolo并没有这样,他乘以了一个-1.这样两个小半圆就默认向上了,这对动画师来说更舒服。

趣味试题,用python打造数字金字塔

def tria(max):
	max,space,size = max+2,' ',len(str(max))
	for item in range(1,max):
		new_space = (size+1)*(max-item)*space
		new_item = range(1,item)
		new_item += sorted(new_item,None,None,1)[1:]
		for sub_item in new_item:
			new_space+=str(sub_item)+(size-(len(str(sub_item))-1))*space
		print new_space

有趣的结果:

                              1
                           1  2  1
                        1  2  3  2  1
                     1  2  3  4  3  2  1
                  1  2  3  4  5  4  3  2  1
               1  2  3  4  5  6  5  4  3  2  1
            1  2  3  4  5  6  7  6  5  4  3  2  1
         1  2  3  4  5  6  7  8  7  6  5  4  3  2  1
      1  2  3  4  5  6  7  8  9  8  7  6  5  4  3  2  1
   1  2  3  4  5  6  7  8  9  10 9  8  7  6  5  4  3  2  1

又修改了一次,代码如下

def tria(max):
	max,space,size,out = max+2,' ',len(str(max)),''
	for item in range(1,max):
		new_space,new_item = (size+1)*(max-item)*space,range(1,item)
		for sub_item in new_item+sorted(new_item,None,None,1)[1:]:
			new_space+=str(sub_item)+(size-(len(str(sub_item))-1))*space
		out+=new_space+'\n'
	print out

2011.8.8

没什么可写的,依然在成长着。

在图书管里读到一些句子,感觉有些收获。

有些感触,就很开心了。似乎这些东西收集多了,就会 更聪明一点了。

今晚的川味烤鱼吃的我一直在暴汗。。还算是有些舒服,那个鱼怎么那么撑啊。。

自己消消火了,脑袋清醒点了。

佛偈-色即是空 空即是色

洗澡的时候,突然想到一句佛偈:色即是空,空即是色。

一切一直不理解这句话,后来突然醒悟,空不是指虚无,而是更为广阔,本质的部分,你可以理解为真理或者自然或者是宇宙,所有一切我们无法完全了解,却在默默控制一切的核心。而,色,就是形态,就是生命,物种以及他们的生活过程。

说到这里,就自然知道了他们两者的关系,就像程序中的oop思想,我们的实例都是通过实例化类得到的,实例就是类的具体化,就像我们说保时捷属于车,保时捷就是车。

空即是色——所有的本质东西,脱离了实体,他并没有任何意义。就像我们写一个类,如果不对它最后进行实例化,或者它不产生任何实例,那么,这个类又有什么用处呢?就像如果没有任何一辆实体车的诞生,那么我们说车的特点,本质,也仅仅是空谈。

在有实体诞生之后,色即是空,空即是色。

色阐述着空,空浓缩了色。

但是要明白一点,说这句话的前提,是“存在”。并且对于人来说,存在的包含了七情六欲。这也是这句佛偈的后面所写

佛偈全句:

舍利子, 色不异空, 空不异色, 色即是空, 空即是色; 受想行识, 亦复如是

受想行识,既是六欲之中。这句话的意思,我感觉并不是告诉人,美色色是坏的。而是在阐述哲学,自然思想。它并不是提醒别人,美色什么的是虚无,而是说,或者狭隘说吧,就把色当做美色。美色欲望是一种来自人本质的欲望。我们的所有细想,行为,都会被欲望所影响,欲望是七情之一,所以,美色也就自然会影响。 这里仅仅谈到影响,或者说是规律,而没有任何好恶判断。

第 4 页,共 31 页« 最新...23456102030...最旧 »