混合使用3D

一、概述

在2D项目开发过程中,开发者往往需要在UI界面显示3D场景或者3D物体,比如游戏开发中,3D人物在2D背景地图上跑动,英雄属性界面里会展示3D的英雄模型等等,如动图1-1所示,

(动图1-1)

动图1-1是LayaAir创建的2D入门示例中的“混合3D”示例。

首先,利用LayaAir引擎中的RenderTexture可以很方便的实现这个功能。渲染纹理(RenderTexture)是在运行时不断更新渲染的一种特殊类型纹理 。渲染纹理的一个典型用法是将其设置为摄像机的“目标纹理”属性,这将使摄像机渲染到纹理,而不是渲染到屏幕。随后可以如同普通纹理(Texture)一样在2D UI下的Sprite对象中使用。

现在我们分别讲解在IDE和代码中是如何利用渲染纹理混合使用3D的。

二、IDE中混合使用3D

2.1 IDE中创建RenderTexture文件

如图2-1所示,先在IDE的 assets 资源中创建一个渲染纹理(RenderTexture)文件。

2-1

(图2-1)

点击新创建的RenderTexture文件,在属性面板中,会显示属性信息,如图2-2所示。

2-2

(图2-2)

Width:渲染纹理的像素宽度。

Height:渲染纹理的像素高度。

Color Format:渲染纹理的颜色格式。

Depth Format:渲染纹理的深度格式。

Generate Mipmap:如果勾选了,则自动生成多级渐进纹理级别。

Multi Samples:多重采样。

sRGB:此渲染纹理是否使用sRGB读/写转换(只读)。

AnisoLevel:各向异性值。

FilterMode:采样过滤模式。

WrapModeU:U方向采样模式。

WrapModeV:V方向采样模式。

对本篇来说,渲染纹理的宽度,高度,颜色格式和深度格式,对效果有一定影响,暂时使用默认设置。

2.2 3D场景添加渲染物

在IDE中的3D场景中,添加希望显示的3D物体,此例中把LayaMonkey添加到3D场景中,如图2-3所示。

2-3

(图2-3)

摄像机正对LayaMonkey,同时把摄像机的 Render 组件中的Clear Flag定义为“SolidColor”,并且Clear Color定义为“#000000”。

然后如图2-4所示,改摄像机为正交投影,并调整好摄像机的显示比例。

2-4

(图2-4)

2.3 设置摄像机的目标纹理

把之前创建好的渲染纹理文件(RenderTexture),拖入摄像机的目标纹理(Render Target)属性中。此时摄像机就会渲染到纹理, 而不是渲染到屏幕了。如图2-5所示,

2-5

(图2-5)

2.4 设置Sprite的Texture

在Scene2D中创建一个Sprite,作为显示3D物体的载体,把之前创建的渲染纹理拖入Sprite的Texture属性中,如动图2-6所示,

2-6

(动图2-6)

可以看到,LayaMonkey已经显示在2D Sprite中了,不过背景是黑色的,需要再次对渲染纹理的颜色格式修改,支持透明色。

2.5 修改渲染纹理属性

如动图2-7所示,修改渲染纹理的颜色格式(Color Format)为“R16G16B16A16”,背景就由黑色变成透明了。

(注意,在2.2节中,摄像机Render组件中的Clear Color的A值要设为0)。

2-7

(动图2-7)

仔细观察LayaMonkey,图像比较粗糙,主要原因是渲染纹理的分辨率(Width×Height)是256x256太低导致,下面修改分辨率为1024x1024,如动图2-8所示。

(动图2-8)

这样,LayaMonkey一下变清晰了,到此我们就把3D对象通过渲染纹理的方式,混合到UI界面了。运行效果如动图2-9所示:

2-9

(动图2-9)

三、代码中混合使用3D

LayaAir引擎提供的“2D入门示例”中有完整的3D混合使用代码示例,其中核心代码是通过使用 Laya.RenderTexture 来创建渲染纹理,并把渲染纹理分别应用到摄像机对象和Sprite对象中:

// 把3D摄像机视图画到256宽高的纹理上
_camera.renderTarget = new Laya.RenderTexture(256, 256, Laya.RenderTargetFormat.R8G8B8A8, Laya.RenderTargetFormat.DEPTHSTENCIL_24_8);
// 再将离屏3D画到2D节点上,至此,就完成把3D画到2D的基础渲染流程
sp.texture = new Laya.Texture(_camera.renderTarget);

运行效果如本篇开始的动图1-1所示。

Copyright ©Layabox 2022 all right reserved,powered by LayaAir Engine更新时间: 2023-11-29 17:33:41

results matching ""

    No results matching ""