2008年11月18日星期二

Mental ray Motion Blur 试解决方案和 mip_motionblur mip_motion_vector shader

Mental ray Motion Blur 试解决方案和 mip_motionblur mip_motion_vector shader


基于Mental ray渲染Motion blur现在有几种解决方案:

  • 3D
    • 纯3D Motion blur
    • Rasterizer
  • 2D 后期
    • 在maya内应用mip_motionbur
    • 后期Motion blur, 通过Motion vector。

纯3D Motion Blur 渲染的图片最真实,反射,折射,GI等都不会有问题。但是缺点是速度慢,为了提高动态模糊的渲染质量需要不断的提高sample 和 temporal sample 的值,占用大量的渲染时间。渲染速度和质量(sample)是成一种linear的关系。

Rasterizer 优 点是速度快,比raytrace motion blur要快很多,能够很快的实现高质量的motion blur。它将shading和sample分开进行,极大的提高渲染速度。因为这种特点渲染速度和质量(sample)不是一种linear关系。另外 他的sample方式也与raytrace不同。但是由于这种方式的特点不适合对反射和折射要求较高的场景应用。渲染头发是应用这种渲染方式加 detailed shadow map。另外不适合应用fg,gi caustics,auto volumn, raytraced shadow, ray bending lens shader, reflect refract.

2d,后期的motion blur是 基于二维平面的动态模糊。优点是节省渲染时间,三维渲染不需要渲染motion blur。调整快,可以说是实时的。在后期调整时非常灵活如果是渲染的motion blur如果有问题就需要到三维里重新渲染,在后期里调整就不需要。在后期里可以得到实时的反馈根据需要任意调整动态模糊的幅度。缺点是不准确不能模糊反 射折射的情况,不能有multisegment motion blur,动态模糊都是直线的不会有弧线的,另外后期软件对其支持也不禁相同还有很多限制。2d的motion blur主要是通过三维软件渲染motion vector通过后期软件调整。除了这种方式,Mental ray提供了一个output shader:mip_motionblur shader. 这个shader 通过利用motion vector 和 depth frame buffer对渲染出来图片进行处理。由于是集成于渲染器它的优点是拥有一些后期软件没有的功能。而motion vector shader主要是用于输出针对不同后期软件处理动态模糊需要不同motion vector图像而写的shader。

对于3D motion blur,最重要的渲染速度而这主要是取决于整体的sample和temporal sample在maya内由time contrast 控制。这个参数是主要影响动态模糊速度的。


mip_motionblur, mip_motion_vector具体应用方法。

应 用这两个shader都需要将motion blur选项开启,但是要保证shutter interval 为零。看具体情况考虑,为了后期考虑有时应将物体停在shutter interval的中间这样方便向前后两个方向动态模糊。比如shutter open 是0 shutter close是1,在启用这个shader的时候要两个值都为0.5。即 shutter open 0.5 shutter close 0.5。这样会关闭motion blur但是会计算motion vector。同时将time contrast改为1,避免mental ray 作不必要的计算。




这两个shader都是output shader 但是连到maya 2009 camera 的output shader里并不可用,只可以使用以前的链接方式。默认情况下此界面在camera attribut editor里是被隐藏的。方法倒很简单将output shader拖动到相机上选择 default 就可以了或者使用connectio editor 同时要启用 motion vectors, depth framebuffer。







关于两个shader的具体参数,可以直接参看官方的production shader documents. 这里需要强调一下的是如果在nuke中作motion blur,首先需要将mip_motion_vector中floating point format 改为1, pixel threshold 最小要写0.001否则会有artifacts(图像某些不动的部分会有值)这个值是告诉mentalray多小的像素移动可以忽略不记。这样nuke的vector blur节点才能正确读取mental ray 输出的motion vector信息。其他插件和软件对motion vector要求不一样,要看具体要求输出。



使用 nuke 自己的 vector blur shader 还是不能很好的模糊需要动态模糊的部分和其它背景同在一个rgb通道内的图像,如果需要动态模糊的部分外边没有rgb信息可以很好的模糊图像,如果有,效果没有reelsmart motion blur效果好,但是RSMB一样有些问题。暂时还不知道是不是我的设置有问题。

5.1v2 的vector blur结点坏了,foundry已经确认,下个版本修正...不用试了。


没有评论:

发表评论