【GPU Gems 学习笔记】Rendering Water Caustics

一. 水的焦散

焦散(Caustic),是一种光学现象,是由于光线在曲面经过反射或折射后形成的聚光效果,类似于凸透镜效果。


对于不透明物体来说,当光线照射到具有强反射属性的曲面对象时,会形成反射焦散现象;而当光线照射到透明物体时,如流动的水或玻璃杯,通过折射后形成聚光的折射焦散现象。

                 


同理,对于水体来说,焦散效果不是在水面产生。一部分光线在水表面发生折射,穿透水面在水底形成折射焦散。另一部分光线被水面反射,可以在墙壁等平面形成反射焦散。

本章内容主要介绍了从美学的角度出发,来实时渲染水下的折射焦散的方法。
 

二. 原理与实现

光线入水后发生一次折射后继续前进,随着入水深度的增减,光强度逐渐减弱。最后,一部分光子经过不同路径,碰到了海底相同的区域并将其照亮,形成明亮的光斑,类似于凸透镜的聚光现象。无论是基于光线追踪还是逆向光线追踪的方法来实现,都非常的费时,因为只有极小部分的计算对最终结果有实际意义。

为了方便计算焦散,大胆假设:
       1. 我们是在赤道上计算正午的水面焦散,这意味着太阳处于头顶正上方;
       2. 对焦散效果做出贡献的光线与海底垂直。
          (光线从入水到碰到海底,传播距离最短的光线,才容易形成焦散,其余的被介质吸收化成热量发散)

具体实现步骤分为两步:
      1. 绘制海底底面:
            a. 假设有一道垂直于该顶点的折射光线;
            b. 找到该折射光线与水面的交点;
            c. 计算交点的法向量
            d. 逆向使用斯涅尔定律(Shell)计算入射光线;
               (书中代码并没有计算入射光线,而是使用了水面顶点法线方向和水面顶点与水底的距离做为采样坐标)
            d. 使用入射光线作为纹理坐标对"太阳"贴图采样,采样结果为焦散的强度;
      2. 渲染水表面。

代码如下,首先是申明两个Pass,分别绘制了海底和水面&#

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GPU Gems是一本关于图形处理器(GPU)编程的经典书籍,由Nvidia公司出版。这本书的内容涵盖了各种有关GPU编程的主题,包括渲染、光照、物理模拟、图像处理等。通过学习这本书,读者可以了解到如何充分利用GPU的并行计算能力来提高图形渲染的效率和质量。 为了进行GPU Gems的下载,可以通过以下几种途径实现。 首先,可以到Nvidia的官方网站上搜索GPU Gems相关的资源,并尝试下载电子版的PDF文件或者浏览在线的html版本。这需要通过分别访问各个章节的网页或者注册成为Nvidia开发者来获取下载权限。网上也有一些第三方提供GPU Gems资源下载的网站,可以通过搜索引擎查找。 其次,可以尝试在一些科研论文或者技术博客的网站上查找GPU Gems相关的下载链接。这些链接可能是其他开发者或者研究者在自己的网站或者博客上分享的资源。在这些网站上找到链接后,可以直接点击下载相应的资源。 此外,可以尝试通过一些知名的编程书籍网站或者图书馆的在线平台搜索GPU Gems相关的电子书。这些平台通常会有一些付费或者免费的电子书资源,读者可以根据自己的需求选择合适的版本进行下载。 总之,通过以上的途径,读者有很多选择来下载GPU Gems,他们可以根据自己的需求选择相应的方式。无论是通过官方网站、第三方网站,还是其他相关平台,读者都能够找到他们需要的GPU Gems资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值