考虑到每个人基础可能不一样,且并不是所有人都有同时做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灯光
本章我们注意研究的是定向光、点光源、聚光灯、区域光
这几种光源
反射探测器、自适应探针体积、探针调节体积、光照探测组更像是灯光的优化内容,它们的使用以及包括灯光的烘培,都可以参考我之前写的这篇文章:【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 Distance | Attenuation Distance Curve 的起点和终点之间的距离。该值介于 0 到 1 范围内(以世界空间表示)。 |
衰减距离曲线 | Attenuation Distance Curve | 使在此资源附加到的游戏对象和摄像机之间的距离上淡出镜头光晕的外观。。 |
缩放距离 | Scale Distance | Scale 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,如果学习过程中遇到任何问题,也欢迎你评论私信找我。
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!