volren-gpu 0.2.0

wgpu-based GPU volume renderer for volren-rs
Documentation
struct VolumeUniforms {
    mvp: mat4x4<f32>,
    inv_mvp: mat4x4<f32>,
    world_to_volume: mat4x4<f32>,
    volume_to_world: mat4x4<f32>,

    dimensions: vec4<f32>,
    spacing: vec4<f32>,
    scalar_range: vec4<f32>,

    step_size: f32,
    opacity_correction: f32,
    blend_mode: u32,
    shading_enabled: u32,

    ambient: f32,
    diffuse: f32,
    specular: f32,
    specular_power: f32,

    light_position: vec4<f32>,
    camera_position: vec4<f32>,

    window_center: f32,
    window_width: f32,
    num_clip_planes: u32,
    _pad0: u32,

    clip_planes: array<vec4<f32>, 6>,
    background: vec4<f32>,
};

@group(0) @binding(0) var<uniform> u: VolumeUniforms;
@group(0) @binding(1) var vol_tex: texture_3d<f32>;
@group(0) @binding(2) var vol_samp: sampler;
@group(0) @binding(3) var lut_tex: texture_1d<f32>;
@group(0) @binding(4) var lut_samp: sampler;
@group(0) @binding(5) var grad_lut_tex: texture_1d<f32>;
@group(0) @binding(6) var grad_lut_samp: sampler;

const BLEND_COMPOSITE: u32 = 0u;
const BLEND_MAX_INTENSITY: u32 = 1u;
const BLEND_MIN_INTENSITY: u32 = 2u;
const BLEND_AVERAGE_INTENSITY: u32 = 3u;
const BLEND_ADDITIVE: u32 = 4u;
const BLEND_ISOSURFACE: u32 = 5u;

const OPACITY_EARLY_EXIT: f32 = 0.99;
const MAX_STEPS: u32 = 2000u;