zoukankan      html  css  js  c++  java
  • Chapter 7:Diffuse Materials

    现在我们有了多个对象多个与像素对应的光线,我们可以制作一些看起来更真实的的材料。

    我们从漫反射开始,有一个需要讨论的问题是,我们是否可以混合匹配形状和材质(因此,我们将球体指定为一种材质)或者说,将他们放在一起讨论,以便几何体和材质紧密结合(这对适应材质和形状连接的对象很有用)。我们将他们分开进行,大多数渲染器中如此,但是要注意限制。

    不发光的漫反射物体(粗糙物体)只会呈现周围环境的颜色,但它们会用自己的固有颜色进行调节。 从漫反射面反射的光的方向是随机的。 因此,如果我们发送三条光线进入两个漫反射表面之间的缝隙,它们将具有不同的随机行为:

    他们有可能被吸收,而不是被反射,表面越暗,越容易吸收光线(黑色吸收光)真正的方向随机算法会产生看起来没有光泽的表面,最简单的方式就是理想的漫反射,即理想散射,lambertian反射。

    从与命中点相切的单位半径球体中选取一个随机点s,并从命中点p向随机点s发送射线。该球具有中心(P+ N):

    我们还需要一种方法来选取以原点为中心的单位半径球体中的随机点。 我们将使用通常最简单的算法:拒绝方法。 首先,我们在单位立方体中选取一个随机点,其中x,y和z的范围都从-1到+1。 如果这个点在球体外面,我们拒绝这一点并重试。 do / while构造对此非常完美:

    def random_in_unit_sphere():
        p=2*vec3(random(),random(),random())-vec3(1,1,1)
        while(p.squared_length()>=1.0):
            p=2*vec3(random(),random(),random())-vec3(1,1,1)
        return p
    

      

    注意球下的阴影。 这张照片非常暗,但我们的球体在每次反弹时只吸收一半的能量,所以它们是50%的反射。 如果你看不到阴影,别担心,我们现在就解决这个问题。 这些领域应该看起来很淡(现实生活中,浅灰色)。 原因是几乎所有的图像浏览者都认为图像是“伽马校正”的,这意味着0到1的值在存储为一个字节之前有一些变换。 这有很多好的理由,但为了我们的目的,我们只需要知道它。 对于第一个近似值,我们可以使用“伽玛2”,意思是将颜色提升到能量1 /伽马,或者在我们的简单情况下,½只是平方根:

  • 相关阅读:
    跨域的几种方式
    jQuery滚动条回到顶部或指定位置
    获取屏幕高度、宽度
    js判断手机系统和微信
    js获取url中的参数
    css3内容溢出属性
    css盒模型
    [转]swagger2 入门教程
    [转]cron表达式的用法
    [转]React入门看这篇就够了
  • 原文地址:https://www.cnblogs.com/TooYoungTsukasa/p/9061682.html
Copyright © 2011-2022 走看看