Real-Time Rendering——9.8.2 Multiple-Bounce Surface Reflection多次反射表面反射

本文主要是介绍Real-Time Rendering——9.8.2 Multiple-Bounce Surface Reflection多次反射表面反射,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

As mentioned earlier in Section 9.7, the microfacet BRDF framework does not account for light that is reflected (“bounced”) from the microsurface multiple times. This simplification causes some energy loss and over-darkening, especially for rough metals [712].

如之前在第9.7节中提到的,microfacet BRDF框架没有考虑从微表面多次反射(“反弹”)的光。这种简化导致一些能量损失和过度变暗,特别是对于粗糙金属[712]。

A technique used by Imageworks [947] combines elements from previous work [811, 878] to create a term that can be added to the BRDF to simulate multiple-bounce surface reflection:

Imageworks [947]使用的一项技术结合了之前工作[811,878]中的元素,创建了一个可以添加到BRDF中的项,以模拟多次反弹表面反射:

where RsF1 is the directional albedo (Section 9.3) of fsF1, which is the specular BRDF term with F0 set to 1. The function RsF1 depends on the roughness α and elevation angle θ. It is relatively smooth, so it can be precomputed numerically (using Equation 9.8 or 9.9) and stored in a small two-dimensional texture. Imageworks found that 32 × 32 resolution is sufficient. 

其中RsF1是fsF1的方向反照率(第9.3节),fsF1是F0设置为1时的镜面BRDF项。函数RsF1取决于粗糙度α和仰角θ。它是相对平滑的,因此可以用数值方法预先计算(使用方程9.8或9.9)并存储在一个小的二维纹理中。Imageworks发现32 × 32的分辨率已经足够了。

The function RsF1 is the cosine-weighted average value of RsF1 over the hemisphere. It depends only on α, so it can be stored in a one-dimensional texture, or an inexpensive curve could be fitted to the data. Since RsF1 is rotationally symmetric about n, RsF1 can be computed with a one-dimensional integral. We also use the change of variables μ = cos θ (see Equation 9.6 on page 312):

函数RsF1是RsF1在整个半球上的余弦加权平均值。它只依赖于α,所以它可以存储在一维纹理中,或者可以用一条便宜的曲线来拟合数据。因为RsF1关于n旋转对称,所以RsF1可以用一维积分来计算。我们还使用变量μ = cos θ的变化(见312页的方程9.6):

Finally, F is the cosine-weighted average of the Fresnel term, computed in the same way: 

最后,F是菲涅耳项的余弦加权平均值,计算方法相同:

Imageworks provide a closed-form solution to Equation 9.58 in the case that the generalized Schlick form (Equation 9.18) is used for F: 

Imageworks为方程9.58提供了一个封闭形式的解 施利克形式(方程9.18)用于F:

If the original Schlick approximation is used (Equation 9.16), then the solution simplifies to 

如果使用原始的施利克近似法(方程9.16),则解简化为

In the case of anisotropy, Imageworks use an intermediate roughness between αx and αy for the purpose of computing fms. This approximation avoids the need to increase the dimensionality of the RsF1 lookup table, and the errors it introduces are small. 

在各向异性的情况下,Imageworks使用介于αx和αy之间的中间粗糙度来计算fms。这种近似避免了增加RsF1查找表维数的需要,并且它引入的误差很小。

The results of the Imageworks multiple-bounce specular term can be seen in Figure 9.39.

在图9.39中可以看到Imageworks多重反射镜面反射项的结果 .

Figure 9.39. In all rows the roughness of the surface increases from left to right. The top two rows show a gold material. The first row is rendered without the Imageworks multiple-bounce term, and the second is rendered with the multiple-bounce term. The difference is most noticeable for the rougher spheres. The next two rows show a black dielectric material. The third row is rendered without the multiple-bounce term, and the fourth row has the multiple-bounce term applied. Here the difference is more subtle, since the specular reflectance is much lower. (Figure courtesy of Christopher Kulla [947].) 

图9.39。在所有行中,表面的粗糙度从左到右增加。上面两行显示的是金色材质。第一行在不使用Imageworks多次反射术语的情况下进行渲染,第二行在使用多次反射术语的情况下进行渲染。对于较粗糙的球体,这种差异最为明显。接下来的两行显示黑色电介质材料。第三行渲染时没有多次反弹项,第四行应用了多次反弹项。这里的区别更加微妙,因为镜面反射率要低得多。(图由克里斯托弗·库拉[947]提供。)

这篇关于Real-Time Rendering——9.8.2 Multiple-Bounce Surface Reflection多次反射表面反射的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/292802

相关文章

Java通过反射获取方法参数名的方式小结

《Java通过反射获取方法参数名的方式小结》这篇文章主要为大家详细介绍了Java如何通过反射获取方法参数名的方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、解决方式方式2.1: 添加编译参数配置 -parameters方式2.2: 使用Spring的内部工具类 -

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

9.8javaweb项目总结

1.主界面用户信息显示 登录成功后,将用户信息存储在记录在 localStorage中,然后进入界面之前通过js来渲染主界面 存储用户信息 将用户信息渲染在主界面上,并且头像设置跳转,到个人资料界面 这里数据库中还没有设置相关信息 2.模糊查找 检测输入框是否有变更,有的话调用方法,进行查找 发送检测请求,然后接收的时候设置最多显示四个类似的搜索结果

linux 下Time_wait过多问题解决

转自:http://blog.csdn.net/jaylong35/article/details/6605077 问题起因: 自己开发了一个服务器和客户端,通过短连接的方式来进行通讯,由于过于频繁的创建连接,导致系统连接数量被占用,不能及时释放。看了一下18888,当时吓到了。 现象: 1、外部机器不能正常连接SSH 2、内向外不能够正常的ping通过,域名也不能正常解析。

GitHub每周最火火火项目(9.2-9.8)

项目名称:polarsource / polar 项目介绍:polar 是一个开源项目,它是 Lemon Squeezy 的替代方案,并且具有更具优势的价格。该项目的目标是为开发者提供一种更好的选择,让他们能够在追求自己的热情和兴趣的同时,通过编码获得相应的报酬。通过使用 polar,开发者可以享受到更实惠的价格,同时也能够更自由地发挥自己的创造力和技能。 项目地址:https://github.

【反射知识点详解】

Java中的反射(Reflection)是一个非常强大的机制,它允许程序在运行时检查或修改类的行为。这种能力主要通过java.lang.reflect包中的类和接口来实现。 通过反射,Java程序可以动态地创建对象、调用方法、访问字段,以及获取类的各种信息(如构造器、方法、字段等)。 反射的用途 反射主要用于以下几种情况: 动态创建对象:通过类的Class对象动态地创建其实例。访问类的字段