技术美术入门

目录

Render 简介

选择渲染管线

Mesh 网格

1. 网格过滤器 (Mesh Filter)

2. 网格渲染器 (Mesh Renderer)

2.1 Materials 材质属性组

2.2 Lighting 光照属性组

2.3 Probes 探针属性组

2.4 Additional Setting 扩展设置属性组

3. 带蒙皮的网格渲染器 (Skinned Mesh Renderer)

shader 着色器

1. 概述

2. 分类

2.1 基本功能分类

2.2 Unity 中使用方式分类

3. 相关术语:

4. Shader 使用过程(着色器加载)

4.1 默认加载过程

4.2 预热着色器变体

5. 内置着色器

6. Physically Based Shading 基于物理着色

6.1 物理着色 PBS

6.2 non-Physically Based Rendering 非物理着色 NPS

7. 在 URP 中使用 Shader

很多着色器的名称中都有 Lit 或 Unlit 。

Universal Render Pipeline 中的着色器分类:


着色器和材质
  • 着色器和材质定义对象的外观,将 3D 网格转换为具有颜色和纹理的表面。着色器为您的对象提供颜色,平滑度,光泽度甚至物理纹理。
照明
  • 照明涉及环境光、人造光和阴影的组合。这可以确定一天中的时间、设置情绪或在场景中建立样式。
动画
  • 动画可向场景中的对象添加移动。这可以指整个物体在空间中的运动或角色身体的运动。
视觉效果(视觉特效)
  • VFX是为增强场景而添加的模拟运动效果,从微妙的水花到巨大的火热爆炸。
相机
  • 相机是您进入互动体验的眼睛。它们可以是完全动态的,固定的,也可以与角色绑定。
后处理
  • 后期处理就像对使用手机拍摄的照片应用滤镜一样。这可以使您的场景看起来更加美丽和有趣。
音频
  • 音频是交互式开发中最容易被忽视的方面之一。它包括源自环境中的音频,例如脚步声或湍急的水声,以及为效果而添加的音频,例如配乐。
用户界面 (用户界面)
  • 用户界面允许用户与应用程序进行交互或交互。UI 通常包括图像、文本、按钮、切换开关、滑块或下拉列表。

Render 简介

渲染是获取三维 (3D) 数据并使用它为屏幕生成二维 (2D) 图像的过程。

在 Unity 中,实现 渲染 Render 的技术称为 渲染管线 Render pipline

选择渲染管线

  • Unity 的内置渲染管线: 适用于所有平台,并且非常可靠。它很容易使用,但它是 Unity 内置的,所以它不是很可定制。这也不是最有效的。
  • 通用渲染管道( URP ) : 非常适合移动、Web 和 VR 项目,因为它针对性能进行了高度优化。它的配置有点复杂,但它比内置渲染管道更具可定制性。它可以产生相当不错的图形。
  • 高清渲染管线( HDRP ): 旨在为具有强大处理能力的高端平台(如游戏机或游戏计算机)生成高质量图形。它的配置非常复杂,因此只能由具有大量图形经验的人使用。

注意:

  • 内置渲染管线不允许对渲染管线进行自定义编程,只能通过选择不同的 Graphics tiers 图形层 来更改图形质量(共 3 层 Tier 1-3 自低到高)
  • 内置渲染管线虽不允许对渲染管线进行编程,但可以在图形层中,使用自定义的 Shader 着色器,着色器可以进行自定义开发(直接用代码,或者使用 shader graph )
  • 一些真正强大的新编辑器功能,如 Shader Graph 和 VFX Graph 仅与 URP 兼容,而不与内置渲染管道兼容
  • URP 项目针对您想要定位的任何平台(Web、桌面、移动或 VR)上的性能进行了优化,所以性能上并不比内置管线差多少

解释基本的3D原理

计算机图形学笔记--渲染管线

Mesh 网格

Unity 中,3D 对象的模型(3D 几何图形)是由 Mesh 网格系统组成

1. 网格过滤器 (Mesh Filter)

网格过滤器 (Mesh Filter) 从资源中获取网格并将其传递给网格渲染器 (Mesh Renderer) 以便在屏幕上渲染

2. 网格渲染器 (Mesh Renderer)

网格渲染器从网格过滤器 (Mesh Filter) 获取几何体,然后在游戏对象的变换组件所定义的位置渲染该几何体.

Mesh Renderer 组件包含四组核心属性:

2.1 Materials 材质属性组

设置在网格 Mesh 上使用的材质 Material

注意:

  • 材质可以设置多个,会按照顺序依次排列;
  • 后添加的材质会覆盖前面的材质,
  • 如果后添加的是不透明材质,则前面添加的材质将完全看不到,没有任何意义,只会造成性能上的浪费

2.2 Lighting 光照属性组

Lighting 部分包含有关此 Mesh Renderer 如何与 Unity 中的光照交互的属性。

2.3 Probes 探针属性组

Probes 部分包含与光照探针 (Light Probes) 和反射探针 (Reflection Probes) 有关的属性。

2.4 Additional Setting 扩展设置属性组

3. 带蒙皮的网格渲染器 (Skinned Mesh Renderer)

Unity 使用带蒙皮的网格渲染器 (Skinned Mesh Renderer) 组件来渲染骨骼动画;此类动画中的网格形状由动画骨骼进行变形。这种技术对于关节弯曲的角色和其他对象(与关节更像铰链的机器相反)非常有用。

骨骼是蒙皮网格内的不可见对象,会影响网格在动画过程中的变形方式。骨骼连接在一起形成分层的“骨架”,并通过旋转骨架的关节使骨架移动来定义动画。每个骨骼都附着在周围网格的一些顶点上。播放动画时,顶点会随着它们所连接的一个或多个骨骼移动,因此“皮肤”也跟随骨架移动。在简单的关节(例如肘部)处,网格顶点受到在此处相交的两个骨骼的影响,当关节弯曲时,网格将逼真地伸展和旋转。在更复杂的情况下,两个以上的骨骼会影响网格的特定区域,从而产生更微妙的移动。

shader 着色器

1. 概述

3D 模型本质上是称为顶点的 3D 坐标的集合。它们连接在一起形成三角形。每个顶点可以包含信息,例如颜色、指向的方向(称为法线)和一些用于将纹理映射到其上的坐标(称为 UV 数据)。

没有材质就无法渲染模型。材质是包含着色器及其属性值的包装器。因此,不同的材质可以共享相同的着色器,并为其提供不同的数据。

着色器是一段脚本程序,在 GPU 上运行。

每个着色器都是为特定的渲染管道编写的,也就是说,shader 绑定 render pip line,不能在不同的渲染管线上是使用。

您使用的着色器取决于您的渲染管道。在 Unity 中,每个模板都带有专门为模板中使用的渲染管道设计的着色器。

着色器可以变化很大,提供可以应用于项目的各种视觉样式。

2. 分类

2.1 基本功能分类

  1. 片元着色 fragment shading:
    也称为像素着色,是表示网格表面以产生二维图像中每个像素的颜色的着色。

  2. 顶点着色 vertex shading:
    作用于网格的顶点,通常改变它们的位置以使表面移动或变换。

2.2 Unity 中使用方式分类

在 Unity 中,着色器根据使用方式不同,分为三大类。每个类别的用途不同,使用方式也不同。

  1. 内嵌着色器:
    作为图形管线一部分的着色器是最常见的着色器类型。它们执行一些计算来确定屏幕上像素的颜色。在 Unity 中,通常是通过 Shader 对象使用这种类型的着色器。
  2. 计算着色器:
    在常规图形管线之外,在 GPU 上执行计算。
  3. 光线追踪着色器:
    执行与光线追踪相关的计算。

3. 相关术语:

  • 着色器或者着色器程序 - 在 GPU 上运行的程序。除非另有说明,否则这意味着着色器程序是图形管线的一部分。
  • Shader 对象 - Shader 类的一个实例。Shader 对象是着色器程序和其他信息的封装器。
  • ShaderLab - 一种用于编写着色器的 Unity 特定语言。
  • Shader Graph - 一种无需编写代码即可创建着色器的工具。
  • 着色器资源 - Unity 项目中扩展名为 .shader 的文件。即使用代码定义的一个 Shader 对象。
  • Shader Graph 资源 - Unity 项目中的 Shader Graph 文件。即使用 Shader Graph 定义的一个 Shader 对象。

4. Shader 使用过程(着色器加载)

4.1 默认加载过程

默认情况下,Unity 的运行时着色器加载行为如下:

  1. 当 Unity 加载场景或使用在运行时加载资源功能加载内容时,它会将所有需要的 Shader 对象加载到 CPU 内存。
  2. Unity 第一次需要使用着色器变体渲染几何体时,它将该变体的数据传递给图形驱动程序。图形驱动程序在 GPU 上创建该变体的表示,并执行平台所需的任何其他工作。
  • 优点:
    这种行为的好处是着色器变体没有前期的 GPU 内存使用或加载时间
  • 缺点:
    第一次使用变体时可能会出现明显的停顿,因为图形驱动程序必须在 GPU 上创建着色器程序并执行任何额外的工作。

4.2 预热着色器变体

为避免在性能开销大时出现明显的停顿,Unity 可以要求图形驱动程序在首次需要着色器变体之前创建它们的 GPU 表示形式。这称为预热。

注意:
警告:在选择如何执行预热之前,请查看有关图形 API 支持的说明。在 DX12、Vulkan 和 Metal 等现代图形 API 上,只有实验性的 ShaderWarmup API 完全支持,因为它允许您指定顶点格式。使用其他方法可能会导致浪费工作和 GPU 内存,而不会避免停顿。

5. 内置着色器

Unity 内置的着色器,可以直接配置后使用,不用从零开始编程

不同的渲染管线需要使用不同的内置着色器。

注意:
着色器必须与项目的渲染管线兼容。如果新建了一个空项目,却导入了使用不同渲染管线旧项目,很大几率会造成兼容性错误,所有 3D 模型外观将成为紫色。

6. Physically Based Shading 基于物理着色

6.1 物理着色 PBS

  • PBS : Physically Based Shading 基于物理着色
  • PBR : Physically Based Rendering 基于物理渲染

基于物理着色 (PBS) 以一种模仿现实的方式模拟材质和光照之间的相互作用。

PBR 模拟现实世界的物理原理和光,以在 3D 表面上生成逼真的阴影、反射、环境光和其他光效果。

6.2 non-Physically Based Rendering 非物理着色 NPS

渲染的颜色、阴影和反射要么在没有 PBR 科学的情况下进行近似,要么只是不渲染。

非 PBR 通常看起来不像 PBR 那样逼真,但对于风格化效果可能更理想。使 3D 场景中的表面看起来像 2D 卡通的卡通着色器是一种非 PBR 着色器。

7. 在 URP 中使用 Shader

在 3D 对象的 Material 属性面板上,可以选择要是用的 shader

很多着色器的名称中都有 Lit 或 Unlit 。

  • Lit:光照着色器响应场景中的光线,而无光照着色器则不会。
  • Unlit:无光照着色器对于某些艺术效果或通过不使用光照更有效地运行的优化项目很有用。

注意: 一般不建议更改已创建材质的着色器。应该在创建材质时,选定 shader ,之后就不再改动,否则很容易出错

Universal Render Pipeline 中的着色器分类:

  • 2D > Sprite-Lit-Default :专为 2D 项目设计,此着色器仅适用于平面对象,并将任何 3D 对象渲染为 2D。作为光照着色器,它将根据场景中到达对象的光线进行渲染。
  • Particles > Lit、Simple Lit 和 Unlit:这些着色器用于视觉效果 (VFX)
  • Terrain > Lit:此着色器针对 Unity 中的 Terrain 工具进行了优化
  • Baked Lit 烘焙光照:此着色器会自动应用于光照贴图
  • 复杂光照 Complex Lit、光照 Lit 和简单光照 Simple Lit:这些都是通用的、基于物理的光照着色器的变体。
  • Unlit:如上所述,不使用灯光的着色器。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值