次表面做的有些烦躁,既然如此,索性先记一下前一阵比较的PIXIE、3delight、prman的dice方式。

研究过reyes的人都知道dice,简而言之,就是为了生成高质量高精度的图片(电影CG),我们把一个grid或者叫patch打散成很多的microPolygon(以下简单记为mp),而每个mp的大小投影到屏幕上甚至小于一个像素(这个是可以设置的,mp的大小大约为一个像素的shadingrate倍)。对于四边网格,dice是很显然的,将grid投影到屏幕上,根据投影后的大小计算在u和v方向上分别需要细分多少份才能满足shadingrate,另外由于内存是有限的,grid的大小(dice之后grid上的点数)有一个用户设置的上限,如果dice后超出该上限,grid需要split成两个新的grid,然后再重复该过程。本文主要讲dice,四边的网格dice没什么好说的,几个引擎都做的差不多。但是,三角网格就需要比较tricky了。我觉得这也是我现在开始讨厌reyes的一个重要原因:总是不能统一的去做事情,三角的细分就不能跟四边的一样。可话又说回来,如果一样了,更是悲哀,比如pixie就是一样的,把三角网格的某个顶点看做长度无限小的边,然后跟四边一样dice,导致的后果就是靠近该点处会有过多的点被dice出来,多余的shade使得渲染速度变慢,而更糟糕的是这种singular会导致其它问题,比如计算dPdu时,发生除0(du为0)的错。3delight和prman采取了tricky的办法,将需要dice的三角形补全为四边形,三角形最长的边即为公共边,然后按四边网格采样,落在原三角形上的即为真正的采样点。

我们先看3delight,上图均为bake点云,然后显示的图。左侧的两图的原几何模型为两个等腰直角三角形,合并起来一个正方形,右侧的图分别展示了这两个三角形,都取非常大的shadingrate。左上角的为插值生成的点,这在bake点云时使用,用每个mp的中心点代表该网格,还包含该网格的亮度、面积、法向等信息。显然我们可以知道两点,一是dice时,边界点是重复计算的,二是插值取点,只取了mp是四条边的网格,边界处的三角形网格未插值取点,所以左上的图有一条大缝。

然后看prman。据我发现,prman与3delight的区别只是插值不同,如下图

prman在边界的三角形的mp上也插值取点了。下面隆重请出PIXIE:

圆盘大小代表面积,这个结果已经是我修改之后的视点无关的dice了,唯一的欠缺是没和前两个引擎那么tricky。

dice分为视点相关和视点无关两种,视点相关的,即细分的程度跟投影到屏幕上的大小相关,近处细分多,远处细分少;而视点无关的细分,只跟物体在世界坐标系内的大小相关,常用于bake点云。前面提到,如果PIXIE的视点相关的dice不够tricky,那么视点无关的dice简直不能直视,我觉得是错的,如下图:

更改之后好很多:

上面两幅图都是插值生成的点,不插值看起来也类似。现在唯一的困惑是3delight插值生成的图有pattern,如下:

但是,修改前的pixie也有类似的pattern,我觉得没道理。pixie有类似pattern,说明这是四边形的grid,四边形grid插值取点怎么能有缝隙呢?

prman和修改后的pixie(视点无关)已经没有该pattern了。

本想好好写篇博,可写着写着就发现乱了,其实不怪我。本身可变因素太多,而且完全正交,三个引擎、视点无关\有关、插值\不插值。

dice并没有多高深的知识在里面,但是dice的好坏会影响渲染的速度甚至质量。

如果有什么认识错误还请指正,虽然我有上面的图做”证据“,但是不少也是瞎猜的。

三种renderman规范引擎的dice对比的更多相关文章

  1. MySQL - 常见的三种数据库存储引擎

    原文:MySQL - 常见的三种数据库存储引擎 数据库存储引擎:是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧. ...

  2. 国内常用的三种框架:ionic/mui/framework7对比

    国内常用的三种框架:ionic/mui/framework7对比 原文连接:http://zhihu.com/question/19558750/answer/91179040

  3. (转载)Nginx/LVS/HAProxy三种主流负载均衡软件的对比

    原地址:http://www.ha97.com/5646.html PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些 ...

  4. 基于Modbus三种CRC16校验方法的性能对比

    目录 1.背景介绍 2. CRC校验的三种方法 2.1. 直接计算CRC校验 2.2. 查短表法计算CRC16校验 2.3.查大表法计算CRC16校验 3.三种校验方式的测试方法 3.1.直接计算CR ...

  5. MySQL - 常用三种数据库存储引擎

    数据库存储引擎:是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎,还可以获得特 ...

  6. epoll函数及三种I/O复用函数的对比

    epoll函数 #include <sys/epoll.h>int epoll_create(int size)int epoll_ctl(int epfd, int op, int fd ...

  7. OpenCL中三种内存创建image的效率对比

    第一种:使用ION: cl_mem_ion_host_ptr ion_host_ptr1; ion_host_ptr1.ext_host_ptr.allocation_type = CL_MEM_IO ...

  8. AMD,CMD,UMD 三种模块规范 写法格式

    一下三块均以 foo.js 为示例文件名,以 jQuery,underscore 为需求组件 ADM:异步模块规范, RequireJs 的支持格式 // 文件名: foo.js define(['j ...

  9. Android中三种onClick事件的实现与对比

    方式一:在activity的onCreate()方法中,嵌入如下代码: Button button = (Button)findViewById(R.id.button1); button.setOn ...

随机推荐

  1. python 汇总

    TypeError: ReadExcelList() takes exactly 1 argument (2 given) 传入的参数有问题

  2. Thinkphp 3.2.2 利用phpexcel完成excel导出功能

    首先百度搜索phpexcel  包,放到项目的这个目录下 接下来  是controller里的导出代码 /**导出预定产品用户信息 * 大白驴 675835721 *2016-12-12 **/pub ...

  3. SQL Developer报错:Unable to find a Java Virtual Machine解决办法

    安装了64位的Oracle数据库以及32位的Oracle客户端,在开始菜单中第一次打开客户端的SQL Developer时提示输入java.exe的路径,我选择了Oracle数据库自带的jdk路径,确 ...

  4. 学习ios【2】Objective-C 数字和字符串

    一 数字 1.使用Foundation.h可以直接导入所有的头文件. 在XCode中,想查看某个方法帮助,可以将光标放在方法上,按住option键同时单击即可. 官方文档:https://develo ...

  5. jfinal基本应用 --报主键重复

    在使用jfinal 的Model过程中有一个很怪异的问题,发布到服务器上,只要是往表中添加字段,就报主键重复. 1.我添加表的时候调用了 public void create(Map map){ St ...

  6. tomcat apache 实现负载平衡的小demo

    软件:1个apache,2个tomcat module包:mod_jk.so(下载地址:http://tomcat.apache.org/download-connectors.cgi) 下载文件解压 ...

  7. 带领大家安装Rational rose

    Rational rose下载地址:http://pan.baidu.com/s/1hqIIyJq?qq-pf-to=pcqq.c2c 下载好后,文件里有4个安装文档: 解压CD1和CD2到当前目录, ...

  8. 【转】responseText,responseBody,responseXML差别

    为了做ajax的代理,研究了下服务器端的xmlhttp和客户端ajax中的xmlhttp,做了个比较 由于我一直使用JavaScript作为Asp的教本语言,所以比较起来更清楚.服务器端的xmlhtt ...

  9. iosOpenDev-install 失败官方wiki无法解决看这里(尝试有效)

    https://github.com/kokoabim/iOSOpenDev/wiki/Troubleshoot http://blog.csdn.net/bluesky_03/article/det ...

  10. A、B、C、D和E类IP地址

    IP地址分为A,B,C,D,E五类. 网络号:用于识别主机所在的网络:主机号:用于识别该网络中的主机. 其中A类分配给政府机关使用,B类地址给大中型企业使用,C类地址给个人使用.这三种是主要的. IP ...