graphics - 关于镜面反射行为的问题?

标签 graphics visualization computer-vision

为什么镜面反射光会呈现明亮的颜色(通常是白色),而物体的其他部分会反射感知到的颜色波长?

最佳答案

从物理角度来看,这是因为:

  • 镜面反射是由光从 Material 表面反射回来的结果
  • 漫反射是由于光线在 Material 内部反弹引起的

  • 假设您有一块表面光滑的红色塑料。塑料是红色的,因为它含有红色染料或颜料。进入塑料的入射光,如果是红色,往往会被反射,如果不是,则被吸收;这种红光在塑料内部反弹,并使其在或多或少随机的方向上返回(这就是该组件被称为“漫射”的原因)。

    另一方面,一些入射光从一开始就没有进入塑料:它会从表面反弹。因为塑料的表面是光滑的,所以它的方向不是随机的:它在基于镜面反射角的方向上反射(这就是为什么它被称为“镜面反射”)。由于它永远不会碰到塑料中的任何着色剂,因此它的颜色不会像漫射成分一样因选择性吸收而改变;这就是为什么镜面反射通常是白色的。

    我应该补充一点,以上是现实的高度简化版本:有很多情况没有被这两种可能性所涵盖。然而,它们对于计算机图形工作来说足够普遍并且普遍适用:漫反射+镜面反射模型可以为许多表面提供良好的可见近似,尤其是与其他廉价近似(如凹凸贴图等)结合使用时。

    编辑:回应 Ayappa 评论的引用资料——通常会产生镜面高光的机制称为 Fresnel reflection .这是一种经典现象,仅取决于 Material 的折射率。

    如果 Material 的表面在光学上是光滑的(例如,高质量的玻璃窗),菲涅耳反射将产生真正的镜面图像。如果 Material 只是部分光滑(如半光漆),您将获得镜面高光,根据微观层面的光滑程度,该高光可能窄或宽。如果 Material 完全粗糙(在微观层面或在比图像分辨率小的更大尺度上),那么菲涅耳反射就会变成有效的漫反射,并且不容易与其他形式的漫反射区分开来。

    关于graphics - 关于镜面反射行为的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7588769/

    相关文章:

    r - 如何在 R 中创建具有自定义点的绘图?

    ant - 需要一个工具来可视化 Ant 执行流程和属性

    r - 如何将数学符号添加到轮廓标签

    java - 为通用递归程序生成递归树的程序

    c# - System.Drawing 对于 2D 游戏编程来说足够快吗?

    algorithm - 绘制圆弧的有效算法?

    python - 使用 OpenCV Python,如何使所有黑色像素透明,然后将其覆盖在原始图像上

    c++ - OpenCV c++ 找不到 <opencv2/face.hpp>

    android - 如何将 android.graphics.Path 作为字符串或 Json 发送到另一部手机?

    python - 如何计算对象关键点相似度