社区的盆友们久等啦!小鸥带来了「Orillusion 引擎」的0.7.2版本~本次版本更新共带来了2个新特性,以及多个已知问题的修复。
基于WebGPU的动态绘制Graphic能力
Ξ 点线面绘制能力
Graphics 模块主要用于对具有实时变化的点、线、面、体的数据,使用特定的方法创建模型网格,并配置好Transform、Texture、Material 等信息,传入到渲染管线中参与渲染。通过这个方法创建出来的动态网格,性能高效、使用方便。
Ξ 内置多种封装的 Graphics 渲染API
引擎内置封装有多种Graphics渲染API,供不同的需求提供实现路径。
1. Graphic3DMeshRenderer渲染器
通过 Graphic3DMesh.draw() 指定输入 Mesh网格,在同一个渲染器中批量创建、控制一组克隆体。对每个克隆体的 Transform、Texture,以及渲染器的Material 进行动态调整,达到组装出目标图形、动画的目的。
2. Shape3DRenderer 渲染器
通过Shape3DMaker.makeRenderer(),获得渲染器实例。通过Shape3DMaker提供的API,可以快速创建出想要的 Shape3D(例如Ellipse、Rect、Circle等,后续推出更详尽的描述)。对于Path类型的Shape3D(比如 Path2DShape3D、Path3DShape3D),引擎参照 CanvasPath中的API设计来实现,让开发者能借鉴和沿用自己熟悉的开发方式,使用「Orillusion 引擎」做graphics 3D绘制工作。
视频加载中...
针对引擎使用的用户体验提升,在本次发版中增加了由预处理器自动分配 属性编号与 group 自动绑定能力,具体如下:
Ξ 旧版本使用情况&问题
在编写 WGSL 时为顶点阶段或片元阶段设置属性,需要手动为每个属性设置一个唯一编号,例如以下代码所示:
struct VertexInput {
@location(0) position: vec3,
@location(1) normal: vec3,
@location(2) uv: vec2,
}
为了更好的实现Shader变种,以前的版本中引擎引入了一个Shader预处理器,可以通过 #if 语法来做条件编译,实现Shader变种,例如:
struct VertexInput {
@location(0) position: vec3,
@location(1) normal: vec3,
@location(2) uv: vec2,
#if USE_UV2
@location(3) uv2: vec2,
#endif
}
但是随着Shader的功能越来越复杂,所需的属性和各类条件越来越多,@location手动定义编号的方式就显得非常繁琐和难以维护,例如:
struct VertexInput {
@location(0) position: vec3,
@location(1) normal: vec3,
@location(2) uv: vec2,
#if USE_TANGENT
@location(3) tangent: vec4,
#if USE_SKELETON
@location(4) joints: vec4,
@location(5) weights: vec4,
@location(6) vIndex: f32,
#endif
#else
#if USE_SKELETON
@location(3) joints: vec4,
@location(4) weights: vec4,
@location(5) vIndex: f32,
#endif
#endif
}
Ξ 新版本解决方案
在新版本中,引擎的Shader预处理器引入了 @location(auto)的功能,不再需要手动定义每个 @location 的编号,而是由预处理器自动分配,例如:
struct VertexInput {
@location(auto) position: vec3,
@location(auto) normal: vec3,
@location(auto) uv: vec2,
#if USE_TANGENT
@location(auto) tangent: vec4,
#endif
#if USE_SKELETON
@location(auto) joints: vec4,
@location(auto) weights: vec4,
@location(auto) vIndex: f32,
#endif
}
当存在 USE_TANGENT 和 USE_SKELETON 宏时,@location(auto) 将会自动分配一个唯一的编号,确保每个 @location 编号按照顺序排列,最终结果如下:
struct VertexInput {
@location(0) position: vec3,
@location(1) normal: vec3,
@location(2) uv: vec2,
@location(3) tangent: vec4,
@location(4) joints: vec4,
@location(5) weights: vec4,
@location(6) vIndex: f32,
}
除了 @location (auto) ,新版本还引入了 @binding(auto),预处理器会为每个 group 的 binding 按照顺序自动排列编号,例如:
@group(1) @binding(auto)
var baseMapSampler: sampler;
@group(1) @binding(auto)
var baseMap: texture_2d;
除了新特性外,本次版本发布中还解决了多个已知问题,主要修复内容如下:
请大家添加小鸥微信,我们会邀请您进入Orillusion官方开发者交流群,一起关注WebGPU的最新进展!
Orillusion致力于打造全世界第一款完全开源基于WebGPU标准的一种轻量级渲染引擎,目标是在浏览器中实现桌面级的渲染效果,支持超大复杂场景的3D呈现。易上手,易分享,易迭代,易协作、成本低,跨平台是我们的核心优势,我们将为3D场景爆发时代提供引擎基础工具。
未来我们将会持续把最干货最前沿的WebGPU技术分享给每一位社区成员,也欢迎大家为Orillusion开源社区做出自己的贡献。我们一直坚信,开源社区的技术留痕是每一位技术人员最崇高的追求!因此,我们尊重,我们认可,我们更期待,加入Orillusion,让我们共同进步!
——Link uncharted, 链接未来世界
页面更新:2024-03-22
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号