Skip to content

Releases: BVE-Reborn/rend3

v0.3.0 - RenderGraphs and Animations

12 Feb 19:30
v0.3.0
d2a1717
Compare
Choose a tag to compare

Released 2022-02-11

This is by far the largest release of rend3 since 0.1. I have done my best to document everything that has changed.

Major Changes

  • rend3-pbr got renamed to rend3-routine and will host all render routines, not just PBR related ones.

Added

  • rend3-egui: An integration with the immediate mode GUI egui @MindSwipe
  • rend3-textured-quad: Add example of simple 2D rendering.
  • rend3: Allow duplicating objects overriding some of their properties. @setzer22
  • rend3: Implement mesh skinning. @setzer22
  • rend3: Added CameraProjection::Raw.
  • rend3: The renderer now has a handedness value that determines the handedness of its coordinate system.
    This allows the renderer to deal with both DX-convention coordinate systems and OpenGL convention coordinate systems.
  • rend3-gltf: Load gltf animation data @setzer22

Changes

  • rend3: Instead of passing a render routine to the render function,
    you now add them to a rendergraph, then pass that rendergraph into the renderer.
    • rend3-routine:
      • The old PbrRoutine has been replaced with the more vercitile BaseRenderGraph.
      • This base rendergraph will put all the parts together through it's add_to_graph function.
      • Split the PbrRoutine into two parts add_prepass_to_graph and add_forward_to_graph.
      • Split out the skybox renderer into SkyboxRoutine.
      • Split out tonemapping into the TonemappingRoutine.
  • rend3: Renamed the old RendererMode to RendererProfile and adjusted verbiage to refer to them as profiles.
    • "CpuPowered" => "CpuDriven".
    • "GpuPowered" => "GpuDriven".
  • rend3: All meshes now require validation.
    • MeshBuilder::new() now takes a handedness of the mesh. If it doesn't match the handedness of the renderer, it flips the winding order.
    • MeshBuilder::build() now returns a Result<Mesh, MeshValidationError>. This validation can be unsafely omitted.
    • The implementation functions Mesh::calculate_normals{,_for_buffers} and Mesh::calculate_tangents{,_for_buffers} are now unsafe.
  • rend3: Renamed CameraProjection::Projection to CameraProjection::Perspective.
  • rend3: Allow requesting device features explicitly in rend3::create_iad. @setzer22
  • rend3: Objects now take a mesk_kind allowind definition of static or animated meshes. @setzer22
  • rend3-routine: All transparency now has backface culling enabled. Use Mesh::double_side or MeshBuilder::with_double_side to re-enable double sided transparency.
  • rend3-gltf: Split return value of load_gltf into per-scene data and per-instance data. @setzer22
  • rend3-gltf: The nodes vector is now flat instead of nested. Hierarchy is represented using indices. @setzer22

Fixes

  • rend3: Fixed objects becoming invalid after a vertex buffer resize occured.
  • rend3: Get vertex/index counts from RangeAllocator. @jamen
  • rend3: Fix compatibility comparison for RenderPassTargets. @setzer22

v0.2.3 - Mesh Bug

15 Nov 15:00
v0.2.3
63c259f
Compare
Choose a tag to compare

Released 2021-11-15

Fixed

  • rend3: Objects weren't properly holding their meshes alive.

v0.2.2 - Texture Fixes

24 Oct 09:09
v0.2.2
8a56ba2
Compare
Choose a tag to compare

Released 2021-10-24

Fixed

  • rend3: Fixed bug where in gpu mode, changing textures would cause a brief flash.
  • rend3-pbr: Fixed normal mapping.
  • rend3-pbr: Fixed some UV transforms.

v0.2.1 - Crash Fixes

24 Oct 05:55
c6b40d8
Compare
Choose a tag to compare

Released 2021-10-24

Fixed

  • rend3: Fixed bug where materials would slowly drift out of sync with their internal tracking indices.
  • rend3: Fixed bug where the renderer would crash on close.
  • rend3: Fixed bug where changing a material's type would cause materials to go haywire.

v0.2.0 - Improved Materials

10 Oct 01:38
a7d4bd6
Compare
Choose a tag to compare

Released 2021-10-09

This release saw a signifigant amount of cpu side optimization.
In a 50k object scene, the render loop went from taking 16ms to taking 1.75ms, a 9x speedup

Added

  • rend3: Added an explicit dependency on wgpu-core and wgpu-hal to ensure bug-fixes are included.
  • rend3-gltf: Add the ability to turn off image's default features.
  • rend3-gltf: Add support for ktx2 and dds images.
  • rend3-gltf: Expose implementation functions
  • rend3-pbr-bake: Added crate for automatic light baking to a texture.

Changed

  • rend3: IMPORTANT: You now must call output.present() in order for things to show up on screen.
  • rend3: Material is now a trait and render routines can specify their own material.
    • rend3::types::Material is now rend3_pbr::material::PbrMaterial
    • Renderer::update_material no longer takes a MaterialChange, it takes a completely new material.
  • rend3: renderlists refactored to have a generic Input and Output.
    • Renderer::renderer passes through the Input and Output.
    • OutputFrame is now a user-side only utility.
  • rend3: AddTexture* will now create/upload the texture before the call returns.
  • rend3: ResourceHandle now prints the actual reference count while debug printing.
  • rend3: CameraProjection now deals with view matrix, instead of location/yaw/pitch @scoopr
  • rend3: Update to glam 0.19 @scoopr
  • rend3 & rend3-gltf: update to wgpu 0.11
  • rend3-pbr: Input is of type () and Output is type &TextureView.
  • rend3-gltf: Added labels to all the different data types.
  • rend3-gltf: Errors now use a SsoString instead of a String for the URI.
  • rend3-gltf: All implementation functions no longer write into a single &mut LoadedGltfScene, but return their results directly.

Fixed

  • rend3: No longer require pipeline rebuilds when bind group length updates.
  • rend3-pbr: fix rendering of cutout objects in shadow passes.
  • rend3-pbr: remove redundant material changes in cpu mode.

v0.1.2 - Shadow Rendering Fixes and Optimization

20 Sep 06:46
v0.1.2
6cb87ac
Compare
Choose a tag to compare

Released 2021-09-20

Added

  • rend3: Added an explicit dependency on wgpu-core and wgpu-hal to ensure bug-fixes are included.

Fixed

  • rend3-pbr: fix rendering of cutout objects in shadow passes.
  • rend3-pbr: remove redundant material changes in cpu mode.

v0.1.1 - Bugfixes

13 Sep 21:36
9384abb
Compare
Choose a tag to compare

Released 2021-09-13

Added

  • rend3-pbr: set_ambient_lighting sets the ambient light value, making sure no lighting result is less than ambient * color.

Fixed

  • rend3: properly exported ExtendedAdapterInfo

v0.1.0 - First Beta Release!

11 Sep 17:05
v0.1.0
103b525
Compare
Choose a tag to compare

Released 2021-09-11

Added

  • rend3: Materials now have a Transparency field that supports Opaque, Cutout, and Blend transparency modes.
  • rend3: AlbedoComponent::TextureVertexValue to represent texture * vertex * constant
  • rend3: Mipmaps can be generated automatically on the gpu without the user needing to upload them.
  • rend3: Renderer::add_texture_2d_from_texture which allows you to make a new texture from a set another texture's mipmaps.
  • rend3 & rend3-pbr: Use wgpu-profiler to generate GPU timings that show up as RendererStatistics.
  • rend3 & rend3-pbr: Annotate most code with profiling spans.
  • rend3 & rend3-pbr: Add a distance field that signifies how much space shadows should take up.
  • rend3-pbr: All major rendering spans are labeled and show up in renderdoc
  • rend3-pbr: Multisampling support
  • rend3-pbr: Support for transparency as well as stable gpu-culling to preserve transparency sort order.

Changed

  • rend3: SUBTLE All handles are now refcounted.
    • Handles are now !Copy. Functions taking handles now accept a reference to a handle.
    • If you want to keep something alive, you need to keep the handle to it alive.
    • Objects will keep Materials/Meshs alive.
    • Materials will keep Textures alive.
    • All resources are removed the render() after they are deleted.
  • rend3: Externalize all surfaces, adapters, devices, etc.
    • Instead of using a RendererBuilder, construct an Instance/Adapter/Device with rend::create_iad and pass that to Renderer::new.
    • Surfaces are now controlled by the user. There is a convinence function rend3::configure_surface to make this smoother.
  • rend3: Texture::width and Texture::height replaced with Texture::size
  • rend3: RendererStatistics is now an alias for Vec<wgpu_profiler::GpuTimerScopeResult>
  • rend3: Texture::mip_levels was split into mip_count and mip_source allowing you to easily auto-generate mipmaps.
  • rend3: Changed limits such that intel gets CPU mode until wgpu#1111 gets resolved.
  • rend3-pbr: creation and resizing's resolution argument replaced with options containing resolution and sample count.

Updated

  • Dependencies:
    • glam 0.17 -> 0.18

Fixed

  • rend3-pbr: Shadow artifacting due to incorrect face culling when rendering shadow passes
  • rend3-pbr: CPU mode drawing failed to account for proper vertex offsets
  • rend3-pbr: Non-normalized normal maps now work correctly.
  • rend3-pbr: Growing the GPU mode texture descriptor list no longer causes panic
  • rend3-gltf: albedo-texture UV transform is now respected
  • rend3-gltf: image loading now properly caches images

Removed

  • rend3: RendererBuilder replaced with explicit calls to Renderer::new.
  • rend3: Renderer::delete_* functions were removed in favor of refcounting.

v0.0.6 - Renderlist Rewrite

23 Aug 00:11
8c6ae29
Compare
Choose a tag to compare

Released 2021-08-22

Added

  • rend3_types crate with all datatypes.

Changed

  • rend3::datatypes is now renamed to rend3::types. It is a reexport of rend3_types.
  • rend3::types::TextureFormat is a reexport of wgpu_types::TextureFormat.
  • Replaced Renderlists with Render Routines
    • rend3_list crate is now rend3_pbr.
    • Swapchain mentions are now Surface.
    • set_options is now set_internal_surface_options
    • The following are now functions of the render routine:
      • resize is on both.
      • set_background_texture now takes an Option<TextureHandle> and there is no clear_background_texture.
  • log is now used for logging as opposed to tracing, so env_logger should be used over wgpu_subscriber.

Updated

  • wgpu 0.7 -> 0.10
  • glam 0.13 -> 0.17

Removed

  • span and span_transfer, due to tracing's removal.
  • All ties to switchyard.
  • Shader compiling infrastructure is gone, shaders must be wgsl or pre-compiled to spirv.

v0.0.5 - Bug Fix

18 Mar 06:03
Compare
Choose a tag to compare

Fixed

  • Fixed silly math error when converting to glam to v0.13.0.