zoukankan      html  css  js  c++  java
  • 【OptiX】第5个示例 递归反射、抗锯齿

    运行结果如下:

    【抗锯齿】

    可以看到中间那个竖线的右侧从地面上看有款明显的锯齿,而左边就没有。包括球的反射出来的三角形和地面也有明显的锯齿。那么抗锯齿究竟本例中是怎么做的呢?

    首先在采样时,当场景需要重绘时,我们此时定义场景为第0帧,在第0帧时我们绘制精确的有锯齿的场景,在随后的各帧中对其光线的方向增加一个[0, 1]的随机的扰动(因为光线是每个像素生成的,因此0到1之间的扰动真的很小又合适),生成轻微模糊的图像,然后再与上一帧按照权重进行叠加,就形成了虚化一些的反走样的图片。我们来看实际代码:

    RT_PROGRAM void pinhole_camera()
    {
    //缓存尺寸,也就是屏幕尺寸
    size_t2 screen = output_buffer.size();
    //rtPrintf("%d-%d-", screen.x, screen.y);

    unsigned int seed = tea<16>(screen.x*launch_index.y + launch_index.x, frame);
    float2 subpixel_jitter = frame == 0 ? make_float2(0.0f, 0.0f) : make_float2(rnd(seed) - 0.5f, rnd(seed) - 0.5f);

    //左右分窗做对比
    if (launch_index.x > screen.x / 2)
    {
    subpixel_jitter = make_float2(0);
    }

    float2 d = (make_float2(launch_index) + subpixel_jitter)/ make_float2(screen) * 2.f - 1.f;
    float3 ray_origin = eye;
    float3 ray_direction = normalize(d.x*U + d.y*V + W);

    //生成光线
    optix::Ray ray(ray_origin, ray_direction, RADIANCE_RAY_TYPE, scene_epsilon);

    PerRayData_radiance prd;
    prd.importance = 1.f;
    prd.depth = 0;

    rtTrace(top_object, ray, prd);

    float4 acc_val = accum_buffer[launch_index];
    if (frame > 0)
    {
    acc_val = lerp(acc_val, make_float4(prd.result, 0.0f), 1.0f / static_cast<float>(frame + 1));
    }
    else
    {
    acc_val = make_float4(prd.result, 0.f);
    }

    if (launch_index.x == (screen.x / 2))
    {
    acc_val = make_float4(0);
    }


    //所有跟踪后,求得结果
    output_buffer[launch_index] = make_color(make_float3(acc_val));

    accum_buffer[launch_index] = acc_val;

    --------------------- 

  • 相关阅读:
    Nginx专题(二)-----虚拟主机、location规则、rewrite、负载均衡配置
    Nginx专题(一)-----简介
    springMVC自动转义问题
    Tomcat专题(三)-----Tomcat性能优化
    Tomcat专题(二)-----Tomcat源码、嵌入式Tomcat
    Tomcat专题(一)-----架构体系
    jvm性能调优(五)-----深入了解性能优化
    jvm性能调优(四)-----编写高效的java代码
    jvm性能调优(三)-----JVM的执行子系统
    jvm性能调优(二)-----垃圾回收、内存分配
  • 原文地址:https://www.cnblogs.com/hyhy904/p/10977574.html
Copyright © 2011-2022 走看看