Maya中生成打湿贴图
来源:互联网 发布:淘宝试用不写试用报告 编辑:程序博客网 时间:2024/04/30 00:03
以上是测试过程某一帧的截图,比较含蓄,动态效果在http://v.youku.com/v_show/id_XMzEyNDM2OTgw.html
说一下制作wetmap的思路。
在maya中比较常见的是使用fluidTexture,3D or 2D,作为纹理,因为这两个纹理是唯一能用mel直接修改的纹理。总体就是粒子发射流体,造成的效果就是粒子在经过物体时会将对应位置改变着色,造成打湿效果。
这方法的弊端也显而易见了,不管是3D还是2D,对形变的物体的贴图的匹配都是个问题,而且最不堪的是voxel级的流体贴图质量不能和pixel级的文件贴图相比。
现在的这种方法就是直接使用了类似Realflow的文件贴图的生成。
(Maya除了lightmap等是不能写纹理的,但有了python就high了,知道我已经说过N遍了,但还是要说python太爽了,太high了~)
嗯。思路是这样的:
1.使用Python的PIL库来完成贴图的生成脚本。包含3个主要部分
- frameLoop,用来在每帧迭代运行,在此函数可以让wetmap模糊、衰减、扭曲等。
- drop,用来在指定位置打湿一滴。
- merge,合成输出保存函数。(为了能够正常frameLoop贴图是分两层的,每帧迭代的只是wetmap层)
2.使用Maya的内置机构驱动起所写的py模块运行。
- frameLoop用Expression
- drop写到粒子的碰撞事件
- merge写到Expression里,frameLoop之后。
源代码很简单,犹豫要不要放上来,因为对高手来说不发出来高手也会做,对新手来说,既然说了原理,放上代码就像直接把饭嚼好送到口中,让人失去咀嚼的乐趣了。
所以源码有需要的跟我说。就不放上来了~
把主要部分发上来吧:
init函数,用于读入贴图文件,比如滴溅的mask
addDrop函数,主要的drop函数。
def init(): global bg,blood,fg,wet bg = _pi.open(kBG); blood = _pi.open(kBlood ); fg = _pi.new('RGBA',bg.size,(0,0,0,0));
def addDrop(color,bg,drop_mask,x,y,rotate,size): sizew,sizeh = bg.size x*=sizew y*=sizeh bbox = (int(x-0.5*size), int(y-0.5*size), int(x-0.5*size)+int(size), int(y-0.5*size)+int(size)) drop_mask = drop_mask.rotate(rotate,_pi.BICUBIC) drop_mask = drop_mask.resize((size,size),1) fg = _pi.new('RGB',(size,size),(color[0],color[1],color[2])) bg.paste(fg,bbox,drop_mask) return bg
不得不说,python的代码总是这么的精简,几乎完全不需要做算法以外的部分。
- Maya中生成打湿贴图
- 在maya中生成迷宫
- Maya中AO贴图的一些烘焙心得
- Maya 凹凸贴图与置换贴图
- Maya创建与应用贴图
- 法线贴图的生成
- Maya打开.obj模型并为其贴图
- Maya打开.obj模型并为其贴图
- Maya Mel 循环生成高脚杯
- MAYA中average normal
- 打湿的人生
- maya
- maya
- Maya中如何查看法线?
- maya中种树脚本思路
- wxWidgets中贴图操作.
- wxWidgets中贴图操作
- 在窗口中贴图
- 【单调队列】Window+(window.pas/c/cpp;时限+2s;256M)
- HTTP协议
- 雨夜自述
- 编程笔记(Objective-c:属性的实现)
- 10.13
- Maya中生成打湿贴图
- vi命令小结
- 从服务器端开发来看进程与线程的优缺点
- linux 命令 xxd
- http协议
- 科比"生涯"收入仅居历史第二+恐难逾越现役一人
- HSI、HSV、RGB、CMY、CMYK、HSL、HSB、Ycc、XYZ、Lab、YUV颜色模型
- 【转】定制Eclipse的Content assist(代码补全),比如空格键不上屏
- http协议