1000轮渲染,华丽景深诞生了

续上一篇《三维茶壶与景深》

本次改用disc pattern, disc与jitter稍有不同。两者指的都是摄像机偏差的范围,但是形状不同。因此渲染出来的虚化效果也稍有不同。要了解具体原理,请参考 http://screamyguy.net/DepthOfField/


jittered

disc

为了指定渲染轮数所使用的disc pattern,写了下面的函数,

#define DISK_SIZE 256
jitter_point disk[DISK_SIZE];

void init_disk()
{
    int i;
    for(i=0; i<DISK_SIZE; i++){
        disk[i].x = (double)(rand()%1000 - 500)/1000;
        disk[i].y = (double)(rand()%1000 - 500)/1000;
        if(disk[i].x*disk[i].x + disk[i].y*disk[i].y > .5*.5){
            --i;
            continue;
        }
    }
}

生成每个点的范围在(-.5, +.5)之间,而且为了保证是disc形状,判断忽略半径大于.5的点。

下面开始测试不同次数的渲染产生的不同效果。

首先从2轮开始测试渲染效果,

看不出是虚化效果,但像近视眼。

8轮渲染,

66轮渲染,

512轮渲染,接近完美!

接着,玩一下1000轮渲染效果,同时切换不同的景深。

1000轮渲染在我core i3处理器上,耗时10秒左右。

这张截图比较大,点击图片可以放大查看效果!

更浅的景深,增强背景虚化效果,

继续加强虚化,

继续加强,同时跟上一篇《三维茶壶与景深》的66轮渲染进行对比,

怎么样?是不是相差挺远的?1000轮的渲染,质量有了很大的提高。

再看看,焦点转移到第二个茶壶上,

如果是制作动画片需要这种特效,我想渲染的次数可能不止1000次那么少,而且还是超高清的分辨率。

当然,CPU干这种图形特效显然比GPU差的远了。

等考完试,有时间再接触一下GLSL吧。现在手头一堆东西要忙。。。

附本文代码:

dof.c.tar

1000轮渲染,华丽景深诞生了》有4个想法

    1. Xiaoxia 文章作者

      久违的FB神牛!!!
      如果渲染次数足够多,平均下来,左右偏移跟上下偏移的绝对值的平均值,大小应该是差不多的!

      回复

回复 whitefirer 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据