天天看点

LayaBox引擎3D源码阅读(一、从继承链开始学习)

-前言-

习惯2D开发的同学,在转到3D游戏开发的时候,始终会有所不适,首先最难让人不习惯的就是,空间的转换没办法那么快的就转换过来。另一个始终是分不清纹理,材质,网格,贴图这些名词之间到底什么关系。

-正文-

不管3D游戏还是2D游戏,对于游戏引擎来说都是把显示对象绘制到屏幕上。我们首先来了解Laya3D有哪些显示对象(3D精灵)

LayaBox引擎3D源码阅读(一、从继承链开始学习)

Sprite3D作为3D显示对象基类,有三个子类,分别是RenderableSprite3D,BaseCamera以及LightSprite

RenderableSprite3D

RenderableSprite3D是可渲染对象基类,它的子类都是可以被Laya引擎渲染的。其中每个子类对应一个Render对象

1.MeshSprite3D是静态网格精灵,常用于美术预制的网格数据渲染模型。比如游戏场景中的建筑,装饰物

2.ShuriKenParticle3D是粒子特效精灵。与2D粒子特效的用法差不多

3.PixelLineSprite3D是像素线精灵,是由线段在3维空间组成的网格数据

4.SkinnedMeshSprite3D是蒙皮网格精灵,一般用于人物模型网格数据

5.TrailSprite3D是拖尾精灵

BaseCamera

BaseCamera只有一个子类Camera,是3D场景中的摄像机对象。摄像机是一个3D场景必备的对象,否者也不会渲染出任何对象。

摄像机主要作用就是确认哪些对象是需要渲染的,哪些对象是不需要渲染的。并且在帧循环中对视窗内的对象进行渲染。

一个场景中可以存在多个摄像机,每个摄像机的渲染逻辑都是单独计算的,因此每增加一个摄像机,渲染负担也同时增加一倍。

LightSprite

LightSprite是灯光对象的基类,灯光分为如下几类

1.DirectionLight是平行光,用于模拟太阳光,固定一个方向,光照不会衰减。

2.PointLight是点光源,可以用于模拟灯泡,蜡烛灯,有强度,颜色,衰减半径属性。

3.SpotLight是聚光灯,可以用于模拟手电灯,光照区域边缘有衰减现象,区域也被随距离越来越大。

在了解了显示对象之后,再来看看对于显示对象处理的Render函数有哪些。

LayaBox引擎3D源码阅读(一、从继承链开始学习)

BaseRender是所有渲染器的基类,持有所需要渲染的材质引用及包围盒对象。看到这里我们就可以理解为Sprite3D是材质纹理的一个显示容器,Render是Sprite3D持有的可以渲染到屏幕的逻辑处理器。

1.PixelLineRenderer是PixelLineSprite3D持有的渲染器。用于渲染像素线精灵。

2.MeshRenderer是MeshSprite3D持有的渲染器,用于渲染静态网格精灵。

3.ShurikenParticleRenderer是ShuriKenParticle3D持有的渲染器,用于渲染3D粒子

3.TrailRenderer是TrailSprite3D所持有的渲染器,用于渲染拖尾精灵。

刚刚有说Sprite3D是显示对象容器,被Render逻辑处理渲染,那它处理的对象就是我们的资源资产对象Resource。下面来看看Resource对象的继承链。

LayaBox引擎3D源码阅读(一、从继承链开始学习)

上图的Resource继承链,我只写了3D相关的资源类型,2D的资源就暂时忽略了。

可以看到Resource资源类型可以分为Mesh网格,Material材质类型,Avatar骨骼映射数据,AnimationClip动画数据。

可以说一个Sprite3D也是由这些资产数据所组成。

1.Mesh是模型数据,在Laya中一般是.lm后缀文件。

2.Material分类很多,一般文件后缀为.lmat文件,是Unity中为模型设置的材质信息。加载.ls或者.lh文件时会自动加载.lmat文件来产生材质。

材质分类

1.BlinnPhongMaterial材质是LayaAir3D中标准材质。

2.EffectMaterial材质是特效材质,靠混合模式产生光效,这种材质常用于特效制作。

3.UnlitMaterial材质是不受光材质。这种材质最大的特点就是不受光照影响,且最省性能。这种材质直接显示原贴图的样式。

4.PBRStandardMaterial材质基于物理普通反射材质,一般用于粗糙质感的材质。

5.PBRStandardMaterial材质基于高光,常用于光滑金属质感。

6.WaterPrimaryMaterial材质水初级材质。

每个材质都会对应着Sprite3D的使用。所以可以这么说Laya中每个3D资产单元都会对应从管理到渲染的一套逻辑。

纹理,材质,网格之间的关系

通过阅读代码,可以理解,纹理是材质中的一项属性,通常是Texure对象,材质还包含处理纹理的很多属性。

网格是一个模型在3D空间的组成点数据合成。