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

前言

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

正文

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

Sprite3D作为3D显示对象基类,有三个子类,分别是RenderableSprite3DBaseCamera以及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函数有哪些。
image

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

  1. PixelLineRendererPixelLineSprite3D持有的渲染器。用于渲染像素线精灵。
  2. MeshRendererMeshSprite3D持有的渲染器,用于渲染静态网格精灵。
  3. ShurikenParticleRendererShuriKenParticle3D持有的渲染器,用于渲染3D粒子
  4. TrailRendererTrailSprite3D所持有的渲染器,用于渲染拖尾精灵。

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

上图的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空间的组成点数据合成。

posted @   小雄(416731103)  阅读(401)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示