三种renderman规范引擎的dice对比

时间:2023-01-14 07:58:09

次表面做的有些烦躁,既然如此,索性先记一下前一阵比较的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的三角形补全为四边形,三角形最长的边即为公共边,然后按四边网格采样,落在原三角形上的即为真正的采样点。

三种renderman规范引擎的dice对比

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

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

三种renderman规范引擎的dice对比

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

三种renderman规范引擎的dice对比

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

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

三种renderman规范引擎的dice对比

更改之后好很多:

三种renderman规范引擎的dice对比

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

三种renderman规范引擎的dice对比

但是,修改前的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. SQLServer中修改字段为空

    ALTER 表名 table1 ALTER COLUMN [字段] 类型 NULL; 例如: ) COLLATE Chinese_PRC_CI_AS NULL;

  2. PHP require class

  3. 配置Hadoop开发环境(Eclipse)

    参考博文: http://blog.csdn.net/zythy/article/details/17397153 http://www.tuicool.com/articles/AjUZrq 注意事 ...

  4. hdoj 5392 Infoplane in Tina Town

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5392 #include<stdio.h> #include<cstring> ...

  5. SharpMap V1&period;1 For Web教程系列之——前言

    上次使用SharpMap还是在0.9版本阶段,那个时候主要是为了将SharpMap移植到Windows Mobile环境中,具体可参见原先的文章.互联网真的是风云变幻啊,才短短几年,Windows M ...

  6. ObjectStreamDemo

    当你需要存储相同类型的数据时,使用固定长度的记录格式是一个不错的选择.但,在OOP中创建的对象很少全部都具有相同的类型. 例如,你可能有一个称为staff(见下面demo)的array,它名义上是一个 ...

  7. 剑指offer 11:二进制中 1 的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 解题代码 法一: public class Solution { public int NumberOf1(int n) { ...

  8. 从上往下打印二叉树&lpar;python&rpar;

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # ...

  9. Android基础——Fragment控制切换多个页面

    今天接着上一篇文章,讲解一下Fragment的控制,主要是切换View和页面替换等操作.还有就是如何获取Fragment的管理对象,以及与Activity的通信方式. (PS:新建的QQ群,有兴趣可以 ...

  10. solr特点三&colon; 排序样例汇总

    目的是提供solrj 实现 查询的样例参考 单维度排序 //查询条件 query.setQuery(queryString); // add 是添加 query.addSortField(field_ ...