IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity中的基础光照 -> 正文阅读

[游戏开发]Unity中的基础光照

我们是如何看到这个世界的

我们要模拟真实的光照环境来生成一张图像,需要考虑三种物理现象。
1.首先,光线从光源(light source)中被发射出来
2.光线和场景中的一些物体相交:一些光线被物体吸收,另一些光线散射到其他方向
3.最后,摄像机吸收了一些光,产生了图像

光源

光是由光源发射出来的。在实时渲染中,我们通常把光源当成一个没有体积的点,用l来表示它的方向。在光学里,我们用辐照度(irradiance)来量化光。

吸收和散射

光线由光源发射出来以后,就会与一些物体相交。通常,相交的结果有两个:散射(scattering)和吸收(absorption)
散射只改变光的方向,不改变光的颜色和密度。吸收只改变光的颜色和密度,不改变光的方向。光在物体表面经过散射后,有两种方向:一种会散射到物体内部,即折射(refraction)或透射(transmission);另一种会散射到外部,即反射(reflection)。
为了区分这两种不同的散射方向,我们在光照模型中使用了不同的部分来计算它们:高光反射(specular)部分表示物体表面是如何反射光线的,而漫反射(diffuse)部分则表示有多少光线会被折射,吸收和散射出表面。根据入射光线的数量和方向,我们可以计算出射光线的数量和方向,通常使用出射度(exitance)来描述它。辐照度和出射度之间是满足线性关系的,而它们之间的比值就是材质的漫反射和高光反射属性。

着色 / 光照模型

着色(shading)指的是,根据材质属性(如漫反射),光源信息(如光源方向,辐照度等),使用一个等式去计算沿某个观察方向的出射度的过程,这个等式也叫做光照模型(Lighting Model)。不同的光照模型有不同的目的,一些用于描述粗糙的物体表面,一些用于描述金属表面。

BRDF光照模型

在图形学中,BRDF(Bidirectional Reflectance Distribution Function)大多使用一个数学公式来表示,并且提供了一些参数来调整材质属性。通俗来讲,当给定入射方向和辐照度后,BRDF可以给出在某个出射方向上的光照能量分布。

标准光照模型

标准光照模型只关心直接光照,也就是那些从光源发射出来照射到物体表面后,经过物体表面的一次反射直接进入摄像机的光线。

它的基本方法是,把进入到摄像机的光线分为四个部分,每个部分使用一种方法来计算它的贡献度:

自发光(emissive)

当给定一个方向时,一个表面本身会向该方向发射多少辐射量。cemissive = memissive

高光反射(specular)

当光线从光源照射到物体表面时,该表面会在完全镜面反射方向散射多少辐射量。cspecular = clight·mspecular max(0, v ^ \hat{v} v^·r)m~gloss~
其中,
mgloss 是材质的光泽度,也被称为反光度,用于控制高光区域的亮点有多宽,mgloss 越大,亮点就越小
mspecular 是材质的高光反射颜色,用于控制该材质对于高光反射的强度和颜色
clight 是光源的颜色和强度

漫反射(diffuse)

当光线从光源照射到物体表面时,该表面会向每个方向散射多少辐射量。cdiffuse = clight·mdiffuse max(0,n·1)

环境光(ambient)

用于描述其他所有的间接光照。cambient = gambient

逐像素还是逐顶点

通常来讲,我们计算基本光照模型有两种选择:在片元着色器中计算,也称逐像素光照;在顶点着色器中计算,也称逐顶点光照

在Unity中实现漫反射光照模型

基本光照模型中漫反射部分的计算公式:
在这里插入图片描述
要计算漫反射需要4个参数:
入射光线的颜色和强度clight,材质的漫反射系数mdiffuse,表面法线 n ^ \hat{n} n^,光源方向 I

为了防止点积结果为负值,我们需要使用max操作,而CG提供了这样的函数。本例中,使用CG的另外一个函数可以达到同样的目的,即 saturate函数。

函数:saturate(x)
参数 x:为用于操作的标量或矢量,可以是float,float2,float3等类型
描述:把x截取在[0,1]的范围内,如果x是一个矢量,那么会对它的每一个分量进行这样的操作。

在Unity中实现高光反射模型

基本光照模型中高光反射部分的计算公式:
在这里插入图片描述
计算高光反射需要4个参数:
clight :入射光线的颜色和强度
mspecular :材质的高光反射系数
v ^ \hat{v} v^:视角方向
r:反射方向

CG提供了计算反射方向的函数reflect
函数:reflect(i,n)
参数:i,入射方向;n,法线方向。可以是float,float2,float3等类型
描述:当给定了入射方向 i 和法线方向 n 时,reflect函数可以返回反射方向。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-08-27 12:12:28  更:2021-08-27 12:12:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 1:08:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码