Skip to content

Commit 0b95ea0

Browse files
rafx and basis-universal (#501)
* rafx and basis-universal * Fix lints * Fix lints * Add a link to distill * trailing space * Reduce character count Co-authored-by: Joe Clay <[email protected]>
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

+76
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)