打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
HOUDINI?使用?3delight(3)导入自己用rsl编辑的shader(转)
houdini使用renderman兼容渲染有两种方式。

一种是使用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  = 1.5;

color Cdiff = 1,Cspec = 1;

string diffmap=""",envmap ="")

{

// 行注释。

}

看 class classname(type para,para;type para;.....) { functon  } 这个形式。。。不就是c功能定义么。

如果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  6.4.4 lighting

就可以找到光照的功能了。。

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 trace(point P;vector R;output float dist; ......)

//这个就是在物体表面的点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,  'samplecone',0,  'samples',1,   'maxdist',1e38,   'subset','',  'transmisson',trsmap,   'label','', 

'bias',-1,   'hitmode','default',    'hitsides','default',   'raytype','default');

 

1)支持P点锥角模式采样。'smaplecone', 0, 'samples',1  //采样锥角是用弧度表示。。。

//利用这个组合得到模糊 'samplecone',PI/36,'samples',16  最后得到颜色要平均样本数 (Ct/sample)   这里是Ctrace/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   //'bias',0.03

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;

                                 color Cdiff = 1,Cspec = 1;

                                  string diffmap = "",envmap = "")

{

vector nI = normalize( I ),  nN = normalize( N ), nF = faceforward( nN, nI ), V = - normalize( I );                              

//获取单位长度的 视线 nI , 表面法线 nN ,正面相机的表面的法线 nF ,视线的反方向 V;

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;    fresnel( nI, nF, eta, kr, kt, Rrfl, Trfr); //获取菲尼尔反射折射强度和反向

color Creflection = kr * Krfl * trace(P,Rrfl,"samplecone",0,"samples",1);//获取有菲尼尔特性(边缘强中间弱)追踪反射的基本颜色

Ci = Cambient + Cdiffuse + Cspecular + Creflection;

}

保存 plastic_test.sl文件

启动houdini ,houdini菜单 windows=>shell 进入houdini 的 dos外壳;

e:回车     cd rib_asset 回车         cd shader 回车 //进入刚刚用3delight的rsl编写好的.sl文件的文件目录 咱们来编译它

shaderdl plastic_test.sl回车

唔没有错。

dir回车  发现 plastic.sdl ok 自己的3delight的shader有了。

hython %hb%/sdl2otl.py -l mytest_shader.otl plastic_test.sdl回车//把plastic_test.sdl注册到mytest_shader.otl的houdini数据资源文件中;

唔也没有错。

dir *.otl回车  发现mytest_shader.otl 有了。

切换到houdini中 菜单 file=>install digital asset library... 加载 e:\rib_asset\shaders\mytest_shader.otl 发现shop/plastic_test有了;

network窗口进入 shop   Tab键发现digital assets 和 surface 的都有plastic_test  点击。有了。

做两个基本球体或其他什么的材料就用自己变的plastic_test,一个平面做地面材料用rman的red marble ,放好位置 ,给个camera .平行光,一个点光,阴影就用默认的光线追踪吧。进行测试。 

进入out . Tab键 render/renderman ;有一个rib1节点;自动是3delight 9.0

配置一下rib1

Properties/sampleing         pixel samples  3 3  

Properties/attributes           specular visibility 勾选  transmission visibility 勾选

Properties/paths         shader path 栏目中输入plastic_test.sdl所在的路径 &;e:/rib_asset/shaders

渲染出结果了;

完成自己编写的shader与houdini的挂钩;
修改trace 的 "samplecone",PI/36,"sample",16 看看锥角采样获取模糊看看 5个角度的模糊怎么样
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【转载】Houdini配置3delight 10
用Houdini的grid做画板学习GLSL的fragment shader原理
【微精品】houdini16自定义shape形态教程+数据资产插件
Houdini 16.5
三维技术教程:Maya真实灯光效果之区域光&体积光 | 经验频道 | 火星网
推荐一款强大的 Android OpenGL ES 调试工具
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服