当前位置: 首页 > article >正文

【零基础入门unity游戏开发——unity3D篇】URP 3D光源组件(Light)介绍、烘培灯光、实现太阳耀斑镜头光晕效果(基于unity6开发介绍)

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇

  • 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的同学入门。
  • 【unity通用篇】:主要讲解unity的基础通用的知识,包括unity界面、unity脚本、unity资源管理、unity动画、unity摄像机等,适合unity初学者入门。
  • 【unity3D篇】:主要讲解unity3D的知识,unity3D角色、unity3D物理系统、unity3D光照等,适合只想做2D游戏的开发者学习。
  • 【unity2D篇】unity2D篇:主要讲解unity2D的知识,包括unity2D角色、unity2D物理系统、unity2D光照等,适合只想做3D游戏的开发者学习。

这样方便大家按需选择性的去学习,比如有编程基础的大概率可以直接从unity通用篇开始入门,没有编程基础的建议从C#篇开始学习。只想做2D游戏的话,可以直接从unity2D篇开始学习,3D篇大概率就不需要看了,节约学习时间成本。

文章目录

  • 一、新建3D灯光
  • 二、Universal Additional Light Data(脚本)
  • 三、URP Light灯光组件参数介绍
    • 1、常规
      • 1.1 类型(Type)
      • 1.2 模式(Mode)
    • 2、形状(Shape)
      • 2.1 内部/外部聚光灯角度(Inner/Outer Spot Angle)
      • 2.2 形状(Shape)
    • 3、发射
      • 3.1 光源外观(Light Apperance)
      • 3.2 颜色(Color)
      • 3.3 强度(Intensity)
      • 3.4 间接乘数(Indirect Multiplier)
      • 3.5 剪影(Cookie )
        • (1)定向光+剪影(Cookie )
        • (2)聚光灯+剪影(Cookie )
        • (3)点光源+剪影(Cookie )
        • (4)区域灯光不支持剪影(Cookie )效果
      • 3.6 范围
    • 4、渲染(Rendering )
      • 4.1 渲染层(Rendering Layers)
      • 4.2 剔除遮罩(Culling Mask)
    • 5、阴影(Shadow)
      • 5.1 阴影类型(Shadow Type)
      • 5.2 投射阴影(Cast Shadows)
  • 四、代码操作
    • 1、获取灯光
    • 2、获取和设置摄像机的参数
  • 五、烘培灯光
  • 六、Lens Flare (SRP) 组件实现太阳耀斑镜头光晕效果
  • 专栏推荐
  • 完结

一、新建3D灯光

在这里插入图片描述
本章我们注意研究的是定向光、点光源、聚光灯、区域光这几种光源

反射探测器、自适应探针体积、探针调节体积、光照探测组更像是灯光的优化内容,它们的使用以及包括灯光的烘培,都可以参考我之前写的这篇文章:【unity小技巧】一些unity3D灯光的使用与渲染及性能优化方案

二、Universal Additional Light Data(脚本)

在这里插入图片描述
Universal Additional Light Data 组件是通用渲染管线 (URP) 用于内部数据存储的组件。Universal Additional Light Data 组件允许 URP 扩展和覆盖 Unity 标准 Light 组件的功能。

在 URP 中,具有 Light 组件的游戏对象还必须具有 Universal Additional Light Data 组件。如果项目使用 URP,Unity 会在您创建光源游戏对象时自动添加 Universal Additional Light Data 组件。不能从光源游戏对象上移除 Universal Additional Light Data 组件。

三、URP Light灯光组件参数介绍

注意:这里参数看看很多很复杂,但是我会把我认为重要的内容标红,前期只要注意我标红的内容即可,后面遇到问题了可以再回头来查看。

1、常规

1.1 类型(Type)

灯光可以直接创建出对应的类型,也可以在这里进行切换
在这里插入图片描述

  • 聚光灯(Spot):模拟手电筒效果。
  • 定向光(Directional):也叫方向光、环境光、平行光。模拟大自然太阳光效果。
  • 点光源(Point):模拟蜡烛灯泡的效果。
  • 区域光(Area):也叫面光源(仅可烘培使用)。模拟一个范围的灯光效果,比如电视机这种灯光。该类型的光源无法应用于实时光照,仅适用于光照贴图烘焙,它只能作用于静态物体,通过烘焙来生成光照贴图,从而减少了性能的开销

1.2 模式(Mode)

在这里插入图片描述

  • 实时光源(Realtime):每帧实时计算,效果好,性能消耗大。
  • 混合光源(Mixed):预先计算+实时运算。
  • 烘焙光源(Baked):事先计算好,无法动态变化。区域光仅支持烘焙光源。

2、形状(Shape)

2.1 内部/外部聚光灯角度(Inner/Outer Spot Angle)

聚光灯圆锥体底部的内角和外角(以度为单位)(仅限聚光灯)。
在这里插入图片描述

避免将 Outer Spot Angle(外部聚光灯角度) 属性设置为过高的值(例如,高于 160 度)。非常高的外部聚光灯角度值会导致 Unity 将阴影贴图分布在大面积区域,从而降低阴影质量。

2.2 形状(Shape)

控制区域光的形状(仅区域光有)
在这里插入图片描述

  • 矩形(Rectangle)
  • 圆盘(Disc )

3、发射

3.1 光源外观(Light Apperance)

在这里插入图片描述

  • 颜色(Color):控制灯光的颜色
    在这里插入图片描述
  • 过滤器和温度(Filter and Temperature)
    在这里插入图片描述
    • 过滤器(Filter ): 光源的色调颜色。使用颜色滑块设置此属性。
    • 温度(Temperature): 光的温度 (以开尔文为单位)。使用滑块设置此属性或输入特定值。

3.2 颜色(Color)

注: 仅当“Light Apperance”设置为“Color”时,此属性才可用。

3.3 强度(Intensity)

控制灯光亮度

3.4 间接乘数(Indirect Multiplier)

改变间接光的强度。

  • 低于1,反射的光会随着每次反射而变暗
  • 大于1,会使每次反射时光线更亮

例如,当阴影中的黑暗表面(如洞穴内部)需要更亮以使细节可见时,这非常有用。

想要限制单个实时光源,使其仅发射直接光,不反射光,请将其 Indirect Multiplier (间接乘数) 设置为 0。

注意:只有定向光才支特实时接反射阴影。如果是非定向光,模式又选了实时光源,要设置间接乘数=0,不然会报警告。
在这里插入图片描述

3.5 剪影(Cookie )

此光源投影到场景中的 RGB 纹理。使用剪影创建剪影或图案照明。实现类似投影仪的效果。

(1)定向光+剪影(Cookie )

我们可以随便拖入一张图片进unity,设置图片纹理类型为剪影(Cookie ),并且alpha 源(alpha source)要选择从灰度(from gray scale);
在这里插入图片描述

选择灯光拖入剪影图片即可
在这里插入图片描述
效果
在这里插入图片描述

这里图片我是随便找的,实际上可以实现类似树叶水底光影斑驳的效果
在这里插入图片描述

(2)聚光灯+剪影(Cookie )

同上修改图片配置,设置图片纹理类型为剪影(Cookie ),并且alpha 源(alpha source)要选择从灰度(from gray scale);

不过这里要注意聚光灯使用的剪影(Cookie )图片的长宽要相等,不然会报错:Spotlight cookies must be square (width and height must be equal)
在这里插入图片描述
在这里插入图片描述
可以实现类似光透过窗户照在地面上的效果或者投影仪的效果
在这里插入图片描述

(3)点光源+剪影(Cookie )

不再是剪影(Cookie )格式的图片,而是要立方体贴图,将图片属性中的纹理形状(texture sharp )从2d变成立方体(cube),并且alpha 源(alpha source)要选择从灰度(from gray scale);
在这里插入图片描述
效果
在这里插入图片描述
可以实现类似灯光透视物体的阴影效果
在这里插入图片描述

(4)区域灯光不支持剪影(Cookie )效果

3.6 范围

定义从对象中心发射的光的传播距离(仅限点光源和聚光灯)。
在这里插入图片描述

4、渲染(Rendering )

4.1 渲染层(Rendering Layers)

设置光源应用于哪些渲染层。
在这里插入图片描述
注: 仅当 Mode 设置为 Realtime 或 Mixed 时,此属性才可用。

4.2 剔除遮罩(Culling Mask)

在这里插入图片描述

5、阴影(Shadow)

5.1 阴影类型(Shadow Type)

在这里插入图片描述

  • 无阴影NoShadows
  • 硬阴影HardShadows
  • 软阴影SoftShadows

5.2 投射阴影(Cast Shadows)

指定是软阴影还是无阴影,将被光照投射。 仅区域光有
在这里插入图片描述

四、代码操作

实际开发中,其实我们很少用代码来修改灯光,作为了解即可

1、获取灯光

通过前面学习的组件知识获取

比如直接通过挂载灯光获取

public Light sceneLight;

比如通过组件类型获取

Light sceneLight = GetComponent<Light>();

2、获取和设置摄像机的参数

界面上的参数基本都可以在Light中获取到

比如

//修改现有灯光的属性
sceneLight.color = Color.red;  // 设置灯光颜色为红色
sceneLight.intensity = 2.0f;   // 增加光照强度
sceneLight.shadows = LightShadows.Soft;  // 设置阴影类型
sceneLight.type = LightType.Spot;// 切换到聚光灯

URP灯光的特有的字段都包含在UniversalAdditionalLightData组件里了,所以我们可以通过UniversalAdditionalLightData进行修改。

比如

//控制软阴影的过滤质量。质量越高,性能就越低。 
sceneLight.GetUniversalAdditionalLightData().softShadowQuality = SoftShadowQuality.High;

五、烘培灯光

这里我们选择区域灯光进行烘培举例说明即可
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
结果
在这里插入图片描述
查看场景的灯光烘焙信息
在这里插入图片描述
烘焙后,灯光信息已经保存了,就算把灯光隐藏或者删除都不影响灯光的显示
在这里插入图片描述

六、Lens Flare (SRP) 组件实现太阳耀斑镜头光晕效果

在这里插入图片描述
Unity 的可编程渲染管线 (SRP) 包括 Lens Flare (SRP) 组件,该组件可在场景中渲染镜头光晕。这是 SRP 中与内置渲染管线的 Lens Flare 组件(该组件与 SRP 不兼容)等效的组件。可以将 Lens Flare (SRP) 组件附加到任何游戏对象,但某些属性仅在 Lens Flare (SRP) 组件附加到光源时才会出现。
在这里插入图片描述

属性英文描述
镜头光晕数据Lens Flare Data选择此组件控制的 Lens Flare (SRP) Data 资源。
强度Intensity使镜头光晕的强度倍增。
缩放Scale使镜头光晕的缩放倍增。
光覆盖指定在镜头光导元素上使用"Modulate By Light Color’"或"Attenuation By Light Shape"同性时,获取颜色和形状值的光组件。如果未指定任何内容,则使用此游戏对象的光组件。
按光源形状衰减Attenuation by Light Shape启用此属性可根据此组件附加到的光源类型自动更改镜头光晕的外观。例如,如果此组件附加到聚光灯并且摄像机从后面观察此光源,则镜头光晕将不可见。仅当此组件附加到光源时,此属性才可用。
衰减距离Attenuation DistanceAttenuation Distance Curve 的起点和终点之间的距离。该值介于 0 到 1 范围内(以世界空间表示)。
衰减距离曲线Attenuation Distance Curve使在此资源附加到的游戏对象和摄像机之间的距离上淡出镜头光晕的外观。。
缩放距离Scale DistanceScale Distance Curve 的起点和终点之间的距离。该值介于 0 到 1 范围内(以世界空间表示)。
缩放距离曲线Scale Distance Curve在此资源附加到的游戏对象和摄像机之间的距离上更改镜头光晕的大小。
屏幕衰减曲线Screen Attenuation Curve使根据与屏幕边缘的距离减轻镜头光晕的影响。可用于显示屏幕边缘的镜头光晕。
开幕空间遮挡Occlusion Enable使启用此属性可根据深度缓冲区对镜头光晕进行部分遮挡。
允许离屏Allow Off Screen启用此属性可允许摄像机视野外的镜头光晕影响当前视野。

专栏推荐

地址
【零基础入门unity游戏开发——C#篇】
【零基础入门unity游戏开发——unity通用篇】
【零基础入门unity游戏开发——unity3D篇】
【零基础入门unity游戏开发——unity2D篇】
【制作100个Unity游戏】
【推荐100个unity插件】
【实现100个unity特效】
【unity框架/工具集开发】

完结

好了,我是向宇,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!
在这里插入图片描述


http://www.kler.cn/a/504917.html

相关文章:

  • abap安装cl_json类
  • 【Rust自学】12.6. 使用TDD(测试驱动开发)开发库功能
  • Java语言的正则表达式
  • 目标检测中的Bounding Box(边界框)介绍:定义以及不同表示方式
  • Facebook 隐私变革之路:回顾与展望
  • nginx-lua模块安装
  • 高等数学学习笔记 ☞ 不定积分与积分公式
  • JavaScript this、回调函数、事件流
  • 电脑电源灯一闪一闪开不了机 原因分析
  • 确保使用爬虫技术时的合法性
  • MAC上安装Octave
  • Kotlin实现DataBinding结合ViewModel的时候,提示找不到Unresolved reference: BR解决方案
  • [完整指南]如何轻松备份锁定/禁用的iPhone?
  • Mysql--实战篇--SQL优化(查询优化器,常用的SQL优化方法,执行计划EXPLAIN,Mysql性能调优,慢日志开启和分析等)
  • 【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据...本篇介绍为什么self-attention可以堆叠多层,这有什么作用?
  • 《机器学习》——sklearn库中CountVectorizer方法(词频矩阵)
  • Ubuntu Server 24.04 配置静态IP
  • React-useState讲解
  • 软考信安22~网站安全需求分析与安全保护工程
  • CCLINKIE转ModbusTCP网关,助机器人“掀起”工业智能的“惊涛骇浪”
  • 如何运行Pytest(python -m pytest 与 pytest详解)
  • 网络精英赛模拟练习
  • Oracle 学习全攻略
  • ElasticSearch-Nested 类型与 Object 类型的区别
  • 交叉编译avahi到aarch64平台
  • iOS - 内存屏障的使用场景