Creamy3D

🌟 简介

Creamy 3D 是一个库,允许将简单的 3D 对象无缝集成到您的 SwiftUI 项目中。 使用交互式图标和 3D 视觉效果来丰富您的应用程序 UI。 它的材质系统从 Spline.design 汲取灵感。

🖥️ 代码示例

CreamyView {
    Mesh(source: .stl("order")) {
        MatcapMaterial(name: "matcap")
    }
    .resizable()
    .scaledToFit()
}

🎞 视频示例

ezgif com-video-to-gif

🛠️ 使用方法

要将模型注入到您的场景中,只需从 CreamyView 开始。 此视图采用其父容器的大小,并期望一个模型构建器作为输入参数。 采用与 SwiftUI 的 Image 修饰符类似的的设计原则,与您的模型交互感觉自然而直观。 例如,.resizable() 修饰符会缩放您的模型以占据整个容器空间。

🔍 技术细节

📜 计划功能

材质系统受到 spline.design 的启发,因此目标是使库能够重现任何视觉外观。

材质 状态 备注
颜色 ✅ 已完成
Matcap(材质捕捉) ✅ 已完成
菲涅尔 (Fresnel) 🟡 部分完成 缺少 Factor。 结果与 spline.design 不完全匹配
纹理 🟡 部分完成 目前仅基于 UV 采样
光照 ⚙ 进行中
法线 待办
深度 待办
渐变 待办
噪声 待办
彩虹 待办
轮廓 待办
玻璃 待办
图案 待办

该库提供了一些基本的原始形状,但目前没有计划使形状生成更高级。 主要重点将放在渲染来自文件的模型上。

网格 状态
球体 ✅ 已完成
立方体 ✅ 已完成
模型 🟡 部分完成
平面 待办
圆柱体 待办
锥体 待办
... 待办

计划支持最常见的后期处理效果。 列表尚未完整。

后期处理 状态
泛光 待办
色差 待办
... 待办

🚧 v0.3 计划 - 提供便捷的方式来组合材质

🚧 v0.4 计划 - 重新设计对象管理

CreamyView {
    Scene(name: "my_scene.usdz") {
        Object(name: "my object") { // Define materials for the object named "my object"
            ColorMaterial(color: .white)
            LightMaterial(type: .physical) {
                DirectionalLight(direction: .init(x: 1.0, y: 1.0, z: 0.0))
            }
        }
    }
}

🚧 v0.5 计划 - 高级动画

🤔 正在考虑的功能

Clonner(.grid(.init(x: 10, y: 10, z: 10)), spacing: 16.0) {
    Mesh(source: .sphere)
        .resizable()
        .frame(width: 50.0, height: 50.0)
}
Mesh(source: .sphere) {
    Transition(.fade, value: isSwitched) { value in
        if value {
            ColorMaterial(color: .red)
        } else {
            ColorMaterial(black: .black)
        }
    }
}