Unity(URP渲染管线)的后处理、动画制作、虚拟相机(Virtual Camera)

一、URP渲染管线

渲染管线是一系列渲染操作的集合,Unity提供了 内置渲染管线(Built-In)**和可编程渲染管线(SRP)两类渲染管线 。内置渲染管线是Unity的默认渲染管线,其自定义选项有限。而可编程渲染管线可以通过脚本代码定制化管线** ,允许用户更多地控制渲染流程。搭建一个完整的渲染管线工作量巨大,为了简化用户的自定义开发流程,Unity提供了URP和HDRP两种SRP的模板。三种管线均可在不同平台上进行开发,其适用平台对比如下:

URP与内置管线对比

URP概述

Universal Render Pipeline (URP,通用渲染管线)是Unity推出的轻量级、高性能渲染管线解决方案,适用于移动平台、PC和主机等多种平台。

URP核心特点

  • 跨平台支持:针对不同硬件自动优化

  • 模块化设计:可扩展的渲染功能

  • 性能优化:相比内置渲染管线有更好的性能表现

  • Shader兼容性:使用Shader Graph创建可视化Shader

URP核心组件

**1. Shader(着色器):**定义物体外观,URP有内置Shader,也可用Shader Graph自定义。

**2. Renderer(渲染器):**控制物体渲染方式,支持前向和延迟渲染模式。

**3. Render Pipeline Asset(渲染管线资源):**配置全局渲染设置,如光照、阴影、后处理。

**4. Light(光源):**提供光照效果,支持多种类型,可配置阴影。

**5. Material(材质):**定义物体表面属性,如颜色、纹理,与Shader配合。

**6. Camera(摄像机):**定义视角和渲染范围,可设置后处理效果。

**7. Post-Processing(后处理):**增强图像效果,如景深、抗锯齿、色调映射。

**8. Scriptable Render Feature(可编程渲染特性):**通过脚本扩展渲染功能。

**9. Renderer Feature(渲染特性):**定义特定渲染任务,如阴影渲染。

**10. Lightmap(光照贴图):**存储静态光照信息,提高渲染性能。

二、后处理

使用的组件:volum

属性:

1. Tonemapping(色调映射):

这个属性用来调整图像的亮度和对比度。你可以想象它就像是一个滤镜,可以让图像看起来更亮或者更暗,颜色更鲜艳或者更柔和。

2. Color Adjustments(颜色调整):

这个属性用来改变图像的颜色。你可以调整对比度、饱和度等,让颜色看起来更丰富或者更平淡。比如,增加饱和度可以让颜色更鲜艳,减少饱和度则会让颜色看起来更灰暗。

3. Bloom(泛光):

泛光是用来模拟光线散射的效果,比如当你看一个明亮的光源时,光线会在物体边缘产生一种模糊的光晕。这个属性可以增强这种效果,让图像看起来更真实或者更有艺术感。

**1)Lens Dirt(镜头污垢):**这个属性模拟的是镜头上的污垢或划痕对图像的影响。你可以添加一些纹理,让图像看起来像是通过一个脏镜头拍摄的,增加一些真实感或者特定的视觉效果。

4. Vignette(暗角):

角效果是指图像的四个角落变暗,而中间部分保持明亮。这种效果常用于电影和摄影中,可以引导观众的视线集中在图像的中心。

三、角色控制器

代码:

cs 复制代码
private void Update() {
    Vector2 inputVector = new Vector2(0, 0);

    if (Input.GetKey(KeyCode.W)) {
        inputVector.y = +1;
    }
    if (Input.GetKey(KeyCode.S)) {
        inputVector.y = -1;
    }
    if (Input.GetKey(KeyCode.A)) {
        inputVector.x = -1;
    }
    if (Input.GetKey(KeyCode.D)) {
        inputVector.x = +1;
    }

    inputVector = inputVector.normalized;

    //创建一个三维向量moveDir,它的X和Z分量由inputVector决定,Y分量始终为0(因为我们只在水平面上移动)
    Vector3 moveDir =new Vector3(inputVector.x,0f,inputVector.y);
//根据moveDir向量、移动速度moveSpeed和时间间隔Time.deltaTime来更新游戏对象的位置.Time.deltaTime确保移动速度不受帧率的影响
    transform.position += moveDir * moveSpeed * Time.deltaTime;
    Slerp球面线性插值:两个向量之间进行平滑过渡的方法,特别适用于处理方向和旋转。
//拓展:Lerp线性插值:适用于不需要考虑方向的插值,如颜色渐变或非方向性属性的平滑过渡。
    transform.forward = Vector3.Slerp(transform.forward, moveDir, Time.deltaTime);
}

四、动画制作Animations

Animations(动画剪辑)

Animation 是单个动画的文件,它包含了一系列的图片(帧),这些图片快速播放时,就形成了动画效果。你可以把它想象成动画片里的一帧帧一帧的画。

  • 动画剪辑:一个 Animation 文件就是一个动画剪辑,它定义了角色或物体的一系列动作。
  • 动画文件:通常是 .anim 格式的文件,里面包含了角色的一系列动作。
Animator(动画控制器)

Animator 是一个组件,它就像是一个动画的大脑。它控制着游戏对象如何根据玩家的操作或者游戏逻辑来播放不同的动画。比如,一个角色走路、跑步、跳跃或者攻击时, Animator 会决定播放哪个动画。

  • 动画状态: Animator 里面有很多状态,每个状态对应一个动画,比如Idle(站立不动)、Walk(走路)、Jump(跳跃)等。
  • 转换: Animator 还定义了状态之间的转换规则,比如角色从走路到站立不动,或者从站立到跑步。

五、虚拟相机(Virtual Camera)

虚拟相机(Virtual Camera)是Unity中的一个高级相机系统,它用来自动控制相机的移动和视角,让游戏看起来更专业、更流畅。它是由Cinemachine插件提供的,这个插件专门用来简化和增强相机的控制。

1)虚拟相机是什么?

虚拟相机就像是一个智能的机器人相机操作员,它会根据你设置的规则自动调整相机的位置和方向。比如,它可以自动跟随一个角色移动,或者在不同的相机视角之间平滑切换。

2)虚拟相机的作用是什么?

虚拟相机的主要作用是简化相机控制,让开发者不需要手动编写复杂的相机移动代码。它特别适合用来制作电影化的游戏场景,比如过场动画或者第三人称射击游戏。

3)虚拟相机和主相机的区别?

**主相机(Main Camera):这是Unity默认的相机,**你可以手动控制它的位置和方向。它就像是一个普通的相机,你告诉它看哪里,它就看哪里。

**虚拟相机:这个相机更智能,可以自动跟随游戏中的角色或物体移动。**它可以根据游戏的状态自动调整视角,比如角色战斗时拉远一点,对话时拉近一点。

总的来说,虚拟相机让相机控制变得更简单、更自动,特别适合需要复杂相机运动的游戏。

相关推荐
dog2501 分钟前
BBR 的 buffer 动力学观感
人工智能·算法
玉笥寻珍8 分钟前
筑牢信息安全防线:涉密计算机与互联网隔离的理论实践与风险防控
开发语言·计算机网络·安全·计算机外设·php·安全架构·安全性测试
蓝莓味柯基13 分钟前
Lodash isEqual 方法源码实现分析
开发语言
FAREWELL0007514 分钟前
Unity基础学习(十五)核心系统——音效系统
学习·unity·c#·游戏引擎
python15616 分钟前
使用Langfuse和RAGAS,搭建高可靠RAG应用
人工智能·windows·python
秋野酱23 分钟前
python项目参考文献
开发语言·python
虾球xz43 分钟前
游戏引擎学习第281天:在房间之间为摄像机添加动画效果
c++·人工智能·学习·游戏引擎
冷yan~1 小时前
GitHub文档加载器设计与实现
java·人工智能·spring·ai·github·ai编程
lsswear1 小时前
php fiber 应用
开发语言·php
(・Д・)ノ1 小时前
python打卡day28
开发语言·python