IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> laya3D个人整理(初学) -> 正文阅读

[游戏开发]laya3D个人整理(初学)

了解3D游戏开发基础概念


场景与摄像机

场景:
游戏中的3d世界,有了场景才可以进行添加物体,这一步是必须步骤
摄像机:
游戏世界的眼睛,通过摄像机玩家才可以看到游戏中的场景等,所以每个场景有最少要有一台摄像机

摄像机的成像效果,可分为透视与正交。
layaAir引起的3d摄像机默认是透视模式,这是模拟了人眼的视觉效果,近处大远处小
正交没有透视感,常用于一些2d与3d混合的游戏或者模型查看器等

当我们在写3D游戏的代码时,要先在舞台中添加3D场景,添加3D摄像机。再写其它代码


坐标系与坐标

坐标是3d空间世界的基础之一,许多操作都离不开坐标的参与
学习layaAir3D时,我们需要了解两个坐标:位置坐标与UV坐标
位置坐标
空间笛卡尔直角坐标系:用经过相同原点的xyz三条互相垂直的坐标轴相交而构成(自己可去百度搜索笛卡尔直角坐标系,这里不进行过多叙述)
LayaAir引擎unity导出插件就是以x轴取反来自动适配LayaAir引擎。所以,直接在unity里编辑导出,然后在LayaAir引擎中使用,是不需要手工对坐标进行转换的。如果开发者一定要在LayaAir引擎项目中手动来调坐标,那需要注意左手坐标系与右手坐标系在x轴正方向的差异。
UV坐标
UV其实也是坐标,整整的说是UVW,这三个轴:U是屏幕水平方向,V是屏幕垂直方向,W是垂直于显示器表面的,一般开发时用不到W,所以 通常简称为UV
去掉了w的uv坐标其实就是一个2d平面坐标,uv坐标可用于模型纹理贴图等
在这里插入图片描述
UV坐标的贴图纹理向右和向下分别是U与V的坐标正方向。取值范围是0-1,不管纹理图片的像素是多少,3D美术制作软件导出的模型顶点数据都会对应贴图纹理的UV坐标,以保障渲染时的采样正确。


三角面、网格、模型

模型:
3d游戏中可见物的基础(人物,房屋,树木,山川,河流等等等等),机会绝大数可见物体都是以模型为基础构成的。进一步了解模型,需要先从三角形平面(简称三角面)开始, 三角面有三个顶点构成,是显卡唯一能处理的基础多边形。三角面之所以是最基本的多边形,最重要的一个原因就是:由三个点构成的三角面一定是在同一个平面上,其他多点构成的多边形在三维空间中不一定会在用一个平面上
网格:
由一个或多个三角面拼接形成的,是构成模型形状的基础。在layaAir引擎中,构成各种图形形状的三角面顶点数据和三角面的索引数据集合就是网格,所以网格在游戏运行时是不可见的,下图就是用像素线精灵来表现模型的网格构成的
在这里插入图片描述
模型是网格(Mesh)与材质(Material)组成的。
两者的关系:模型的基础是网格,网格的基础是三角面。三角面越多,模型可表现的细节越丰富,细节表现比较丰富的,通常被称为精模,细节表现相对较弱的,被称为简模。


材质

因为网格只是三维形状的数据,网格形状本身是不可见的,为了可见,就需要材质来操作了
材质有很多种类
在这里插入图片描述
想要更加清楚了解材质,可转https://ldc2.layabox.com/doc/?language=zh&nav=zh-ts-4-1-0


纹理、贴图、面片

纹理是指物体表面的外观效果,表现为2d位图形式

贴图将3d纹理铁道3d模型网格的过程

面片在三维空间中,哪怕只有一个三角形平面,也可以构成网格,可以设置材质,那这就是模型。所以面片,与其它多面体模型,本质上都是一样的


灯光、阴影、反射光

灯光光源是3d场景中不可缺少的重要组成部分,网格与纹理决定了物体的形状和外观,光源啧可以进行照明,产生阴影,同时还可以影响到场景环境以及3d模型的颜色。亮度。氛围等等
3d中的光源就是灯光,其他如泛光。环境光等都是光效,并非光源。
3d灯光有三种:平行光(DirectionLight),点光(PointLight),聚光(SpotLight),layaAir中不仅支持这些光源的任意类型,还支持在同一场景下任意添加多种光源
平行光
模拟大自然太阳光的灯光,光源来自无穷远的位置,并且光源的光线始终都是平行的且没有衰减。引擎中可以设置光源的方向,用于照亮全场
在这里插入图片描述
点光
是一种以光源点为中心,向四周呈发射状的光源,光源点位于3d空间中的某个位置。类似:篝火,蜡烛,点灯等等的发光方式,这种光拥有照射范围和衰减半径,范围以外则是无光的黑暗
在这里插入图片描述
聚光
与点光类似,都属于位置光,位置。照射范围和衰减半径都差不多类似,但是与发射状的点光不同,聚光拥有广元方向,呈锥形角度的光源,类似:手电筒、舞台上的聚光灯等等
在这里插入图片描述
阴影
是灯光照射模型时产生的,实时阴影随着灯光的角度、亮度模型位置等变化而变化,能产生更加强烈的立体感与真实感
在这里插入图片描述
反射光
是指光源在照射到3D模型上,反射产生的光效


加色法光效、环境光、泛光、光照贴图

这些光不属于光源类,只是看起来像光的一些效果


加色法光效
让材质本很就会有发光的效果,这是一种通过加色发模拟出来的光感,并非受光照产生,这种的自发光效果不会对周围环境及其他模型产生影响,但会被背影色影响
环境光
环境光类似于全局颜色滤镜,设置白色等亮色,就算没有光源,场景中也都能比较明亮。想要表达阴天的感觉,可以加入一些灰暗的环境光颜色或者夜视镜效果等等,都可以通过环境光去设置
泛光
属于后期的效果,即便没有光源的照射,也可以产生一种类似光晕叠加的效果
光照贴图
通过贴图的形式模拟游戏场景中的光影效果,也是游戏中为了节省性能而常用的一种伪光照视觉效果的制作方式


Shader(着色器)

Shader 中文名为着色器, shader本质上是一段采用GLSL着色语言编写(着色语言好几种,基于webGL只能用GLSL语言)在GPU上运行的程序 , 用于告诉图形软件如何计算和输出图像。Shader主要分两类:顶点着色器和片段着色器(也叫片元着色器) 。

顶点着色器是用来处理顶点数据的程序,如顶点坐标、法线、颜色和纹理坐标。 它在每个顶点上调用,可将几何图形(例如:三角形)从一个位置转换为另一个位置, 例如,用于顶点变换、纹理坐标生成、 纹理坐标变换等等。

片段着色器用来计算和填充每个像素的颜色,所以也称为像素着色器。可用于插值的运算、 纹理存取、纹理应用 、 雾 、 色彩计算等。

LayaAir提供了自定义Shader功能,可以让开发者实现一些引擎未曾提供的功能或者效果。Shader的实现有一定的门槛,新手先不要急着研究这个,先有个基础的认知即可。


天空、粒子、拖尾

引擎依据开发的易用性,对一些常用功能进行封装,如天空、粒子系统、拖尾系统

天空
layaAir模拟的3d天空,提供了两种现成的网格,一种是立方体网格,被称为天空盒(SkyBox),另一种是球形网格(SkyDome),被称为天空球或球形天空
当然,开发者也可以自定义其它的天空网格。
天空盒
基于立方体网格的天空,以六张无缝连接的材质纹理贴图星城,类似盒子拆开平铺
在这里插入图片描述
球形网格
采用一张纹理贴图形成,相较于天空盒,球形网格也可以制作出完全相同的视觉效果,但是所需的顶点要多于天空盒,性能的消耗也会相对大一些。

所以在条件允许的情况下优先级天空盒

两种3D天空技术方案的使用差别也与材质有关,LayaAir引擎中自带了一个对应天空盒网格的天空盒材质(SkyBoxMaterial)、而天空球要么使用不需要贴图的程序化天空材质(SkyProceduralMaterial),要么就使用模型材质,因为天空不受光照影响,最好使用不受光材质。


粒子系统
粒子是一组分散的微小物体集合,通过让这些微小的物体按某种算法运动起来,从而实现诸如火焰、烟、爆炸、流水、等比较灵动的效果。粒子系统并不是一种绘制形式,而是一种动画方法,粒子系统的作用是在粒子产生、运动、变化以及消失这个生命周期内去控制它们。LayaAir引擎的粒子系统包括了粒子发射器、粒子动画器、和粒子渲染器等多个部分。


拖尾系统
顾名思义是拖在后面尾巴一样的效果,常用于带条状3D特效,比如,刀光拖尾,跑酷小球游戏的行动轨迹拖尾等。LayaAir引擎内置了拖尾系统和拖尾材质,方便开发者快捷使用3D拖尾。


3d物理系统与3d动画系统

3D物理系统是通过模拟真实物理属性的方式来计算重力、运动、旋转、碰撞反馈等,LayaAir引擎内置了bullet 3D物理引擎。官网中有详细的学习文档。

动画是交互式游戏不可缺少的组成部分。 LayaAir引擎中支持使用材质动画,刚体动画,摄像机动画,骨骼动画这几种动画类型。

材质动画是以改变材质的颜色与贴图方式的动画。

刚体动画又称为变换动画,是指不改变模型顶点、材质的基础上,只对模型进行旋转、缩放、位移的动画,比如,脚底光环、刀光等。刚体动画也经常与材质动画结合使用。

骨骼动画也称为蒙皮动画,这种动画主要是以改变模型顶点的方式产生动画。

摄像机动画是指通过改变摄像机位置而产生的动画效果。


3D基础的常用数学概念

3D数学的基础常用概念。例如: 向量、 矩阵、 欧拉角、四元数、射线、包围体
向量
既有大小又有方向的量称之为向量(物理学叫矢量),向量也有维度,例如,2维、3维、4维。与向量对应的是数量(物理学叫标量),数量是只有大小没有方向的量。有的文章把数量理解为1维向量,而我们通常所指的向量是2维或以上维度,不包括1维。

在LayaAir引擎中,针对2维、3维、4维向量的封装方法示例分别为: Vector2(1, 2) 、Vector3(1, 1, 3)、Vector4(1, 2, 3, 0.5) 。然而LayaAir引擎封装的Vector方法,不仅可以作为向量的使用,还可以用于顶点坐标位置,或者表达颜色的时候使用。比如原点坐标Vector3(0, 0, 0),颜色值Vector3 (0.6, 0.6, 0.6) 、Vector4(0.9, 0.5, 0.1, 1)。
矩阵
在线性代数中,矩阵是以行和列形式组织的矩形数字块。如果把向量定义为1维数组,那么矩阵就是2维数组。这里不要把2维理解为2D,是指来自数组的行与列形成2维。以数组的角度去理解,那向量是数量的数组,矩阵则是向量的数组。

矩阵是在显卡图形API中直接用于描述方位的形式,可立即进行向量的旋转。LayaAir引擎提供了3×3的旋转矩阵Matrix3x3() 和4×4的变换矩阵Matrix4x4(),变换矩阵可用于平移、旋转、缩放计算。

欧拉角、四元数
欧拉角与四元数都是用于旋转计算的数学方法,刚刚介绍的矩阵明明也可以用于旋转计算,为什么要介绍这两种呢?相对而言,3×3旋转矩阵需要9个数,欧拉角只需3个数(3维向量),四元数只需要4个数(4维向量),明显轻量了很多。那是不是欧拉角最优,也不尽然。尽管欧拉角内存占用小,也更加易用,但欧拉角也有他特有的问题,那就是可能会导致万向节死锁。而四元数则相对于矩阵内存占用小,也不受万向节死锁的困扰,而且在平滑插值方面只能是四元数才能完成。

射线
射线是只有一个端点无限延长形成的直的线,在LayaAir引擎中的射线 Ray是一个数据对象,拥有起点与发射方向两个属性。常用于基础的碰撞检测,也可以用于鼠标拾取。

包围体
包围体用于可见检测计算,基本思想是体积稍大且结构简单的包围体来替代结构复杂的被包围体,当进行检测的时候,达到提高检测效率的作用。比如,一旦检测到包围体被遮挡不可见,那无论包围体内是什么样的模型,那全部不可见。LayaAir引擎中提供了盒状包围体( 包围盒 )与球状包围体(包围球)。




基础数学工具

向量
Vector2二维向量 , Vector3 三维向量, Vector4 四维向量
代码中3D对象的移动、旋转、缩放等变换都是使用Vector3作为了它的x、y、z轴向坐标赋值。更详细的使用可以查看 API 。

颜色
在各种颜色属性赋值上,三维向量中的值又分别代表了R、G、B三种颜色,分别为红、绿、蓝。还有些地方使用四维向量作为颜色参数,Vector4的w值代表的Alpha值。LayaAir 3D引擎中,三个颜色的最大值为1,是按百分比的方式设置,整体值越大,颜色越亮,越小颜色越暗,如果值超过1将会产生曝光效果

至于红、绿、蓝能组合成什么样的颜色,初学者们可以向游戏美术设计师们咨询学习,比如红加绿为黄、红加蓝为紫等等,一般在项目开发过程中,程序员需要反复调整颜色值去试验好的效果。


Transform变换

transforms是一个变换对象,在3d中所有有关显示对象的变化都会使用到
//移动摄像机
camera.transform.translate(new Laya.Vector3(0, 3, 3));
//旋转摄像机
camera.transform.rotate(new Laya.Vector3(-30, 0, 0), true, false);
了解更多可转https://ldc2.layabox.com/doc/?language=zh&nav=zh-ts-4-1-3


3D场景编辑-unity插件使用说明

https://ldc2.layabox.com/doc/?language=zh&nav=zh-ts-4-2-0

更新中…

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 00:04:18  更:2021-09-11 00:04:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 16:18:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码