【视觉高级篇】23 # 如何模拟光照让3D场景更逼真?(上)
创始人
2024-03-23 18:35:21
0次

说明

【跟月影学可视化】学习笔记。

光照效果简介

物体的光照效果是由光源、介质(物体的材质)和反射类型决定的,而反射类型又由物体的材质特点决定。

在 3D 光照模型中,根据不同的光源特点分为四种:

  • 环境光(Ambient Light):指物体所在的三维空间中天然的光,它充满整个空间,在每一处的光照强度都一样。
    • 特点1:在空间中均匀分布,在任何位置上环境光的颜色都相同
    • 特点2:环境光没有方向,与物体的材质有关
  • 平行光(Directional Light):平行光是朝着某个方向照射的光,能够照亮几何体的一部分表面,它属于有向光。
  • 点光源(Positional Light):指空间中某一点发出的光,与方向光不同的是,点光源不仅有方向属性,还有位置属性。
  • 聚光灯(Spot Light):与点光源相比,聚光灯增加了方向以及角度范围,只有在这个范围内,光线才能照到。

点光源跟平行光的示意图:
在这里插入图片描述

聚光灯示意图:

在这里插入图片描述

有向光在与物体发生作用的时候,根据物体的材质特性,会产生两种反射类型:

  • 漫反射(Diffuse reflection)
  • 镜面反射(Specular reflection)

漫反射示意图:
在这里插入图片描述
一个物体最终的光照效果,是漫反射、镜面反射以及环境光叠加在一起的效果,示意图如下:

在这里插入图片描述

如何给物体增加环境光效果?

环境光没有方向,物体表面反射环境光的效果,只和环境光本身以及材质的反射率有关。

物体在环境光中呈现的颜色的公式如下:(环境光的颜色为 L,材质对光的反射率为 R。)

在这里插入图片描述

下面实现给物体增加环境光效果:


如何给物体增加环境光效果

在这里插入图片描述

如何给物体增加平行光效果?

有向光的漫反射在各个方向上的反射光均匀分布,反射强度与光的射入方向与法线的夹角的余弦成正比。

下面实现给物体增加平行光效果:


如何给物体增加平行光效果

加了平行光线之后,我们可以感受到明显的阴暗变化,效果如下:

在这里插入图片描述

如何给物体添加点光源?

计算点光源的光照,要先根据光源位置和物体表面相对位置来确定方向,然后再和平行光一样,计算光的方向和物体表面法向的夹角。


如何给物体添加点光源

在这里插入图片描述

点光源的衰减

真实世界中,点光源的光照强度会随着空间的距离增加而衰减。我们需要模拟一个衰减系数出来。

衰减系数等于一个常量 d0d_0d0​​(通常为 1),除以衰减函数 P。衰减函数可以用一个二次多项式 P 来描述,公式如下:

  • A、B、C 为常量
  • z 是当前位置到点光源的距离

在这里插入图片描述

然后利用光线到点坐标的距离,用来计算衰减,实现如下:


点光源的衰减

衰减对比效果如下:光线强度随着距离衰减,可以右边较远的几何体几乎没有光照。

在这里插入图片描述

如何给物体添加聚光灯效果?

与点光源相比,聚光灯相对来说比较复杂,要用 5 个参数来描述:

  1. spotLightColor 聚光灯颜色
  2. spotLightPosition 聚光灯位置
  3. spotLightDecayFactor 聚光灯衰减系数
  4. spotLightDirection 聚光灯方向
  5. spotLightAngle 聚光灯角度

利用聚光灯方向和角度,就可以求法向量与光线方向夹角的余弦值,这个值可以判断坐标是否在夹角内,最终的光照效果就只会出现在光照的角度内。


如何给物体添加聚光灯效果

大致的效果如下:可以明显的感受到聚光灯的效果

在这里插入图片描述

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...