在光线追踪中为对象着色

Posted

技术标签:

【中文标题】在光线追踪中为对象着色【英文标题】:Coloring objects in ray tracing 【发布时间】:2018-10-31 07:50:55 【问题描述】:

我正在尝试渲染屏幕。到目前为止,我已经将我的光线与场景中的对象相交,如果有交叉点,我会为该交叉点设置一个随机颜色。

接下来我需要根据像素值对像素进行着色。我看过 10 多个教程,阅读了几个关于像素着色的网站。但是,我正在阅读的文件没有对象的颜色。相反,它具有以下内容:

RGB 颜色的环境光 点光源,具有 rgb 颜色和位置 对象具有环境、漫反射、镜面反射、镜面反射(以 rgb 为单位)和 phong 指数(一个值)。

另外,我知道发出的光的强度与距离的平方成正比(距离越大,物体上的光越少)。

如果我有对象的颜色,我可以使用下面的算法:

Color3 trace(..)

    ...
    Color3 ambient = object.color * 0.3;
    Color3 phong = phongModel(..) or object.color;
    Color3 reflection = trace(..);

    return ambient + phong + reflection;

如中所述:How to compute reflected color?

我没有对象的颜色,只有反射值。如何计算物体的颜色?

【问题讨论】:

为什么不直接假设对象的默认颜色(例如:白色)? 好吧,很好的假设。可能是这个,我要试试这个。我觉得自己像个白痴,没想到这一点 最好是灰色而不是白色,这样你可以看到“反射” 【参考方案1】:

但是,我正在阅读的文件没有对象的颜色。 相反,它具有以下内容:

...

对象具有环境、漫反射、镜面反射、镜面反射(以 rgb 为单位)和 phong 指数(一个值)。

如果你有RGB所有这些,那就是对象的颜色。

将入射光与物体以给定角度反射它的方式相乘,结果就是感知它的颜色。

【讨论】:

以上是关于在光线追踪中为对象着色的主要内容,如果未能解决你的问题,请参考以下文章

没有递归光线追踪就不可能实现反射和折射?

没有得到正确的阴影位置,基于 CPU 的光线追踪

如何将光线追踪器中的光线从世界空间反向旋转到对象空间

为啥我的 CUDA 光线追踪器给我这个线程布局的错误代码 700?

GAMES202 笔记-实时光线追踪

光线追踪、光线投射、光线行进和路径追踪有啥区别?