25.Light光源组件参数和代码控制

25.核心系统-光源系统-光源组件


25.1 知识点

在资源商店下载标准资源Standard Assets for Unity,选择一些光源资源导入用作示例使用

光源组件信息


Type 光源类型

  1. Directional 方向光
  2. Spot 聚光灯
    • 类似于手电筒
    • Range 范围:发光范围距离
    • Spot Angle 光锥角度
  3. Point 点光源
    • 类似于小灯泡的感觉
  4. Area 面光源

Color 光源颜色

Mode 光源模式

  1. Realtime 实时光源:每帧实时计算,效果好,性能消耗大
  2. Baked 烘焙光源:事先计算好,无法动态变化
  3. Mixed 混合光源:预先计算+实时运算

Intensity 光源强度

Indirect Multiplier 间接系数

  • 改变间接光的强度
  • 低于1,每次反弹会使光更暗
  • 大于1,每次反弹会使光更亮

Shadow Type 阴影类型

  1. NoShadows 关闭阴影
  2. HardShadows 生硬阴影
  3. SoftShadows 柔和阴影

Realtime Shadows 实时阴影

  1. Strength 强度: 阴影暗度 0~1之间,越大越黑
  2. Resolution 分辨率: 阴影贴图渲染分辨率,越高越逼真,消耗越高
  3. Bias 偏离: 阴影推离光源的距离
  4. Normal Bias 法线偏离: 阴影投射面沿法线收缩距离
  5. Near Panel 近平面: 渲染阴影的近裁剪面
  • 投影遮罩: 一般用于聚光灯,显示图案

Draw Halo 绘制光晕

  • 球形光环开关
  • 可以用于蜡烛等效果

Flare 眩光

  • 耀斑
  • 有点类似于太阳耀斑效果
  • 想要在Game窗口看到耀斑要在摄像机上加FlareLayer脚本

Render Mode 渲染模式

  1. Auto 自动: 运行时确定
  2. Important 重要: 以像素质量为单位进行渲染,效果逼真,消耗大
  3. 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

×

喜欢就点赞,疼爱就打赏