3D世界和粒子系统
Yuri引擎可以工作在3D模式下,在此模式下,精灵被划分为四种类型:背景、立绘、前景、贴图。前三种类型由三个3D模型组Model3DGroup
去包装这些精灵对象。每个模型组中包含了多个3D模型GeometryModel3D
,它由三角形顶点集合MeshGeometry3D
和漫射照明材质DiffuseMaterial
构成。 贴图类型的精灵与2D模式下的贴图没有差异,直接作为2D对象展现在三个3D模型组的上面。
光源
Yuri引擎默认使用环境光AmbientLight
来照亮3D世界,在这种光源下,所有的漫射材质都被会被无差别地照亮,不会产生阴影效果。如果要实现更复杂的光照效果,请修改引擎的3D舞台页Yuri.PageView.Stage3D
中的相关XAML内容。
摄像机
Yuri引擎默认使用透视摄像机PerspectiveCamera
来获得3D世界在游戏屏幕2D平面上的投影。如果要实现更复杂的镜头效果,请修改引擎的3D舞台页Yuri.PageView.Stage3D
中的相关XAML内容。
3D世界精灵的显示
以立绘图片为例,前端管理器ViewManager
是这样渲染3D世界中的精灵对象的:
- 根据立绘要显示的屏幕分区位置,在3D世界中放置一个3D模型
GeometryModel3D
对象 - 根据模型信息描述子,设置该3D模型对象的三角形顶点、渲染方向
- 将精灵图片作为漫射材质对象
DiffuseMaterial
的图像画笔ImageBrush
3D世界中的其他元素
选择项、文本层和按钮在3D舞台上的表现与2D舞台上完全一致,其本质是在3D世界之上叠加2D画布,并将这些2D对象渲染到这些2D画布上。
3D场景镜头系统
3D场景镜头类SCamera3D
为游戏提供真实3D景深效果的镜头移动动画,以实现更流畅的关于镜头的演出。3D场景镜头特效是真正意义上的镜头动作,它是摄像机在3D世界中的移动所产生的视觉效果,而不是模型的变换。
基于屏幕分区机制,3D场景镜头系统可以提供这些服务:
方法名 | 作用 |
---|---|
Translate(int r, int c) | 将镜头中心平移到指定的区块 |
FocusOn(int r, int c, double ratio, bool immediate) | 以某个区块为焦点调整焦距 |
ResetFocus() | 重置镜头将中央和焦点都对准屏幕中心并采用1.0的对焦比例 |
Focus(double ratio) | 在镜头聚焦的区块上调整焦距 |
PreviewEnterScene() | 布置场景结束并准备进入时调用此方法以准备动画 |
PostEnterScene() | 进入场景并做默认拉长焦距效果 |
LeaveSceneToBlackFrame() | 离开场景并切入黑场 |
ResumeBlackFrame() | 直接从黑场中恢复 |
同时3D场景镜头系统可以提供一些辅助函数:
方法名 | 作用 |
---|---|
GetScreenCoordination(int r, int c) | 获取屏幕分区的中心坐标 |
GetScreenDistance(int rA, int cA, int rB, int cB, double scale) | 获取指定焦距下屏幕分区之间的曼哈顿距离 |
SkipAll() | 立即跳过所有动画 |
IsAnyAnimation | 获取是否有动画正在进行 |
3D场景镜头系统的技术实现相比2D场景镜头系统要简单得多,它本质上是对摄像头的依赖项属性Position
施加一个插值动画。由于背景、立绘、前景这三个模型组在3D世界中和透视摄像机的距离是不一样的,因此当摄像机移动时,它们自然地就会产生带有景深效果的反向移动视觉效果了。因此,场景镜头动画的平移动作就是在X-Y平面上反向移动摄像机,缩放动作就是在Z轴方向上移动摄像机。
3D粒子系统
目前仍在完善中。
程序集信息
Property | Value |
---|---|
层次结构 | Yuri.PlatformCore.Graphic3D.SCamera3D |
最低版本 | 1.0 |
并行安全 | 否 |