25.核心系统-光源系统-光源组件
25.1 知识点
在资源商店下载标准资源Standard Assets for Unity,选择一些光源资源导入用作示例使用
光源组件信息
Type 光源类型
- Directional 方向光
- Spot 聚光灯
- 类似于手电筒
- Range 范围:发光范围距离
- Spot Angle 光锥角度
- Point 点光源
- 类似于小灯泡的感觉
- Area 面光源
Color 光源颜色
Mode 光源模式
- Realtime 实时光源:每帧实时计算,效果好,性能消耗大
- Baked 烘焙光源:事先计算好,无法动态变化
- Mixed 混合光源:预先计算+实时运算
Intensity 光源强度
Indirect Multiplier 间接系数
- 改变间接光的强度
- 低于1,每次反弹会使光更暗
- 大于1,每次反弹会使光更亮
Shadow Type 阴影类型
- NoShadows 关闭阴影
- HardShadows 生硬阴影
- SoftShadows 柔和阴影
Realtime Shadows 实时阴影
- Strength 强度: 阴影暗度 0~1之间,越大越黑
- Resolution 分辨率: 阴影贴图渲染分辨率,越高越逼真,消耗越高
- Bias 偏离: 阴影推离光源的距离
- Normal Bias 法线偏离: 阴影投射面沿法线收缩距离
- Near Panel 近平面: 渲染阴影的近裁剪面
Cookie 剪影
- 投影遮罩: 一般用于聚光灯,显示图案
Cookie Size 剪影大小
Draw Halo 绘制光晕
- 球形光环开关
- 可以用于蜡烛等效果
Flare 眩光
- 耀斑
- 有点类似于太阳耀斑效果
- 想要在Game窗口看到耀斑要在摄像机上加FlareLayer脚本
Render Mode 渲染模式
- Auto 自动: 运行时确定
- Important 重要: 以像素质量为单位进行渲染,效果逼真,消耗大
- Not Important 非重要: 以快速模式进行渲染
Culling Mask 剔除遮罩
- 剔除遮罩层,决定哪些层的对象受到该光源影响
光源代码控制
- 可以去官方API里看 更具体 不一一列举
intensity变量 光照强度
// 光的强度乘以光颜色。
light.intensity = 0.5f;
25.2 知识点代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson25_光源系统基础_光源组件 : MonoBehaviour
{
public Light light;
void Start()
{
#region 知识点一 光源组件信息
#endregion
#region 知识点二 光源代码控制
//可以去官方API里看 更具体 不一一列举
//intensity变量 光照强度
//光的强度乘以光颜色。
light.intensity = 0.5f;
#endregion
}
}
25.3 练习题
通过代码结合点光源,模拟一个蜡烛的光源效果
创建一个点光源,不停的跳转点光源位置和强度
// 变量
public Light light;
public float moveSpeed = 10;
public float flashSpeed = 10;
// Update内
// 来回横跳
light.transform.Translate(Vector3.right * moveSpeed * Time.deltaTime);
if (light.transform.position.x >= 1)
moveSpeed = -moveSpeed;
else if (light.transform.position.x <= 0.8f)
moveSpeed = -moveSpeed;
// 闪一闪
light.intensity += flashSpeed * Time.deltaTime;
if (light.intensity >= 1)
flashSpeed = -flashSpeed;
else if (light.intensity <= 0.5f)
flashSpeed = -flashSpeed;
通过代码结合方向光,模拟白天黑夜的变化
一直改变方向光角度,比直接改强度更方便
// 变量
public Transform lightTransform;
public float rotateSpeed = 10;
// Update内
// 改变方向光角度
lightTransform.Rotate(Vector3.right, rotateSpeed * Time.deltaTime);
25.4 练习题代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson25_练习题 : MonoBehaviour
{
#region 练习题一
//变量
public Light light;
public float moveSpeed = 10;
public float flashSpeed = 10;
#endregion
#region 练习题二
//变量
public Transform lightTransform;
public float rotateSpeed = 10;
#endregion
void Update()
{
#region 练习题一
//1.通过代码结合点光源
//模拟一个蜡烛的光源效果
//Update内
//来回横跳
light.transform.Translate(Vector3.right * moveSpeed * Time.deltaTime);
if (light.transform.position.x >= 1)
moveSpeed = -moveSpeed;
else if (light.transform.position.x <= 0.8f)
moveSpeed = -moveSpeed;
//闪一闪
light.intensity += flashSpeed * Time.deltaTime;
if (light.intensity >= 1)
flashSpeed = -flashSpeed;
else if (light.intensity <= 0.5f)
flashSpeed = -flashSpeed;
#endregion
#region 练习题二
//2.通过代码结合方向光
//模拟白天黑夜的变化
//Update内
//改变方向光角度
lightTransform.Rotate(Vector3.right, rotateSpeed * Time.deltaTime);
#endregion
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com