三种renderman规范引擎的dice对比
次表面做的有些烦躁,既然如此,索性先记一下前一阵比较的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对比的更多相关文章
- MySQL - 常见的三种数据库存储引擎
原文:MySQL - 常见的三种数据库存储引擎 数据库存储引擎:是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧. ...
- 国内常用的三种框架:ionic/mui/framework7对比
国内常用的三种框架:ionic/mui/framework7对比 原文连接:http://zhihu.com/question/19558750/answer/91179040
- (转载)Nginx/LVS/HAProxy三种主流负载均衡软件的对比
原地址:http://www.ha97.com/5646.html PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些 ...
- 基于Modbus三种CRC16校验方法的性能对比
目录 1.背景介绍 2. CRC校验的三种方法 2.1. 直接计算CRC校验 2.2. 查短表法计算CRC16校验 2.3.查大表法计算CRC16校验 3.三种校验方式的测试方法 3.1.直接计算CR ...
- MySQL - 常用三种数据库存储引擎
数据库存储引擎:是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎,还可以获得特 ...
- epoll函数及三种I/O复用函数的对比
epoll函数 #include <sys/epoll.h>int epoll_create(int size)int epoll_ctl(int epfd, int op, int fd ...
- OpenCL中三种内存创建image的效率对比
第一种:使用ION: cl_mem_ion_host_ptr ion_host_ptr1; ion_host_ptr1.ext_host_ptr.allocation_type = CL_MEM_IO ...
- AMD,CMD,UMD 三种模块规范 写法格式
一下三块均以 foo.js 为示例文件名,以 jQuery,underscore 为需求组件 ADM:异步模块规范, RequireJs 的支持格式 // 文件名: foo.js define(['j ...
- Android中三种onClick事件的实现与对比
方式一:在activity的onCreate()方法中,嵌入如下代码: Button button = (Button)findViewById(R.id.button1); button.setOn ...
随机推荐
- Unity3D Layout 快捷键
我的需求是开发的时候一种布局,运行的时候一种布局,Unity3D 选项中的自定义快捷键的太少,只能另想办法.Google 之后,找到解决方法:Editor layout hotkeys? 1.创建菜单 ...
- Android开发环境搭建(jdk+eclip+android sdk)
在开启Android 开发之旅之前,首先要把准备工作做好---搭建开发环境 一.环境搭建: 1.Java JDK 安装 2.Eclipse 安装 3.Android SDK 安装 4.ADT安装 5. ...
- 工作需求----表单select多选交互
由于工作需求接触select框多选的情况,以下是我分享的代码,主要是进入页面默认选中.支持多选属性: 1.html内容 multiple=”multiple” 属性为多选属性 <div clas ...
- chrome 扩展包 postman 的安装
由于chrome网上应用不能使用.添加扩展程序,需要其他的办法. 1.下载postman安装包.下载地址 2.这一步按照这个下载包中的方法,也可以,可以忽略其错误. 先解压出crx,使用两个办法,使用 ...
- AngularJS-UI-Router
涉及知识点: $stateProvider,$urlRouteProvider ui-href $stateParams,$state 1.如何引用依赖angular-ui-router angula ...
- 告别IT,出售多年自己研发的股票分析系统源码
不知已过而立,发狠告别IT,回头看看以前自己的多个作品,耗时最多的就是这个股票分析系统了,留在自己的电脑里也体现不出多大价值了,故打算出售源码给需要的人,联系方式QQ:874724605 注明:股票源 ...
- MD5加密代码
import java.security.MessageDigest;public class MD5_tes { public final static String MD5(String s){ ...
- bzoj4213: 贪吃蛇
题意:给定一个网格,有一些格子是障碍不用管,剩余的是空地,你要用一些起点和终点在边界上的路径或环来完全覆盖掉空地,如果使用第一种,会付出1的代价,求最小代价,不能覆盖则输出-1. 现在看到网格而且数据 ...
- 模仿JavaAppArguments.java示例,编写一个程序,此程序从命令行接收多个数 字,求和之后输出结果,写出其的设计思想、程序流程图、源程序代码。
一 设计思想 首先现在file中建立一个类,并把任务名和类名写上(注意类名的大写):第二步则是参数的输入,并且定义求和变量:第三步则是对参数数据类型的要求,要把字符类型转化为整数类型并输出(这也是本道 ...
- 极光推送Jpush(v3)服务端PHP版本集成(V3版本只调用推送API)
因为版本升级,极光推送的API也有了V3,功能也更丰富了,但是对于我们有的用户来说,我们还是只需要调用推送的API就够了. 下载了一份PHP服务端的SDK(下载地址:http://docs.jpush ...