太极图形课S1第07讲:光线追踪实战

本文详细讲解了光线追踪的实现过程,包括如何发射光线、计算交点、处理反射与折射、解决数值精度问题以及应用抗锯齿技术进行反走样。通过实例展示了从基本的光线与球体交点计算到复杂的菲涅尔效应,以及从递归到非递归的转换,探讨了图形学中的数理基础和编程技巧。

太极图形课S1第07讲:光线追踪实战_哔哩哔哩_bilibili

没有代码,还是上一节的代码

看了别的大佬写的很多好看的图形学程序,就有那么一种感觉——我这个小白之所以这么白,全方位的白,是因为没有相关的数理知识作核。而图形编程只是一层壳,是次要方面。

抓不到主要方面,当然白啦!

不过,如果我要是能学得会数理知识,我高考能考成那样吗……

已经习惯被大佬按在地上去摩擦了……不习惯又能怎么样呢?就不是那块料。。

就这样吧,凑凑热闹,感动一下自己……自我感动形学习……

自我感动形学习也比自我放弃形躺平要好听一点,至少学了一点,万一学的这一点以后用上了呢?

正文

绕过辐射度量学,说清楚光线到底追到了什么颜色

回顾

图形学的这个图形的颜色,其实是颜色+亮度

  • 颜色:可以当成一个过滤器,比如白光射入红墙,反射以后,多余的颜色被过滤,就只剩了红光
  • 强度:严格来说,应该叫辐照度,能量,单位立体角什么的,流明
  • 光追,多次反射,那就多乘几次【弹幕:亮度是有单位的,连乘之后量纲就不对了,颜色可以被认为是个过滤器/衰减器】

 代码

问题的提出 

今天主要看“实现”,实现的话,就有这么几个问题:

如何发射光?

如何计算光线与物体的交点?

漫反射表面,介电质表面,如何取光线的方向?

如何化递归为非递归?

如何反走样?

 正式开始:

问题1——如何发射光?

一条直线,可以按射线来定义

定义了很多值:

发光:

可以按像素中心算,不一定都要按左下角来算

 问题2——如何计算光线与物体的交点?

解方程。。

都定义成数学,然后计算

联立,解方程

 射线与球的交点的计算,可能会计算出一些奇奇怪怪的东西

比如,两个正根,一正一负,两个负根

取最小的那个正根就行了

 把这些东西具体实现出来,是这个:、

会发现,结果很奇怪

 为什么?

因为数学上的理论计算,和实际上的硬件实现,有时候不大一样。

理论计算:【0,2】的时候,取最小的正根——取2,和第二个球相交,没毛病

硬件实现:【0.0001,1.9999】的时候,取最小的正根——取0.0001,和自己相交,凉凉……

【弹幕:因为有靠近0的根的时候,因为数值精度问题,会偶尔返回给你一个正根,偶尔返回一个负根(都很小),就会出现相交判定时灵时不灵】

解决方法——把最小的正根,改成,最小的大于0.001的根

【弹幕:有一个trick是计算求交时把射线起点稍微往后退一点。——这玩意原来用过的】

然后,这个问题就可以解决了

还有个问题,墙壁如何求交?——其实,这个所谓的平面墙壁,是半径很大的几个球的一部分

正规的,与平面求交应该这么计算:

有了平面以后,还可以再扩展,扩展到与三角形求交

因为,三角形总是在某个平面上的

重心坐标,面积关系,可以判断某点是否在三角形内,与上面的结合一下,就完成了射线与三角形的求交

 与三角形求交,有这么个应用:

 问题3——如何采样

 新的坐标系的定义:

 可以均匀采样一个球

 忽略R=1,三维球坐标就转化成了二维坐标,把这些二维散点映射到球上的时候,两极的点会密一些

所以,地球仪的两极,看着比较虚大。

重新定义球的均匀采样:

推导看不懂可以忽略。。

最后结果是这个:

θ在赤道多采一些,在两极少采一些

 

 球体里采样,R也要变,才能保证采样是均匀的

【弹幕:为啥要对r采样开三次方,0~1之间随机不行吗】

【如果不开三次方会采出中心采样多,外面采样少的情况。】

【概率密度函数,求法很简单, 讲实际分布函数取逆函数就好了。 了解这个知识的人的确很少】

【想象一个半径为r的球,把它的半径增加微小量dr之后,球体体积的变化量和r^3成正比】

还有另一种方法:按方块采样,不按球采样,简单一点

结束了吗?

够用,但是还可以再改

加点权重? 

 【成正比的线性函数,算来算去后,对密度函数的调整就是求开方。】

 球面上采样,再投影回去

 【学会放弃……】

在球体里采样,和在球面上采样

 这玩意,不好调试

 问题4——反射与折射与介电质

 全反射。。

 还有个问题——反射和折射,都占多少?

 【菲涅尔效应】

 数学公式……

和入射角,两个光疏光密介质有关

 

 整合一下:

 问题5——递归

 函数调用与递归工作栈

 

 尾递归,和ray trace差不多……可以改成循环

不用手动维护一个堆栈了

 然后,按这个原理来改写:

 大概是这么个流程

 问题6——抗锯齿反走样

这个就叫锯齿

 可以这么搞,多采样几次

 效果

 

 

 

光线跟踪到光源的时候,才能知道它是什么颜色

所以,可以摄像机,光源,两头一起计算。。

还是大神。。

 讲path trace代码的一个环节

太极图形课S1第07讲:光线追踪实战_哔哩哔哩_bilibili

这还有一个模拟太阳系的大佬

太极图形课S1第07讲:光线追踪实战_哔哩哔哩_bilibili

我能模拟小白。。因为我就是小白。唉…… 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值