注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

oxeyeball杂谈

CG技术,动慢等个人喜欢的一切

 
 
 

日志

 
 
关于我

不要穿着拖鞋去扔垃圾哦

网易考拉推荐

Pixie的Point Based color Bleeding   

2007-09-23 00:09:11|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

      这部分内容是接着Point Based Occ的部分的其实实现方法跟PBOcc基本一样,也是一种two-pass technique。官方的教程,rib里面描述得很清楚:http://www.george-graphics.co.uk/pixiewiki/Documentation/Point_based_GI

      同样是使用bake3d(),这里要bake的是_area_radiance。因为要bake光照信息,bake的场景里面当然需要灯光,需要产生阴影,材质上也得带上相应diffuse()了,也要设置好相应的颜色了。

      在最终render的pass里面,用indirectdiffuse()来对点云进行收集。简单的来说,surfaceshader上要必须分别带上bake跟收集用的函数,lightshader上没有特别要求。

    

      实际应用,先在maya里面建个跟官方差不多的场景,然后当然分层,rib里面加入以下几句:

     DisplayChannel "float _area"
     DisplayChannel "color _radiosity"
     DisplayChannel "color Cs"

     shading rate设置16或32,看情况办,bake层以下这3项还是必须设置

    Pixie的Point Based color Bleeding  - oxeyeball - oxeyeball杂谈

       然后用以下shader作bake。

 

surface
   bake_radiosity(string bakefile = "", displaychannels = "";
                   float Ka = 1, Kd = 1)
   {
     color irrad;
     normal Nn = normalize(N);
     float a = area(P, "dicing"); // micropolygon area
    
     // Compute direct illumination (ambient and diffuse)
     irrad = Ka*ambient() + Kd*diffuse(Nn);
    
     // Compute Ci and Oi
     Ci = irrad * Cs * Os;
     Oi = Os;
    
     // Store area and Ci in point cloud file
     bake3d(bakefile, displaychannels, P, Nn, "interpolate", 1,
            "_area", a, "_radiosity", Ci);
   }

 

        在材质里面设置displaychannels为_area,_radiosity。设置bakefile为cornell_radio.ptc。然后渲染,就能产生点云。

        同样,用show.exe可以看到,q跟w是切换显示channels的快捷键。

 

     

 

       然后另外的分层,就用以下shader,我稍微改了下:

normal shadingnormal(normal Ni) {
 return faceforward(normalize(Ni),I);
}

surface
 OXE_pbcb (string filename = "";
    float maxdist = 1e15,
    samplebase = 0,
    maxsolidangle = 0.05,
    Ki=1,Ka=1,Kd=1;)
{
 normal Ns = shadingnormal(N);
    normal Nf = faceforward (normalize(N),I);
  color irr = indirectdiffuse(P, Ns, 0, "pointbased", 1, "filename", filename,
     "maxdist", maxdist,
     "maxsolidangle", maxsolidangle);
     
     
 Ci = Cs*Os*(Ki*irr+Ka * ambient() + Kd * diffuse(Nf)); 
 Oi = Os;
}

 

       然后用这个shader,读取上面生成的点云文件,渲染,就能得到以下结果。

Pixie的Point Based color Bleeding  - oxeyeball - oxeyeball杂谈

 

       Point Based color Bleeding 的速度是非常快的,假如发现渲染很慢,很可能是因为渲染层也打开了下面几项

Pixie的Point Based color Bleeding  - oxeyeball - oxeyeball杂谈

       没错,我就是犯过这样的低级错误Pixie的Point Based color Bleeding  - oxeyeball - oxeyeball杂谈。关于Point Based color Bleeding,还有一些细节点的问题要斟酌下。

比如说,色溢的穿透能力是超强的,不会留下虚影,所以想完全代替光线跟踪来使用是不太可能的。假如了解收集方式就比较清晰了。

       明天开始研究pixie的SSS材质~~~~


 

  评论这张
 
阅读(278)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017