从2016.11.13开始接触ray tracing到今天2017.02.05,差不多80天的时间。截至当前,学习ray tracing的过程,也是我重新找回自己或者说是“find what I love”的过程。不再浮躁,不再急功近利,不再认为“人活着就是为了赚钱”。我现在的观点是:对个人而言,活着的意义就是“find what we love”。
找到爱的人,快乐生活;找到爱的事,快乐工作。
也许是因为毕业多年,早已没有了当年的锋芒和伟大梦想了。一切都将归于平淡。
扯远了。ray tracing学习总结。
一开始,所有的事情都是陌生的。对于C++的理解只是“听说过”;对于“ray tracing”更是“闻所未闻”,只是感觉很厉害很好玩。YY是毫无意义的,一切都应该落到实处。脚踏实地,一步都不敢落空。
搭好环境后,接着就开始学习《ray tracing in one weekend》。这个小册子对ray tracing进行了非常简洁的介绍,但是提供了非常实用的C++代码。接下来一段时间内敲的代码基本上都是抄这本书。
这还只是一张图片,不是图形。贴图如下:
ray tracing中用到的C++的基础知识:
这个是我们后面经常使用的“背景图”
“法向量”开始登场。
贴图如下:
在生成这个图形的过程中,由于抄错了代码,生成了一个当时认为很神奇的图形,这个“神奇图形”从此成为了博客的头像。贴图如下:
贴图如下:
消锯齿前后对比截图如下:
怎么模拟ray tracing图形的各种材质:漫反射、镜面反射、折射
包含以上三种材质的ray tracing图形贴图如下:
ray traing中的Positionable camera
“可定位相机”使得从不同角度观测图形可以得到不同的图片。如下贴图是在不同角度观测同一图形得到的图片:
ray tracing中的相机怎么模拟“景深(散焦模糊)”?
设置不同景深参数,得到不同的图片贴图如下:
生成《Ray Tracing In One Weekend》封面图形
贴图如下:
到目前为止,《ray tracing in one weekend》这个小册子已经全部学习完成。如上贴出的图片都是对应抄书上代码生成的图形。接下来学习《an introduction to ray tracing》,这本书上木有代码。所以,接下来的只能靠自己写代码来生成图形了。画了各种各样的surfaces。
贴图如下:
贴图如下:
对应的2048*1024的大图:
怎么用ray tracing画二次曲面?
椭球面;单页双曲面、双页双曲面、椭圆锥面、椭圆柱面;椭球抛物面;双曲抛物面(马鞍面);
图形汇总;
汇总图形贴图如下:
对应的2048*1024的大图:
后续的图形的texture中会用到Inverse Mapping,所以有先学习各种简单图形的Inverse Mapping。
球面Inverse Mapping;凸四边形(含三角形)Inverse Maping;圆Inverse Mapping;圆柱面Inverse Mapping;圆锥面Inverse Mapping;
贴图如下:
uv原图:
映射到各个简单图形上时的输出图形:
贴图如下:
贴图如下:
大图~大图~看大图:
画圆环需要解一元四次方程。这个过程有遇到过:方程多根或者少根的情况,导致图形有多余像素或者像素缺失。
贴图如下:
ray tracing图形中的blending and joining surface?
贴图如下:
怎么用ray tracing画superellipsoid?
这里的超级椭圆面,和后面的超级双曲面、超级圆环的生成过程对应的方程已经无法用代数方法来解,我们借助牛顿迭代法来求其数值解。
贴图如下:
怎么用ray tracing画superhyperboloid?
贴图如下:
贴图如下:
贴图如下:
贴图如下:
后面在画参数方程表示的曲面时,会用到矩阵。怎么用C++实现矩阵的运算?
怎么用ray tracing画参数方程表示的曲面(2)—— bezier surface
怎么用ray tracing画参数方程表示的曲面(3)—— b-spline surface
画参数方程表示的曲面非常吃力。
(1)中画了一个球面和一个牛角面,贴图如下:
(2)、(3)中画的是普通的Bezier surface和b-spline surface,贴图如下(前边为Bezier,后边为b-spline):
之前,想用bicubicBezier patches画Utah teapot,生成的图形那叫一个“不堪入目”啊。贴图如下:
怎么用raytracing画translational sweeping图形?
怎么用ray tracing画conicsweeping图形?
用到3次b样条曲线。
贴图如下(前边为translational sweeping,后边为conic sweeping):
怎么用ray tracing画回旋体(rotationalsweeping / revolution)?
用到3次b样条曲线。
过程中需要解一元六次方程。
贴图如下:
怎么用raytracing画sphere sweeping图形?
用到3次b样条曲线。
过程中需要解一元十次方程。
贴图如下:
用sphere sweeping图形组合成一个teapot。贴图如下:
怎么用ray tracing画CSG(Constructive Solid Geometry 构造实体几何)图形?
贴图如下:
第一组:
第二组: