Skip to content

Commit 0b95ea0

Browse files
rafx and basis-universal (rust-gamedev#501)
* rafx and basis-universal * Fix lints * Fix lints * Add a link to distill * trailing space * Reduce character count Co-authored-by: Joe Clay <27cupsofcoffee@gmail.com>
1 parent d3824cb commit 0b95ea0

File tree

2 files changed

+76
-0
lines changed

2 files changed

+76
-0
lines changed

content/posts/newsletter-019/index.md

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,82 @@ this in action!
186186

187187
## Library & Tooling Updates
188188

189+
### [Rafx][rafx-github]
190+
191+
![Screenshot from Rafx Rendering Framework](rafx-screenshot.png)
192+
193+
Rafx is a multi-backend renderer that optionally integrates with the
194+
[distill][rafx-distill] asset pipeline. Rafx is divided into three tiers of
195+
functionality:
196+
197+
`rafx-api` provides a custom GPU API abstraction layer that currently supports
198+
vulkan and metal. ([API in rust psuedocode][rafx-api-design])
199+
200+
`rafx-framework` builds on the API layer using ideas found in modern shipping
201+
AAA titles. Rendering is pipelined in a separate thread in three phases, using
202+
jobs to extract data from the main thread, process the data on the render
203+
thread, and write the draw calls to command buffers.
204+
[[Tatarchuk 2015][rafx-gdc-2015]] A render graph ensures correct
205+
synchronization. [[O'Donnell 2017][rafx-gdc-2017]] The framework also provides
206+
a material abstraction and shader pipeline.
207+
208+
`rafx-assets` adds integration with the [distill][rafx-distill] asset pipeline.
209+
This ensures that when an asset like a mesh is loaded, other related assets
210+
like textures/material/vertex data are loaded. By integrating with distill,
211+
rafx provides advanced features like streaming live asset updates to remote
212+
devices.
213+
214+
More information about rafx:
215+
216+
- [Github][rafx-github]
217+
- [Documentation][rafx-documentation]
218+
- [Why Rafx?][why-rafx] (includes similarities/differences with other rust
219+
and non-rust alternatives)
220+
221+
[rafx-github]: https://github.com/aclysma/rafx
222+
[rafx-documentation]: https://github.com/aclysma/rafx/blob/master/docs/index.md
223+
[why-rafx]: https://github.com/aclysma/rafx/blob/master/docs/why_rafx.md
224+
[rafx-api-design]: https://github.com/aclysma/rafx/blob/master/docs/api/api_design_in_rust_psuedocode.rs
225+
[rafx-api-triangle-example]: https://github.com/aclysma/rafx/blob/master/rafx/examples/api_triangle/api_triangle.rs
226+
[rafx-gdc-2015]: http://advances.realtimerendering.com/destiny/gdc_2015/Tatarchuk_GDC_2015__Destiny_Renderer_web.pdf
227+
[rafx-gdc-2017]: https://www.gdcvault.com/play/1024612/FrameGraph-Extensible-Rendering-Architecture-in
228+
[rafx-distill]: https://github.com/amethyst/distill
229+
230+
### [basis-universal-rs]
231+
232+
`basis-universal` provides bindings for [Binomial LLC][binomial-llc]'s
233+
[Basis Universal texture codec][basis-universal-upstream].
234+
235+
Basis Universal is a state-of-the art
236+
[supercompressed][basis-universal-supercompression] texture codec that
237+
was recently [open-sourced][basis-universal-open-sourced] by Binomial in
238+
partnership with Google. It was
239+
[contributed][basis-universal-contributed-kronos] to the Khronos glTF
240+
3D Transmission Open Standard.
241+
242+
The library has two primary uses:
243+
244+
- Compresses and encode textures "offline" to a custom format
245+
- Transcoding: Unpack the custom format directly to GPU-friendly compressed
246+
formats. The final format can be chosen at game runtime to be compatible
247+
with available GPU hardware.
248+
249+
Basis universal format can also store mipmapped textures and cubemaps,
250+
neither of which is possible with "normal" file formats. Mipmaps can be
251+
generated by the library during compression.
252+
253+
Compression is very slow (around 7-10s for a 2k texture) but transcoding is
254+
relatively fast (around 5-40ms for a 2k texture depending on quality). Memory
255+
savings at runtime are generally >= 75% (depending on the transcode format
256+
and quality)
257+
258+
[binomial-llc]: http://www.binomial.info
259+
[basis-universal-rs]: https://github.com/aclysma/basis-universal-rs
260+
[basis-universal-upstream]: https://github.com/BinomialLLC/basis_universal
261+
[basis-universal-supercompression]: http://gamma.cs.unc.edu/GST/gst.pdf
262+
[basis-universal-open-sourced]: https://opensource.googleblog.com/2019/05/google-and-binomial-partner-to-open.html
263+
[basis-universal-contributed-kronos]: https://www.khronos.org/blog/google-and-binomial-contribute-basis-universal-texture-format-to-khronos-gltf-3d-transmission-open-standard
264+
189265
### [egui]
190266

191267
![The plot thickens](egui-plot.gif)
Loading

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy