版本更新丨Orillusion 0.7.2版本发布啦!

社区的盆友们久等啦!小鸥带来了「Orillusion 引擎」的0.7.2版本~本次版本更新共带来了2个新特性,以及多个已知问题的修复。

1 功能新增

基于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_TANGENTUSE_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;

2 问题修复

除了新特性外,本次版本发布中还解决了多个已知问题,主要修复内容如下:


请大家添加小鸥微信,我们会邀请您进入Orillusion官方开发者交流群,一起关注WebGPU的最新进展!

Orillusion致力于打造全世界第一款完全开源基于WebGPU标准的一种轻量级渲染引擎,目标是在浏览器中实现桌面级的渲染效果,支持超大复杂场景的3D呈现。易上手,易分享,易迭代,易协作、成本低,跨平台是我们的核心优势,我们将为3D场景爆发时代提供引擎基础工具。

未来我们将会持续把最干货最前沿的WebGPU技术分享给每一位社区成员,也欢迎大家为Orillusion开源社区做出自己的贡献。我们一直坚信,开源社区的技术留痕是每一位技术人员最崇高的追求!因此,我们尊重,我们认可,我们更期待,加入Orillusion,让我们共同进步!

——Link uncharted, 链接未来世界

展开阅读全文

页面更新:2024-03-22

标签:版本   网格   变种   属性   分配   编号   能力   功能   引擎   社区

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top