19个版本 (破坏性)

0.16.0 2024年6月13日
0.14.0 2024年1月9日
0.12.1 2023年5月28日
0.11.0 2023年1月7日
0.6.0 2022年5月27日

#69 in 图像

Download history 153/week @ 2024-05-02 178/week @ 2024-05-09 148/week @ 2024-05-16 122/week @ 2024-05-23 119/week @ 2024-05-30 163/week @ 2024-06-06 227/week @ 2024-06-13 197/week @ 2024-06-20 144/week @ 2024-06-27 99/week @ 2024-07-04 108/week @ 2024-07-11 142/week @ 2024-07-18 187/week @ 2024-07-25 162/week @ 2024-08-01 160/week @ 2024-08-08 105/week @ 2024-08-15

每月645次下载
3个crate中使用(通过fundsp

MIT/Apache

3.5MB
4K SLoC

FunUTD

crates.io License

Fun通用纹理定义

FunUTD是一个运行在CPU上的3-D程序纹理库。这是一个正在快速开发的alpha版本,可能存在一些粗糙的边缘。

功能

  • 不同的平铺模式,包括所有3个维度的平铺
  • 无限供应的程序生成、自我描述的体积纹理
  • 各向同性值噪声、各向异性梯度噪声和沃罗诺伊基
  • 使用Okhsv和Okhsl颜色空间生成调色板
  • 交互式纹理探索器(在示例editor中)
  • no_std支持(通过禁用std功能启用)

基础知识

纹理生成器返回的类型是Box<dyn Texture>Texture是由程序纹理实现的特质。

基本操作是使用at方法查询3-D空间中纹理在一点的值。该值是另一个3-D向量。

纹理值的典型范围是每个分量-1...1。这也适用于调色板组件。

某些分量可能略微超出范围,而其他分量可能低于范围。许多一元节点,如reflectvreflectsaturateoverdrive,将任何范围重新映射回-1...1。

程序生成数据包含在Dna对象中,这些对象包含在生成过程中传递的必要上下文。生成函数从提供的Dna对象中绘制所需的数据。

纹理可以自我描述,即打印生成它们的代码。这是通过使用get_code方法完成的。获取的代码可以复制粘贴并进一步审查。

平铺模式

平铺模式——纹理是否在每个维度上无缝循环——是通过哈希器参数实现的。

当前实现的平铺模式包括

  • tile_none() - 所有轴均不铺砖。
  • tile_all() - 空间被单位立方体的副本填充,纹理频率四舍五入到最接近的整数。
  • tile_xy() - 对于每个固定的 zxy 平面被单位正方形的副本填充,而在 z 维度移动产生无限变化。纹理频率四舍五入到最接近的整数。
  • tile_z() - 在 xy 平面移动产生无限变化,纹理在 z 轴上以整数间隔重复。纹理频率四舍五入到最接近的整数。

要铺砖成不同于单位立方体或正方形的形状

  • tile_all_in(x, y, z) - 空间被 (x, y, z) 大小的箱子副本填充。纹理频率四舍五入到最接近的整数。
  • tile_xy_in(x, y) - 对于每个固定的 zxy 平面被 (x, y) 大小的矩形副本填充,而在 z 维度移动产生无限变化。纹理频率四舍五入到最接近的整数。
  • tile_z_in(z) - 在 xy 平面移动产生无限变化,纹理在 z 轴上以 z 为间隔重复。纹理频率四舍五入到最接近的整数。

未来

Dna 对象可以被突变或交叉以创建基因型的变体或优化纹理以适应特定用途。

纹理探索器

纹理探索器是一个正在进行中的项目,可以在示例 editor 下找到。

它支持探索式的工作流程:点击其中一个小图像,其他图像将成为它的突变。

当前选中纹理的代码显示在大幅图像下方。您可以点击“复制代码”将其复制到剪贴板。

代码可以直接粘贴到源代码中。只需将序言导入粘贴位置即可(use funutd::prelude::*;)。

树形参数显示在屏幕右侧,也可以在那里进行编辑。

突变模式

突变模式决定了如何进行突变

  • 任何:参数被任意更改。
  • 微调:仅更改非结构参数。


示例

这些示例来自 FunUTD 的早期版本。

palette(
    Space::HSL,
    0.160739,
    0.401973,
    0.250040,
    0.234684,
    displace(
        0.10390177,
        layer(
            2.4686515,
            layer(
                3.0395193,
                noise(4077839245, 11.842703, tile_all()),
                vnoise(1246086663, 12.16001, Ease::Smooth5, tile_all()),
            ),
            rotate(
                9.744911,
                vnoise(3984989388, 8.905142, Ease::Smooth5, tile_all()),
                vnoise(168447214, 5.8911786, Ease::Smooth5, tile_all()),
            ),
        ),
        reflect(
            1.884496,
            vec3(0.5632216, -0.31983083, -0.7500508),
            fractal(
                7.6917915,
                5,
                0.50210387,
                2.4051504,
                0.0,
                2.0523214,
                worley_basis(3902470283, tile_all(), 7, 10, 17),
            ),
        ),
    ),
)


palette(
    Space::HSL,
    0.550072,
    0.228674,
    0.165266,
    0.317444,
    saturate(
        8.597511,
        fractal(
            5.8026867,
            4,
            0.5642442,
            2.114186,
            0.07022904,
            1.0159429,
            displace(
                0.15992701,
                voronoi_basis(1401237949, tile_all(), 10, 25, 7),
                worley_basis(785949362, tile_all(), 0, 22, 14),
            ),
        ),
    ),
)


许可

本软件授权许可为Apache License, Version 2.0MIT许可证,您可自行选择。

除非您明确声明,否则您提交给FunUTD并有意包含在内的任何贡献,根据Apache-2.0许可证的定义,将按上述方式双授权,不附加任何额外条款或条件。

依赖项

约5.5MB
约137K SLoC