Q88:全局光照(Global Illumination)——Path Tracing算法生成反射焦散效果的图形
由于在镜面反射中,光线几乎可以保持来自光源的全部能量,并在表面曲度和折射率的作用下,产生聚焦或者发散,当这种光线接触到场景中其它对象的表面时,又会产生新的照明效果,于是焦散便产生了。
简而言之,即是:Reflective材质物体的所反射的光打在Matte材质物体上。
为了使“焦散效果”比较明显,我们选择圆柱面作为Reflective材质的物体。
相关代码:
void
World::build(void) {int num_samples = 100; // 5041vp.set_hres(400);vp.set_vres(400);vp.set_samples(num_samples);vp.set_max_depth(5);tracer_ptr = new PathTrace(this);Pinhole* pinhole_ptr = new Pinhole;pinhole_ptr->set_eye(5, 10, 20);pinhole_ptr->set_lookat(-1, 1, 0);pinhole_ptr->set_view_distance(500);pinhole_ptr->compute_uvw();set_camera(pinhole_ptr);// emissive sphereEmissive* emissive_ptr = new Emissive;emissive_ptr->scale_radiance(20.0);emissive_ptr->set_ce(0.75, 1, 0.75); // light greenSphere* sphere_ptr = new Sphere(Point3D(-2, 7, 6), 2);sphere_ptr->set_material(emissive_ptr);sphere_ptr->set_sampler(new MultiJittered(num_samples));add_object(sphere_ptr);// reflective rectangleReflective* reflective_ptr = new Reflective;reflective_ptr->set_ka(0.0);reflective_ptr->set_kd(0.0);reflective_ptr->set_ks(0.0);reflective_ptr->set_exp(1.0);reflective_ptr->set_kr(0.95);reflective_ptr->set_cr(1.0, 0.2, 0.2);double bottom = -1.0;double top = 1.0;double radius = 7.0;OpenCylinder* cylinder_ptr = new OpenCylinder(bottom, top, radius);cylinder_ptr->set_material(reflective_ptr);add_object(cylinder_ptr);// planeMatte* matte_ptr = new Matte;matte_ptr->set_ka(0);matte_ptr->set_kd(0.75);matte_ptr->set_cd(white);matte_ptr->set_sampler(new MultiJittered(num_samples));Plane* plane_ptr = new Plane(Point3D(0, -1.0, 0), Normal(0, 1, 0));plane_ptr->set_material(matte_ptr);add_object(plane_ptr);
}
输出图形:
单像素点的采样次数为1,耗时236s:
单像素点的采样次数为100,耗时755s:
单像素点的采样次数为1000,耗时3256s:
圆柱面内部白色平面上的那些红色光影即是:圆柱镜面产生的反射焦散效果。
(最后这张图中应该是有个bug:平面上多出一个白色圆盘。不知是怎么回事,暂不追究)
Q88:全局光照(Global Illumination)——Path Tracing算法生成反射焦散效果的图形相关推荐
- Q88:全局光照(Global Illumination)——Path Tracing
88.1 引入(Introduction) 截至当前,回忆一下我们学过的针对直接光照和间接光照的不同反射模型. 直接光照: Phong反射模型.包含漫反射部分和高光反射部分. 间接光照: 对于镜面材料 ...
- (中文详解篇)smallpt: 99行代码完成全局光照Path Tracing
目录 0. 什么是SmallPT Features 1. 光线追踪需要了解知识 1.1 什么是全局光照? 1.2 渲染方程 2. SmallPT代码分析 2.1 代码块1 2.2 代码块2 2.2.1 ...
- 全局光照技术解析Global Illumination Explained
解析全局光照Global Illumination Explained 前言:Global Illumination全局光照技术是实时渲染的必然发展方向.我参考了一些研究成果,琢磨了一下,让更多的人可 ...
- GAMES101课程学习笔记—Lec 14(2)~16:Ray Tracing(2) BRDF、渲染方程、全局光照、路径追踪
GAMES101课程学习笔记-Lec 14(2)~16:Ray Tracing(2) BRDF.渲染方程.全局光照.路径追踪 0 引入--辐射度量学概述 1 相关概念 1.1 Radiant Ener ...
- Q89:全局光照(Global Illumination)——Path Tracing(只用于间接光照)
89.1 Path Tracing只用于间接光照 根据Path Trace的算法,只有当最终的反射光线撞击到发光材质物体时,才会对最初的撞击点进行"有效"着色,否则着色为" ...
- Unity 5 中的全局光照技术详解
简介 全局光照,简称GI,是一个用来模拟光的互动和反弹等复杂行为的算法,要精确的仿真全局光照非常有挑战性,付出的代价也高,正因为如此,现代游戏会先一定程度的预先处理这些计算,而非游戏执行时实时运算. ...
- Unity5 全局光照
转载自:Unity 5 中的全局光照技术详解 简介 全局光照,简称GI,是一个用来模拟光的互动和反弹等复杂行为的算法,要精确的仿真全局光照非常有挑战性,付出的代价也高,正因为如此,现代游戏会先一定程度 ...
- (六)unity自带的着色器源码剖析之——————Unity3D的全局光照和阴影:上篇(全局照明GI和局部照明)
一.全局照明和局部照明 全局照明(global illumination,GI)是用于向三维场景中添加更为逼真的光照效果的一组算法总称.全局算法不仅考虑光源发出的光与被照亮物体之间的关系,即直接照明( ...
- 实时高清渲染:全局光照(Global Illumination)[1]
目录 基础知识: Radiance: Irradiance: Radiant flux: Radiant Intensity: Solid Angle: Lambertian surface: Lam ...
最新文章
- 袋鼠过河(动态规划)
- 如何解决数据丢失问题
- 表单一次性上传多个文件
- c语言不通类型指针转换,C语言之强制类型转换与指针--#define DIR *((volatile unsigned int *) 0x0022)...
- Spring Data JPA - 参考文档 地址
- ThinkPHP内核微信拼团购物商城小程序源码
- “C语言之父”40年前搞的操作系统复活,Linux、Windows都借鉴过它
- 短视频网站源码干货分享:如何实现背景音乐和美颜功能
- VSCode 中文乱码
- 数据结构 -- 景区旅游信息管理系统
- CSS 特异度、继承、求值过程简介
- 怎样把英文pdf翻译成中文?
- 点估计与区间估计、置信区间、置信水平
- 技术人员如何创业:打造超强执行力团队
- 高手修车都用示波器: 示波器是什么?如何选购?
- RK3288 系统升级流程
- Elasticsearch 第三方工具包Bboss的简单使用
- android2.1源代码结构
- 从技术宝库到云上机遇:华为云开天aPaaS的“修路记”
- .net基础学java系列(五)慢性自杀 之 沉沦在IDE中