Perfil de T.G.JayJay in Tiny GlobeFotosBlogListasMás ![]() | Ayuda |
|
感谢访问 www.tgjay.com
Jay in Tiny GlobeVFX Artist from China 13/08/2006 "Set out for Lover" Finished06/07/2006 mel实现中键拖拽global proc tgDragWindow() {
if(`window -q -exists "tgDragWindow"`) deleteUI "tgDragWindow";
window "tgDragWindow";
columnLayout;
textScrollList -allowAutomaticSelection 1 -dgc ("nameOfAppend") -numberOfRows 2 -append "drag1" -append "drag2" -sc ("print \"aaa\""); textScrollList -allowAutomaticSelection 1 -dpc ("addItem") -numberOfRows 10 -append ""; showWindow "tgDragWindow";
}
global proc string[] nameOfAppend(string $dragControl,int $dragPositionX,int $dragPositionY,int $aidKey) { if ($dragPositionY<13) textScrollList -e -selectIndexedItem 1 $dragControl;
else if ($dragPositionY>13) textScrollList -e -selectIndexedItem 2 $dragControl; string $nameOfAppend_Output[] = `textScrollList -q -selectItem $dragControl`; print (">>>>>>>>>>>>>>>>>>>>>\n"); print ("$dragControl = " + $dragControl + "\n"); print ("$dragPositionX = " + $dragPositionX+ " pixel from the left of tgDragWindow\n"); print ("$dragPositionY = " + $dragPositionY+ " pixel from the top of tgDragWindow\n"); switch ($aidKey) { case 0: print ("$aidKey = NONE\n"); break; case 1: print ("$aidKey = Shift\n"); break; case 2: print ("$aidKey = CTRL\n"); break; case 3: print ("$aidKey = CTRL + Shift\n"); break; } print ("OUTPUT = " + $nameOfAppend_Output[0] + "\n>>>>>>>>>>>>>>>>>>>>>\n"); return {$nameOfAppend_Output[0]};
}
global proc addItem(string $dragControl,string $dropControl,string $nameOfAppend[],int $dropPositionX,int $dropPositionY,int $actionType) { print ("$dragControl = " + $dragControl + "\n");
print ("$dropControl = " + $dropControl+ "\n"); print ("$nameOfAppend = " + $nameOfAppend[0] + "\n"); print ("$dropPositionX = " + $dropPositionX + " pixel from the left of tgDragWindow\n"); print ("$dropPositionY = " + $dropPositionY + " pixel from the top of tgDragWindow\n"); switch ($actionType) { case 1: print ("$actionType = Move\n"); break; case 2: print ("$actionType = Copy\n"); break; case 3: print ("$actionType = Link\n"); break; } textScrollList -e -append $nameOfAppend[0] $dropControl;
} 18/06/2006 BRDF Shader很偶然的机会在CGWorld看到了BRDF(双向反射率分布函数)的光照模型,
写在很小的一个角落里面,很简略得介绍了BRDF, BRDF在形式上表现为三个角度得三维函数,既: 照明方向与法线方向所成的角度; 视角方向与法线方向所成的角度; 与法线垂直的平面上的照明方向与视角方向之间所乘的角度; 但是这个三维函数不是简单的数学公式, 而是需要用科学试验获得的经验公式(插值复原), 我在maya中模拟的只是最简单最基本的BRDF模型, 而且用多项三角函数代替了经验公式,效果如下。 BRDF最经典的应用是布料。 由于布料表面由许多精细的小结构(次微观结构)构成, 所以它的反光特性就显得很复杂。 BRDF试图通过一个宏观的光照模型来改概括些小结构的视觉效果。 双向反射率分布函数的数学定义就是在一定条件下(好比一定的视角), 反射光强和入射光强的比值。 BRDF大部分时候都能体现各向异性, 并且高光和非高光部分都能随着视角的变化而变化。 (ps.只是高光随着视角变化,blinn就能做到) 并且,BRDF的系数是一个经验系数。 eg.Maya中有一个表面朝向率, 其实就是表面法线(Normal Camera)和视角(Ray Direction)夹角A的余弦值cosA 如果把这个值赋给材质的自发光属性,那么可以这么描述: incandescenceR = incandescenceG = incandescenceB = cosA 我所做到的也只停留在这一步。 但是BRDF是一个经验函数,它应该表示为: incandescenceR = incandescenceG = incandescenceB = K·cosA 而且这个K会随着A的变化而变化, 只有达到了这一步,布料才会看上去更真实。 __________________ 17/06/2006 梦中的顿悟这个礼拜写了一个maya导权重的mel,叫做Sweet Baby。
之所以取这个这个名字是因为这个mel能处理模型拓扑变化的情况,
就像Sweet Baby一样甜。
Sweet Baby的作用正是maya默认import WeightMap所办不到的,
但是它有一个致命的缺陷,也是maya的通病:
maya所bake的map在uv Shell边缘处都会有锯齿,
在读取map的时候100%造成采样不正确。
因此,我动了一下脑筋,提出了tolerance sample的算法:
凡是uv shell边缘采样,均往里便宜一小段距离。
尽管这样,还是有千分之一的点会采样错误。
今天早上做梦,梦见动画督导不能接受这千分之一的错误,要求改进。
我在梦里便完成了新算法的构想。
新的算法里不再采用maya exprot的数据,
而是采用自己构架的mel 将 vertex<->UV<->Weight的数据记录下来。
并动态的将UV大小规类,以便加速读取:0-0.1,0.1-0.2……
import时采用这样的策略:
原来就存在的点,直接读取,由于已经将uv规类,所以遍历很快。
新加的点expand uv后读取周边weight数据,
并根据这点到各点的距离加权求和;
如果expand一次以后仍然都是新的点,则继续expand,
直到出现至少两个旧点为止。 |
||||
|
|