#distance-field #sdf #signed #utilities #vec3 #math #function

sdfu

符号距离场(函数)实用工具。包含创建、组合、修改和使用用于计算机图形的解析SDF的函数。

7个不稳定版本

0.3.1-alpha.12021年12月14日
0.3.0 2020年9月8日
0.2.0 2019年11月14日
0.1.2 2019年9月24日
0.0.1 2019年9月23日

#229 in 图形API

每月37次下载
2 个包中使用(通过 building_blocks_core

MIT/Apache

1MB
1.5K SLoC

sdfu - 符号距离场实用工具

这是一个小型包,旨在帮助在计算机图形的符号距离场上下文中进行工作,特别是基于光线追踪的渲染器。这里的大部分内容都是基于 Inigo Quilez 优秀的文章

如果您正在使用Rust中更受欢迎的数学库之一,那么只需启用相应的功能(目前,支持 ultravioletnalgebravek)并且希望所有必要的特性和特质已经为您实现,这样您就可以开始传递您的 Vec3 或您库中称为的任何东西,并开始比赛!如果不是这样,您可以在 mathtypes 模块中实现必要的特性和特质,并仍然使用您自己的数学库使用此库。

演示

demo image

上面的图像是用我的自己的路径追踪渲染器 rayn 通过利用 sdfu 渲染的。上面的渲染SDF是用以下代码创建的

use sdfu::SDF;
use ultraviolet::Vec3;

let sdf = sdfu::Sphere::new(0.45)
    .subtract(
        sdfu::Box::new(Vec3::new(0.25, 0.25, 1.5)))
    .union_smooth(
        sdfu::Sphere::new(0.3).translate(Vec3::new(0.3, 0.3, 0.0)),
        0.1)
    .union_smooth(
        sdfu::Sphere::new(0.3).translate(Vec3::new(-0.3, 0.3, 0.0)),
        0.1)
    .subtract(
        sdfu::Box::new(Vec3::new(0.125, 0.125, 1.5)).translate(Vec3::new(-0.3, 0.3, 0.0)))
    .subtract(
        sdfu::Box::new(Vec3::new(0.125, 0.125, 1.5)).translate(Vec3::new(0.3, 0.3, 0.0)))
    .subtract(
        sdfu::Box::new(Vec3::new(1.5, 0.1, 0.1)).translate(Vec3::new(0.0, 0.3, 0.0)))
    .subtract(
        sdfu::Box::new(Vec3::new(0.2, 2.0, 0.2)))
    .translate(Vec3::new(0.0, 0.0, -1.0));

依赖关系