Unity中的基础光照笔记

这篇具有很好参考价值的文章主要介绍了Unity中的基础光照笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基础光照

辐照度

用辐照度量化光
辐照度是和照射到物体表面时光线之间的距离 d/cosθ 成反比的,和cosθ成正比。Unity中的基础光照笔记,Shader,unity,笔记,游戏引擎

吸收和散射

散射只改变光线的方向,但不改变光线的密度和颜色。
吸收只改变光线的密度和颜色,但不改变光线的方向。

光线在物体表面经过散射后,有两种方向:

  • 一种将会散射到物体内部,这种现象被称为折射(refraction)透射(transmission)
  • 另一种将会散射到外部,这种现象被称为反射(reflection)

对于不透明物体,折射进入物体内部的光线会继续与内部的颗粒进行相交其中一些光线最后会重新发射出物体表面,而另一些则被物体吸收。那些从物体表面重新发射出的光线将具有和入射光线不同的方向分布和颜色。Unity中的基础光照笔记,Shader,unity,笔记,游戏引擎

不同的散射方向在光照模型中用不同的部分进行计算:

  • **高光反射(specular)**部分表示物体表面是如何反射光线的;
  • **漫反射(diffuse)**部分则表示有多少光线会被折射、吸收和散射出表面。

根据入射光线的数量和方向,我们可以计算出射光线的数量和方向,我们通常使用 出射度(exitance)来描述它;
辐照度和出射度之间是满足线性关系的,而它们之间的比值就是
材质的漫反射和高光反射属性

着色

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

BRDF光照模型

**BRDF(Bidirectional Reflectance Distribution Function)**回答了当光线从某个方向照射到一个表面时有多少光照被反射,反射的方向有哪些的问题。当给定模型表面上的一个点时,BRDF 包含了对该点外观的完整的描述;
图形学中 BRDF 大多使用一个数学公式来表示,并且提供了一些参数来调整材质属性。通俗来讲,当给定入射光线的方向和辐照度后,BRDF 可以给出在某个出射方向上的光照能量分布;
BRDF 都是对真实场景进行理想化和简化后的模型,也就是说,它们并不能真实地反映物体和光线之间的交互,这些光照模型被称为是经验模型;
也可以实现基于物理的 BRDF 模型可以更加真地模拟光和物体的交互。

标准光照模型

BRDF 理论被提出前,标准光照模型已经被广泛使用;
标准光照模型:只关心直接光照(direct light),也就是直接从光源发射出来照射到物体表面后,经过物体表面的一次反射直接进入摄像机的光线;
标准光照模型基本方法:进入摄像机的光线分为四种,每个部分使用一种方法来计算它的贡献度;

  • 自发光(emissive)cemissive,这个部分用于描述当给定一个方向时一个表面本身会向该方向发射多少辐射量。需要注意的是,如果没有使用 全局光照(global illumination)技术,这些自发光的表面并不会真的照亮周围的物体,而是它本身看起来更亮了而已;
  • 高光反射(specular)cspecular,这个部分用于描述当光线从光源照射到模型表面时,该表面会在完全镜面反射方向散射多少辐射量;
  • 漫反射(diffuse)cdiffuse,这个部分用于描述,当光线从光源照射到模型表面时,该表面会向每个方向散射多少辐射量;
  • 环境光(ambient)cambient,它用于描述其他所有的间接光照。

环境光

虽然标准光照模型的重点在于描述直接光照,但在真实的世界中,物体也可以被**间接光照(indirect light)**所照亮;
间接光照:光线通常会在多个物体之间反射,最后进入摄像机,也就是说,在光线进入摄像机之前,经过了不止一次的物体反射;
在标准光照模型中,使用了一种被称为环境光的部分来近似模拟间接光照。环境光的计算非常简单,它通常是一个全局变量,即场景中的所有物体都使用这个环境光。cambient = gambient 等式给出了计算环境光的部分。

自发光

光线直接由光源进入摄像机不经过任何物体的反射。标准光照模型使用自发光来计算这部分的贡献度,直接使用该材质的自发光颜色:cemissive = memissive
通常在实时渲染中,自发光的表面不会照亮周围的表面,也就是说,这个物体并不会被当成一个光源。Unity5引入的全新的全局光照系统则可以模拟这类自发光物体对周围物体的影响。

漫反射

用于对那些被物体表面随机散射到各个方向的辐射度进行建模的。在漫反射中视角的位置是不重要的,因为反射是完全随机的,因此可以认为在任何反射方向上的分布都是样的。但是,入射光线的角度很重要。
漫反射光照符合兰伯特定律(Lambert’s law):反射光线的强度与表面法线和光源方向之间夹角的余弦值成正比。
漫反射部分的计算:cdiffuse = (clight· mdiffuse)max(0,n · I);
n 是表面法线,I 是指向光源的单位矢量,mdiffuse 是材质的漫反射颜色,clight 是光源颜色。
注:需要防止法线和光源方向点乘的结果为负值,使用最大值的函数来将其截取到0,这可以防止物体被后面来的光源照亮。

高光反射

是一种经验模型,不完全符合真实世界的高光反射现象。
可用于计算那些沿着完全镜面反射方向被反射的光线,这可以让物体看起来是由光泽的,如金属材质。
高光反射需要知道信息较多,如表面法线、视觉方向、光源方向、反射方向等,反射方向可以通过其他信息计算得到:r = 2( n ^ \widehat{n} n · I) n ^ \widehat{n} n -I
Unity中的基础光照笔记,Shader,unity,笔记,游戏引擎
利用Phong模型计算高光反射部分:cspecular = (clight· mspecular)max(0, v ^ \widehat{v} v · r)mgloss

mgloss 材质的光泽度(gloss),也被称为反光度(shininess)。用于控制高光区域的亮点有多宽,和亮点成反比。mspecular 材质的高光反射颜色,控制材质对高光反射的强度和颜色。clight 光源的颜色和强度。 v ^ \widehat{v} v · r结果不能为负数。

Unity中的基础光照笔记,Shader,unity,笔记,游戏引擎
Blinn模型基本思想,避免计算反方向** r ^ \widehat{r} r 。引入新矢量 h ^ \widehat{h} h **: h ^ = v ^ + I ∣ v ^ + I ∣ \widehat{h}=\frac{\widehat{v} + I}{|\widehat{v} + I|} h =v +Iv +I
Blinn模型公式:cspecular = (clight· mspecular)max(0, n ^ \widehat{n} n · h ^ \widehat{h} h )mgloss
在硬件实现时,如果摄像机和光源距离模型足够远的话,Blinn模型会快于Phong模型。因为,此时可以认为 v ^ \widehat{v} v I ^ \widehat{I} I 都是定制,因此 h ^ \widehat{h} h 将是一个常量。但 v ^ \widehat{v} v 或者 I ^ \widehat{I} I 不是定值时,Phong模型可能更快。两种模型都是经验模型,在一些情况下Blinn模型更符合实验结果。

逐像素还是逐顶点

逐像素光照(per-pixel lighting):在片元着色器中计算,以每个像素为基础,得到它的法线(可以是对顶点法线插值得到的,也可以是从法线纹理中采样得到的),然后进行光照模型的计算。这种在面片之间对顶点法线进行插值的技术被称为Phong着色(Phong shading),也被称为Phong插值或法线插值着色技术。这不同于我们之前讲到的 Phong 光照模型;
逐顶点光照(per-vertex lighting):在顶点着色器中计算,也被称为高洛德着色(Gouraud shading),在每个顶点上计算光照,然后会在渲染图元内部进行线性插值,最后输出成像素颜色。由于顶点数目往往远小于像素数目,因此逐顶点光照的计算量往往要小于逐像素光照。但是,由于逐顶点光照依赖于线性插值来得到像素光照,因此,当光照模型中有非线性的计算(例如计算高光反射时)时,逐顶点光照就会出问题。文章来源地址https://www.toymoban.com/news/detail-811302.html

到了这里,关于Unity中的基础光照笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity引擎光照烘焙

    一、先将系统中的光源去掉,会发现场景还是亮的。将天空环境光去掉(Windows- Rendering-Lighting) 将Environment Lighting, Environment Reflections设置为0.    二、创建一个简单的点光源 模拟大方块照出的光可以将光源拖到方块前面的位置。  其中有三个光源,PointLight是模拟大方块照亮

    2024年02月16日
    浏览(28)
  • Shader实战(1):Unity中使物体不受光照影响(不区分明暗面)

    目录 前言 一、原场景效果 二、操作流程 三、效果演示 在做项目时碰到需要在一个有光照场景中使某一个模型不受光照影响,即不区分明暗面,因此本文记录如何修改shader使模型在有光照的情况下不区分明暗面。 一开始本人尝试将贴图设置为自发光材质,但是仔细观察发现

    2024年02月11日
    浏览(30)
  • 【GAMES-104现代游戏引擎】4、引擎渲染基础(渲染基础数据、全局光照、PBR、阴影)

    游戏渲染的挑战 一个场景包含成千上万的GO需要的材质、shader、效果都不尽相同,因此 复杂度极高 当代各种硬件的适配难度高,硬件架构一直在变化 高帧率、高分辨率的要求下,使得绘制算法绘制一帧的时间越来越短, 算法效率要求高 绘制系统可以100%的使用显卡,但CPU只

    2023年04月09日
    浏览(40)
  • Unity Physics2D 2d物理引擎游戏 笔记

    2d 材质 里面可以设置 摩擦力 和 弹力 Simulated:是否在当前的物理环境中模拟,取消勾选该框类似于Disable Rigidbody,但使用这个参数更加高效,因为Disable会销毁内部产生的GameObject,而取消勾选Simulated只是禁用。 Kinematic 动力学刚体 动力学刚体不受重力和力的影响,而受用户的

    2023年04月24日
    浏览(102)
  • Unity游戏图形学 Shader结构

    openGL:SLG跨平台 =GLSL:openGL shaderlauguge DX:微软开发,性能很好,但是不能跨平台 =HLSL:high level shader language CG:微软和Nvidia公司联合开发,跨平台,基于c语言开发,性能很好 openGL、dx、cg都包含 CG和HLSL包括在 CGPROGRAM...ENDCG 语法快内 GLSL包括在 GLSLPROGRAM...ENDGLSL 语法快内 自己

    2024年02月01日
    浏览(35)
  • Unity基础学习——光照系统

    Global Illumination简称GI,即全局光照。 能够计算直接光、间接光、环境光以及反射光的光照系统。 通过GI算法可以使渲染出来的光照效果更为真实丰富。 直接光 Type类型:灯光对象的当前类型: Directional Light 平行光:平行发射光线,可以照射场景里所有物体,用于模拟太阳。

    2024年02月06日
    浏览(23)
  • 【Unity】光照烘培-基础参数-基础设置

    Unity 2020.3.25 打开灯光面板 Wingdow -》 Rendering - Lighting Lighting Settings 灯光设置文件 Realtime Lighting Realtime Global lllumin Realtime Environme Mixed Lighting Baked Global lllumin Lighting Mode Baked Indirect Subtractive Shadowmask Lightmapping Settings Lightmapper Progressive CPU Ambient Occlusion 还需要勾选环境遮蔽(Ambient O

    2024年01月23日
    浏览(35)
  • Unity学习笔记---2D光照渲染、美术、动画

    Unity 提供三个渲染管线 :一个内置渲染管线和两个可编程渲染管线 (SRP)。两个 SRP 为通用渲染管线 (URP) 和高清渲染管线 (HDRP)。URP 适用于所有平台,而 HDRP 则 旨在用于针对高端 PC 和主机的游戏。 注意 :如果在 Unity 2021 或更高版本中启动一个新项目,则称为 2D (U

    2024年02月09日
    浏览(29)
  • Unity | HDRP高清渲染管线学习笔记:Lightmapping(光照烘焙)与Lightmap(光照贴图)

    目录 相关概念 1.渐进式光照贴图烘焙 1.1 渐进式光照贴图烘焙对模型的要求 1.2 渐进式光照贴图烘焙对硬件的要求 1.3 渐进式光照贴图烘焙支持的Unity渲染管线 1.4 进行渐进式光照贴图烘焙结果 1.5 渐进式光照贴图烘焙的CPU版本和GPU版本 1.6 Lighting窗口Lightmapping Settings参数介绍

    2024年02月11日
    浏览(44)
  • Unity | Shader基础知识(第一集:unity中最简单的shader)

    目录 一、unity的shader 二、创建一个shader(在创建时,选前三种都可以) 三、内容解读 1.shader一直都在 2.我们写shader在写什么 四、没有被干预的shader(最简单的shader) 相关阅读 编写着色器概述 - Unity 手册 一、unity的shader unity写的shader并不是真正意义上的shader。 官方解释:

    2024年02月04日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包