首页 > 编程语言 >LayaBox引擎3D源码阅读(一、从继承链开始学习)

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

时间:2022-11-13 07:33:05浏览次数:58  
标签:渲染 对象 网格 精灵 源码 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粒子
3.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空间的组成点数据合成。

标签:渲染,对象,网格,精灵,源码,LayaBox,材质,3D
From: https://www.cnblogs.com/as3Gui/p/16885346.html

相关文章

  • (作者推荐)【RocketMQ入门到精通】— RocketMQ中级特性能力 | ​长轮询Pull和Push模式
    名言警句任何先进的技术均与魔法无异追本溯源【​​经历了6个月的失踪,我将带着干货终究归来!【RocketMQ入门到精通】​​】RocketMQ消费机制回顾   在众多MQ的体系中,一......
  • Hive3源码总结2
    大数据技术之Hive源码2接上文2.4HQL生成AST(抽象语法树)2.5对AST进一步解析 接下来的步骤包括:1)将AST转换为QueryBlock进一步转换为OperatorTree;2)对OperatorTree进行逻辑优......
  • STL源码
    STL源码:源码定义:1.allocator<T>是一个类,allocator_type是他的别名  T是一个数据类型,value_type是T的别名,pointer是T*的别名 2.try和catch的用法: 3.size_t和siz......
  • C++学习------cerrno头文件的作用与源码学习
    引言cerrno是C++对errno.h头文件的封装,里面实现了一个errno宏,返回上一次的错误码。我们来看看这个宏的具体实现以及其背后的原理。cerrno头文件代码位置:​​www.aospxref.......
  • python3.9 不支持 Axes3D
    学自动编码器的时候用了下axes3D,在pycharm里面跑代码,跑出来的图永远都是空白,没有任何报错,很服。看到知乎有老哥提问,python3.9是不是不支持axes3D,但是没有有意义的回答,抱......
  • Linux-0.11操作系统源码调试
    学习操作系统有比较好的两种方式,第一种是跟着别人写一个操作系统出来,《操作系统真相还原》、《Orange's:一个操作系统的实现》等书就是教学这个的;另一种方式就是调试操作系......
  • WINDOWS下从源码编译Carla0.9.13+UE4.26
    CARLA是一个开源的自动驾驶模拟器,基于UE4。本篇文章讲述如何在windows系统上从源码编译Carla0.9.13+UE4.26。参考官方文档:https://carla.readthedocs.io/en/0.9.13/build_......
  • 这些不知道,别说你熟悉 Nacos,深度源码解析!
    SpringCloud应用启动拉去配置我们之前写过一篇文章,介绍了一些Spring提供的扩展机制。其中说到了ApplicationContextInitializer,该扩展是在上下文准备阶段(prepareContext......
  • Go 语言项目源码解析:定时任务库 cron
    环境准备首先我们将源码克隆(Fork)为自己的个人仓库,只需要在GitHub项目主页点击Fork按钮,然后输入项目名称点击确认即可。克隆完毕后,可以下载到本地,或者直接在科隆后的Git......
  • hadoop单个数据节点的不同存储路径的存储策略源码分析。
    产生问题于数据集群的数节点存储磁盘大小不同,造成使用一段时间以后容量小的磁盘空间紧张。其实,早期配置了磁盘使用存储策略,就能解决该问题,部分网来上说这个策略无效,再hadoop......