Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 0b95ea0

Browse filesBrowse 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
Copy full SHA for 0b95ea0

File tree

Expand file treeCollapse file tree

2 files changed

+76
-0
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+76
-0
lines changed

‎content/posts/newsletter-019/index.md

Copy file name to clipboardExpand all lines: content/posts/newsletter-019/index.md
+76Lines 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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.