OpenGL 光照入门:色彩、光源与三大反射原理
OpenGL 光照入门色彩、光源与三大反射原理Bilibili 同步视频 平行光来自无限远方的 “日光信使” 光与物体的邂逅吸收、反射与渲染建模✍️ 两大核心反射漫反射 高光反射️ 漫反射Diffuse无处不在的均匀柔光✨ 高光反射Specular光滑表面的璀璨亮斑 环境光Ambient告别 “死黑” 的场景底色 初阶光照核心总结Bilibili 同步视频OpenGL 光照入门色彩、光源与三大反射原理在图形渲染的世界里材质是构筑视觉真实感的基石而颜色则是材质最核心的表达语言。想要读懂光照必先理解色彩的底层逻辑 —— 它不仅是肉眼可见的斑斓更是计算机中可计算、可组合的数值信号。颜色的本质是红、绿、蓝三个通道的协同演绎。这三原色如同光影的三原色密码通过不同比例的叠加就能幻化出自然界中近乎所有色彩。在数值表达上颜色有两种常用标尺0255 是日常设计的通用标准而在 OpenGL 的 Shader 中我们统一使用01的浮点区间0 代表通道无输出1 则是通道的最大强度。色彩藏着双重含义✨ 对于光源本身RGB 数值代表光的辐射强度✨ 对于物体表面数值则是对红、绿、蓝光的反射百分比。举个直观的例子一个物体的颜色为RGB(0.2, 0.5, 0.8)意味着它会反射 20% 的红光、50% 的绿光、80% 的蓝光。当一束强度为RGB(0.9, 1.0, 0.8)的光线照射其上时最终反射出的颜色只需将两组数值对应相乘即可得出 —— 这便是色彩计算最朴素的核心逻辑。 平行光来自无限远方的 “日光信使”理解了色彩我们便可以踏入光源的世界。自然界的光源千变万化而图形学中最常用、最基础的便是平行光。平行光的本质是无限远光源发出的、所有光线方向完全一致的光束。它最经典的应用就是模拟太阳光。太阳与地球的距离遥远到超乎想象对于人类视角而言太阳相当于位于 “无穷远处”。照射到地球表面的光线局部放大后几乎完全平行没有明显的发散与汇聚。正因如此平行光无需定义光源位置只需确定光线方向就能高效模拟日光效果在 Unity、Unreal 等引擎中这都是默认的日光解决方案。 光与物体的邂逅吸收、反射与渲染建模图形学研究光与物体的作用本质是建立数学模型—— 将光的能量、物体的反射能力量化最终计算出屏幕上的像素颜色。真实的物理光学极其复杂而初阶渲染中我们用简化的模型理解光与物体的交互是一场吸收与释放的过程。光以 “撞击” 的方式接触物体表面部分光进入物体内部被吸收并转化为热能这也是物体暴晒后升温的原因未被吸收的光会被物体向四面八方均匀发散形成基础的视觉亮度。这种简化模型虽不完美物理精准的 PBR 渲染会在后续深入却足够支撑初阶光照开发清晰拆解出两种核心反射方式。✍️ 两大核心反射漫反射 高光反射️ 漫反射Diffuse无处不在的均匀柔光当光进入物体内部再被发散出去向所有方向均匀反射的效果就是漫反射。它的特点极为鲜明无论从哪个视角观察表面的亮度与颜色都完全一致。粗糙的墙面、布料、石材都是典型的漫反射载体是物体呈现基础色彩的关键。✨ 高光反射Specular光滑表面的璀璨亮斑另一部分光不会进入物体内部而是在表面直接反弹这就是高光反射镜面反射。它遵循光学反射定律以表面法线为对称轴入射角 出射角反射光线高度集中形成明亮的光斑。金属、光滑塑料、抛光木材都有强烈的高光表现是提升材质质感的灵魂所在。绝大多数物体同时具备漫反射与高光反射 ——两者叠加才是物体完整的光照效果。 环境光Ambient告别 “死黑” 的场景底色如果只有平行光、漫反射和高光反射渲染会出现致命问题光线照不到的背面、死角会变成纯粹的死黑这与现实世界完全相悖。自然中没有绝对的黑暗光线会在地面、墙面、物体间不断反弹从无数方向微弱地照亮每一个角落。这种无法追溯光源、均匀柔和的间接光就是环境光。环境光的计算极简通常用一组低强度固定值表示如RGB(0.1, 0.1, 0.1)物体反射环境光的颜色只需环境光强度 × 物体自身颜色。它就像场景的 “基础底色”彻底消除死黑让渲染更贴近真实。 初阶光照核心总结初阶光照渲染只需牢牢抓住三大反射漫反射Diffuse均匀发散呈现物体基础色高光反射Specular定向反射打造材质亮斑环境光Ambient全局柔光避免场景死黑。分别计算三种反射的颜色结果再线性叠加就是我们最终看到的物体光照效果。理论是代码的地基下一篇我们将走进实践把这三大反射原理转化为 OpenGL Shader 可运行的代码让光线真正在屏幕上 “亮” 起来。