一种是使用vex界面 使用houdini自己带的hrmanshader编出的shader
一种是导入其他工具处理好的现有shader(个人喜欢这个,方便)。
这里先使用文本编辑写个sl 然后使用 shaderdl 编译成sdl .之后进入houini 做个otl注册这个sdl.在之后安装otl.最后使用shader渲染。
rsl是个类c的语言;编写sl实际上和定义一个功能函数是一个形式;不过是专门利用数学操作图像的。
rsl的shader主要是5大类 surface,displace,light,volume,imager
写自己的一个shader就是个有固定结构的类c功能函数了。
如
surface plastic(
float Ka=0, Kd=0.6, Ks=1,Krfl=.8, IORfresnel
color Cdiff = 1,Cspec = 1;
string diffmap=""",envmap ="")
{
// 行注释。
}
看
如果class是surface表示是个对表面处理的。如果class是light那么就是对光源功能处理。
如果class是displace那么对表面进行真实的偏移置换处理也就是真实的凹凸了。
如果class是volume那么就对模型包容的体积 或 场景空间的一定体积范围处理
如果class是imager那么是生成一段程序图形了。
先简单点。。脱离rsl。对于一个不透明塑料质地的表面一般有 漫反射,高光,环境光,反射;
怎么获取这些呢;
打开3delight的用户手册帮助文件(开始=>所有程序=>3delight 3delight users manual(html))
左边 short contents 栏目下the shading language 然后右边 6.4 standad fuctions
就可以找到光照的功能了。。
color ambiet();//这是环境信息获取 比较简单;
color diffuse(vector Nr);//这是漫反射信息的获取 需要面向视线表面的法线
color specular(vector Nr, V;float roughness)//这是高光信息的获取,需要面向视线的法线,视线的反向,还有个表面的粗糙系数;
void fresnel(vect I,N;float eta;output float Kr,Kt;output vector R,T)
//这个呢就是菲尼尔方程啦。根据视线,表面的法线 和 偏角系数 得到 反射强度,折射强度,反射光线方向,折射光线方向;
color
//这个就是在物体表面的点P从R方向上获取颜色了。
Pixar renderman的rsl的trace相当简单。。。trace功能仅仅是用于练习用的;只能得出最近一次碰到物体的颜色信息和距离。
cloro trace(point P;vector R) //颜色.float trace(ponit P;vector R)//距离
这个3delight 的rsl的trace功能就复杂了。。。。是个完全版本的方向追踪功能
color trsmap;
trace(P,R,
'bias',-1,
1)支持P点锥角模式采样。'smaplecone', 0, 'samples',1
//利用这个组合得到模糊 'samplecone',PI/36,'samples',16
2)支持距离限制。'maxdist',1e38
默认的距离是1e38就是1后面38个0很大。自己定义最大追踪距离为100 'maxdist',100
3)支持集合限制。 'subset','subset_in_trace'
仅仅追踪集合物体或组物体
配合rib语句的 Attribute "grouping" "subset_in_trace,group1,groupx"
4)过滤场景物体图形 'transmisson',trsmap 存于预先定义的trsmap中
获得这个场景的物体的追踪图形这是个灰度图形,如果喷到物体,为物体的传输光的亮度均色,没有碰到物体为白色,如果追踪方向上没有光那么为黑。这个用于和环境图合成,用来校正物体的透明;
5)可修改追踪偏移 'bias',-1
默认是-1 这是使用3delight默认的如'bias',3e-2
6)单独物体的传输光 'labes','id'
7)碰撞模式限制 'hitmode','default'
跳过物体的光线碰撞模式设置。使用自己的。'hitmode','speclular'
8强制面设置 'hitsides','default'
可以强制限制对某方面的跟踪, 'hitsides','front'
9限制光线类型 'raytype','default'
限制对某种类型的光追踪 'raytype','specular'
先在e:\rib_asset\shaders目录下建立文本文件。修改名字为plastic_test.sl 然后输入;
surface plastic_test( float Ka = 0, Kd = .6, Ks = .8, roughness = 0.02, Krfl =1.2, IORfresnel =1.5;
{
vector nI = normalize( I ),
//获取单位长度的 视线 nI , 表面法线 nN ,正面相机的表面的法线 nF
color Cambient = Ka * ambient(); // 得到环境色
color Cdiffuse = Kd * Cdiff * diffuse( nF );//得到漫发射
color Cspecular = Ks * Cspec * specular( nF, V, roughness);//得到高光
float eta = ( nI.nN < 0) ? 1/IORfresnel : IORfresnel; //获取光线传输时候的偏角率
float kr,kt;vector Rrfl,Trfr;
color Creflection = kr * Krfl * trace(P,Rrfl,"samplecone",0,"samples",1);//获取有菲尼尔特性(边缘强中间弱)追踪反射的基本颜色
Ci = Cambient + Cdiffuse + Cspecular + Creflection;
}
保存 plastic_test.sl文件
启动houdini
e:回车
shaderdl plastic_test.sl回车
唔没有错。
dir回车
hython %hb%/sdl2otl.py -l mytest_shader.otl plastic_test.sdl回车//把plastic_test.sdl注册到mytest_shader.otl的houdini数据资源文件中;
唔也没有错。
dir *.otl回车
切换到houdini中 菜单 file=>install digital asset library... 加载 e:\rib_asset\shaders\mytest_shader.otl 发现shop/plastic_test有了;
network窗口进入 shop
做两个基本球体或其他什么的材料就用自己变的plastic_test,一个平面做地面材料用rman的red marble
进入out . Tab键 render/renderman ;有一个rib1节点;自动是3delight 9.0
配置一下rib1
Properties/sampleing
Properties/attributes
Properties/paths
渲染出结果了;
联系客服