Aura3D:Avalonia平台3D控件

随着Avalonia生态日益丰富,3D可视化需求逐渐从边缘场景走向核心应用。然而目前没有开箱即用轻量级的3D控件。为此我为 Avalonia 开发了一款3D控件:Aura3D

https://github.com/CeSun/Aura3D

使用它可以轻松的加载3D模型进行展示,丰富客户端表现效果,同时它支持自定义渲染管线,允许有能力的用户扩展自己的渲染风格,掌握每一个渲染细节。

功能特性

Aura3D的定位是轻量级的3D框架,它的接口设计简单,目的是为了Avalonia开发者能轻松的使用它丰富自己的客户端表现。当您的软件是大量的UI元素,包含少部分的3D模型展示建议您尝试使用Aura3D。如果您的软件3D是核心交互,建议使用Unity3D和UnrealEngine等技术。

目前Aura3D已经支持:

  • 布林冯光照模型
  • 静态模型渲染
  • 蒙皮动画渲染
  • 自定义渲染管线

更多的功能正在开发中,例如卡通渲染管线,实例化渲染(大量相同模型),软阴影,以及基于物理的渲染等。

欢迎有需求的用户提出真实的需求帮助我来完善Aura3D。

商业化

Aura3D本身以及源码完全免费,并承诺永远MIT协议开源。后续可能会提供付费的技术支持以及性能优化与管线定制。

如何使用

在 Avalonia 项目中添加 Aura3D.Avalonia 包:

dotnet add package Aura3D.Avalonia

然后在你的项目中使用 Aura3DView 控件, 并绑定 SceneInitialized 事件:

<Window
    ...
    xmlns:aura3d="clr-namespace:Aura3D.Avalonia;assembly=Aura3D.Avalonia"
    ...>
	<aura3d:Aura3DView x:Name="aura3Dview" SceneInitialized="OnSceneInitialized"/>
</Window>

在 SceneInitialized 事件中,初始化你的场景:

public void OnSceneInitialized(object sender, RoutedEventArgs args)
{

    var view = (Aura3DView)sender;

    camera = new Camera();           // 定义一个相机

    camera.ClearColor = Color.Gray;  // 相机背景为灰色

    view.AddNode(camera);            // 将相机添加到场景中

    DirectionalLight dl = new DirectionalLight();    // 定义一个方向光

    dl.RotationDegrees = new Vector3(-45, 45, 0);    // 调整方向

    dl.CastShadow = true;                            // 允许投射阴影

    view.AddNode(dl);                                // 将光源添加到场景中

    using var s = AssetLoader.Open(new Uri("avares://Example/Assets/Models/Soldier.glb"));

    var (model, animations) = ModelLoader.LoadGlbModelAndAnimations(s);   // 加载glb格式模型

    model.AnimationSampler = new AnimationSampler(animations.First());    // 设置动画

    view.AddNode(model);                                                  // 将模型添加到场景中

    model.Position = camera.Position + camera.Forward * 10; 

    model.Position += model.Up * 0.5f;

    model.RotationDegrees = new Vector3(0, 180, 0);

    camera.Position = camera.Position + camera.Up * 2 + camera.Forward * 3;

    camera.Position = camera.Position + camera.Forward * 3;

}
posted @ 2025-10-13 16:25  布布(CeSun)  阅读(200)  评论(4)    收藏  举报