UnityShader(九)Unity中的基础光照(下)

标准光照模型

光照模型有许多种,但在早期游戏引擎中,往往只使用一个光照模型,被称为标准光照模型。

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

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

自发光(emissive),这个部分用于描述给定一个方向时,一个表面本身会向该方向发射多少辐射量。需要注意的是,如果没有使用全局光照技术,这些自发光的表面并不会真正地照亮周围地物体,而是它本身看起来更亮了而已。

高光反射(specular),这个部分用于描述当光线从光源照射到模型表面时,该部分会在完全镜面反射方向散射多少辐射量。

漫反射(diffuse),这个部分用于描述当光线从光源照射到模型表面时,该表面会向每个方向散射多少辐射量。

环境光(ambient),这个部分用于描述其他所有地简介光照。

自发光

光线可以直接由光源发射进入摄像机而不用经过任何物体反射,标准光照模型使用自发光来计算这个部分的贡献度。

它的计算很简单,就是直接使用了改材质的自发光颜色。

自发光表面往往不会直接照亮周围的表面,它不会被当作是一个光源。

高光反射

(1)Phong模型

这里的高光反射是一种经验模型——不完全符合真实世界中的高光反射现象。用于计算沿着完全镜面反射方向的光线,让物体看起来更有光泽。

计算高光反射我们需要知道:表面法线、视角方向、光源方向、反射方向。我们只要知道前三个矢量(都进行了归一化),反射方向可以通过计算得到,计算公式如下:

r是反射方向、n是法线方向、I是光源方向。

高光反射部分计算公式如下:

       

其中,mgloss是材质的光泽度,也被称为反光度。用于控制高光区域的“亮点”有多宽,mgloss越大,亮点越小。mspscular是材质的高光反射颜色,它用于控制该材质对于高光反射的强度和颜色。clight则是光源颜色和强度。同样,这里也需要防止v·r的结果为负数。

(2)Blinn模型

和上述的Phong模型相比,Blinn提出了一个简单的修改方法来得到类似的结果。它的基本思想是,避免计算反射方向r。为此,Blinn模型引入了一个新的矢量h,它是通过对vI的取平均后再归一化得到的

然后,使用nh之间的夹角进行计算,而非vr之间的夹角,
总结,Blinn模型公式为

 

        这两种模型各有优劣。如果摄像机和光源距离模型足够远的话,Blinn会快于Phong,因为这个时候 v I 都可以看成定值,h 将是一个常量。反之Phong可能更快。

漫反射

漫反射是用于对那些被物体表面随机散射到各个方向的辐射度进行建模的。在漫反射中视角位置是不重要的,因为反射是完全随机的,但是入射光线的角度是很重要的。

漫反射光照符合兰伯特定律(Lambert's law):反射光线的强度与表面的法线和光源方向之间夹角的余弦成正比。

 n是表面法线,I是指向光源的单位矢量,m_{diffuse}是材质的漫反射颜色,c_{light}是光源的颜色。我们需要防止法线和光源方向的点乘为负值,所以用取最大值函数将其截取到0,可以防止物体被从后面来的光源照亮。

环境光

虽然标准模型重点在于描述直接光照,但是在现实生活中物体可也可以被间接光照所照亮。

间接光照指光线通常会在多个物体间反射,最后进入摄像机。例如在红地毯上放一个浅灰色的小球,那么小球的底部就会有红色,这些红色是由红地毯反射了一部分光线,再反弹到沙发上的。

在标准光照模型中,我们使用环境光来近似模拟间接光照,它通常是一个全局变量,即场景中的所有物体都使用这个环境光。

逐顶点还是逐像素

上述给出了基本光照模型的数学公式,我们在何处计算这些光照模型呢?

通常来讲,我们可以选择在片元着色器中计算,也被称为逐像素光照;在顶点着色器中计算,也被称成为逐顶点光照

逐像素光照

我们会以每个像素为基础得到它的法线(可以是对顶点法线插值得到的,也可以是从法线纹理中采样得到的),然后计算光照模型。这种在面片之间对顶点法线进行插值的技术被称为Phong着色,也被称为Phong插值或法线插值着色技术

逐顶点光照

也被称为高洛德着色。我们在每个顶点上计算光照,然后会在渲染图元内部进行线性插值,最后输出成像素颜色。

由于顶点数目往往小于像素数目,因此逐顶点光照计算量往往小于逐像素光照。但是由于逐顶点光照依赖于线性插值得到的像素光照,因此当光照模型中有非线性的计算(如计算高光反射)时,逐顶点光照就会出现问题。

总结

标准光照模型仅仅是一个经验模型,它不完全符合现实世界的光照现象,但是它具有易用性、计算速度和得到的效果都比较好,也被广泛使用。因为广泛使用,它有许多称呼,一些资料会称它为Phong光照模型,在Blinn的方法简化下它也被称为Blinn-Phong光照模型

但这种模型有很多局限性。首先有很多重要的物理现象无法表现,如菲涅尔反射。其次,Blinn-Phong模型各项同性的,当我们固定视角和光源方向旋转这个表面时反射不会发生任何变化。而有些表面是具有各项异性的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/657972.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Meteor Lake上测试基于Stable Diffusion的AI应用

上个月刚刚推出的英特尔新一代Meteor Lake CPU,预示着AI PC的新时代到来。AI PC可以不依赖服务器直接在PC端处理AI推理工作负载,例如生成图像或转录音频。这些芯片的正式名称为Intel Core Ultra处理器,是首款配备专门用于处理人工智能任务的 …

【安装记录】在pve中创建debian12虚拟机

1、官网下载debian12:https://www.debian.org/ 2、安装虚拟机 (1)上传 iso 文件到pve服务器: 等待上传中。。。 上传完毕结果如下: (2)创建虚拟机 类别我也不清楚有什么区别?我看推荐使用host…

[数据结构与算法]哈希算法

目录 哈希算法 常见哈希函数: MD5 (Message Digest Algorithm 5): SHA-1 (Secure Hash Algorithm 1): SHA-256 (Secure Hash Algorithm 256-bit): 代码演示: 哈希算法 哈希算法是一种将任意长度的输入数据映射为固定长度的输出数据的算法。哈希函数的主要目标是…

瑞_数据结构与算法_红黑树

文章目录 1 什么是红黑树1.1 红黑树的背景1.2 红黑树的特性 ★★★ 2 红黑树的Java实现2.1 红黑树颜色枚举类Color2.2 红黑树节点类Node2.2.1 实现判断是否是左孩子方法isLeftChild()2.2.2 实现查找叔叔节点方法uncle()2.2.3 实现查找兄弟节点方法sibling() 2.3 红黑树类RedBla…

Python如何递归删除空文件夹

嗨喽,大家好呀~这里是爱看美女的茜茜呐 1.Python如何递归删除空文件夹,这个问题很常见。 但大多数人的解决办法都是自己实现递归函数解决这个问题,其实根本不用那么麻烦。 Python中的os.walk提供了一种从内到外的遍历目录树的方法&#xff…

fullcalendar案例

fullcalendar案例 <script srchttps://cdn.jsdelivr.net/npm/fullcalendar6.1.10/index.global.min.js></script><script srchttps://code.jquery.com/jquery-3.6.0.min.js></script> <!-- 引入 jQuery CDN --><script>document.addEventL…

第5章 python深度学习——波斯美女

第5章 深度学习用于计算机视觉 本章包括以下内容&#xff1a; 理解卷积神经网络&#xff08;convnet&#xff09; 使用数据增强来降低过拟合 使用预训练的卷积神经网络进行特征提取 微调预训练的卷积神经网络 将卷积神经网络学到的内容及其如何做出分类决策可视化 本章将…

【前端-VUE】Vue3组件组成部分及组件通信(详解)

一、父子间通信 1.父传子&#xff1a; 2.子传父&#xff1a; 3.什么是prop Prop定义&#xff1a;组件上注册的一些自定义属性 Prop作用&#xff1a;向子组件传递数据 特点&#xff1a; 可以传递任意数量的prop可以传递任意类型的prop 3.1 props校验 思考&#xff1a;组件的prop…

母排设计时没有柜体3D数据?来试试SuperPanel的钣金功能!

CAD版SuperPanel软件能够助力用户快速、准确地设计和修改母排&#xff0c;同时快速输出加工图纸和数控加工代码。在壳体外购&#xff0c;没有柜体3D数据的情况下&#xff0c;如何轻松进行母排设计&#xff1f;一起来学习利驰数字母排的钣金功能吧&#xff01; SuperPanel的钣金…

【新课】安装部署系列Ⅲ—Oracle 19c Data Guard部署之两节点RAC部署实战

本课程由云贝教育-刘峰老师出品&#xff0c;感谢关注 课程介绍 Oracle Real Application Clusters (RAC) 是一种跨多个节点分布数据库的企业级解决方案。它使组织能够通过实现容错和负载平衡来提高可用性和可扩展性&#xff0c;同时提高性能。本课程基于当前主流版本Oracle 1…

python 写入csv文件 内容乱码

问题 python 写入csv文件 内容乱码 详细问题 笔者核心代码 import csv # 将数据写入 CSV 文件 csv_file_path "soil_data.csv" header ["经度", "纬度", "土壤类型", "pH值"]with open(csv_file_path, mode"w&q…

【PyTorch实战演练】Fast R-CNN中的RoI(Region of Interest)池化详解

文章目录 0. 前言1. ROI池化的提出背景2. RoI池化的结构与工作原理3. RoI池化的作用及意义4. RoI使用示例 0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自己学习的理解&#xff0c;虽然参考了他人的宝贵见解及成果&#xff0c;但是内容可能存在不准确的地方…

优化器刺客之limit 1--Order by col limit n 代价预估优化探索

一、现象 order by 排序加了limit后更慢了&#xff1f; test# explain analyze select userid from dba_users where username like %aaaaaaaaaaaaaaaaaa% order by userid ;QUERY PLAN --------------…

ElementUI Form:Radio 单选框

ElementUI安装与使用指南 Radio 单选框 点击下载learnelementuispringboot项目源码 效果图 el-radio.vue 页面效果图 项目里el-radio.vue代码 <script> export default {name: el_radio,data() {return {radio: 1,radio2: 2,radio3: 3,radio4: 上海,radio5: 上海,ra…

12个适合后端程序员的前端框架

前言 今天我们分享12个适合后端程序员的前端框架&#xff0c;本文中的所有前端框架都已经收录到适合后端程序员的前端框架GitHub Issues知识库中&#xff0c;假如大家有更好前端框架推荐欢迎到以下GitHub项目地址留言或者在文末留言&#xff08;注意&#xff1a;排名不分先后&a…

c#鼠标绘制

有用的没用的&#xff0c;用的上的用不上的&#xff0c;能写的不能写的&#xff0c;反正想起来就写了&#xff0c;比如这篇&#xff0c;好像一般也没什么用&#xff0c;emmm&#xff0c;或许&#xff0c;做录制软件的时候可以用一下。 顾名思义&#xff0c;本篇主要就是来实现将…

dvwa,xss反射型lowmedium

xss&#xff0c;反射型&#xff0c;low&&medium low发现xss本地搭建实操 medium作为初学者的我第一次接触比较浅的绕过思路high low 发现xss 本关无过滤 <script>alert(/xss/)</script> //或 <script>confirm(/xss/)</script> //或 <scr…

幻兽帕鲁服务器游戏怎么升级版本?

幻兽帕鲁服务器游戏怎么升级版本&#xff1f;自建幻兽帕鲁服务器进入Palworld游戏提示“您正尝试加入的比赛正在运行不兼容的游戏版本&#xff0c;请尝试升级游戏版本”什么原因&#xff1f;这是由于你的客户端和幻兽帕鲁服务器版本不匹配&#xff0c;如何解决&#xff1f;更新…

故障诊断 | 一文解决,SVM支持向量机的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,SVM支持向量机的故障诊断(Matlab) 支持向量机(Support Vector Machine,SVM)是一种常用的监督学习算法,用于分类和回归分析。SVM的主要目标是找到一个最优的超平面(或者在非线性情况下是一个最优的超曲面),将不同类别的样本分开…

Flutter的安装与环境配置

一、下载安装Futter&#xff1a; 1、Flutter中文文档&#xff1a; 安装和环境配置 - Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 2、下载 Futter SDK&#xff1a; Flutter中文文档 里面有&#xff0c;下载完成之后找个文件夹解压出来&#xff0c;最好不要将 Flu…