zephyr3d v0.4.0 Released - 3D rendering framework for WebGL & WebGPU
<p><a href=https://github.com/gavinyork/zephyr3d rel="noopener noreferrer" target=_blank>Zephyr3d</a> is an open sourced 3d rendering framework for browsers that supports both WebGL and WebGPU, developed in TypeScript. </p><p><strong>Introduction</strong></p><p>Zephyr3d is primarily composed of two sets of APIs: the Device API and the Scene API.</p><ul><li>Device API<br>The Device API provides a set of low-level abstraction wrapper interfaces, allowing users to call the WebGL, WebGL2, and WebGPU graphics interfaces in the same way. These interfaces include most of the functionality of the underlying APIs, making it easy to support cross-API graphics rendering.</li><li>Scene API<br>The Scene API is a high-level rendering framework built on top of the DeviceAPI, serving as both a test environment for the Device API and a direct tool for graphics development. Currently, the Scene API has implemented features such as PBR rendering, cluster lighting, shadow mapping, terrain rendering, and post-processing.</li></ul><p><strong>changes in v0.4.0</strong></p><ul><li>Performance Optimization Rendering Pipeline Optimization<br>Optimize uniform data submission, reduce the number of RenderPass switches.<br>Optimize the performance of geometric instance rendering.<br>Customize the rendering queue cache within batches to reduce the CPU usage of rendering queue construction.</li><li>Command Buffer Reuse<br>Command Buffer Reuse can reduce CPU load, improve GPU utilization, and significantly improve rendering efficiency. This version now supports command buffer reuse for each rendering batch when using the WebGPU device (using GPURenderBundle), significantly improving the performance of the application.</li></ul><p>Demos:</p><p><a href="https://gavinyork.github.io/zephyr3d/tut/demo-0.html?dev=webgl2&ui=1" rel="noopener noreferrer" target=_blank>GLTF viewer</a></p><figure class="image image-style-align-left"><img data-mime-type data-original=https://uploads.gamedev.net/news/monthly_2024_04/e9f44ad7e5a74c04b7b8730d0693aca9.gltf.jpg decoding=async height=253 loading=lazy referrerpolicy=no-referrer sizes="(min-width: 1200px) 1200px, (min-width: 768px) 768px, (min-width: 300px) 300px, 100vw" src=https://uploads.gamedev.net/news/monthly_2024_04/medium.e9f44ad7e5a74c04b7b8730d0693aca9.gltf.webp srcset="https://uploads.gamedev.net/news/monthly_2024_04/thumbnail.e9f44ad7e5a74c04b7b8730d0693aca9.gltf.webp 150w, https://uploads.gamedev.net/news/monthly_2024_04/small.e9f44ad7e5a74c04b7b8730d0693aca9.gltf.webp 300w, https://uploads.gamedev.net/news/monthly_2024_04/medium.e9f44ad7e5a74c04b7b8730d0693aca9.gltf.webp 768w, https://uploads.gamedev.net/news/monthly_2024_04/large.e9f44ad7e5a74c04b7b8730d0693aca9.gltf.webp 1200w" style="aspect-ratio: 400/253;" width=400></figure><p><a href="https://gavinyork.github.io/zephyr3d/tut/demo-2.html?dev=webgl2&ui=1" rel="noopener noreferrer" target=_blank>Clustered lighting</a></p><figure class="image image-style-align-left"><img data-mime-type data-original=https://uploads.gamedev.net/news/monthly_2024_04/d573670993d445dc8e34566024e8f0cd.lights.jpg decoding=async height=254 loading=lazy referrerpolicy=no-referrer sizes="(min-width: 1200px) 1200px, (min-width: 768px) 768px, (min-width: 300px) 300px, 100vw" src=https://uploads.gamedev.net/news/monthly_2024_04/medium.d573670993d445dc8e34566024e8f0cd.lights.webp srcset="https://uploads.gamedev.net/news/monthly_2024_04/thumbnail.d573670993d445dc8e34566024e8f0cd.lights.webp 150w, https://uploads.gamedev.net/news/monthly_2024_04/small.d573670993d445dc8e34566024e8f0cd.lights.webp 300w, https://uploads.gamedev.net/news/monthly_2024_04/medium.d573670993d445dc8e34566024e8f0cd.lights.webp 768w, https://uploads.gamedev.net/news/monthly_2024_04/large.d573670993d445dc8e34566024e8f0cd.lights.webp 1200w" style="aspect-ratio: 400/254;" width=400></figure><p><a href="https://gavinyork.github.io/zephyr3d/tut/demo-1.html?dev=webgl2&ui=1" rel="noopener noreferrer" target=_blank>material system</a></p><figure class="image image-style-align-left"><img data-mime-type data-original=https://uploads.gamedev.net/news/monthly_2024_04/9d89c4d885594519a388efa2f2b61a04.material.jpg decoding=async height=247 loading=lazy referrerpolicy=no-referrer sizes="(min-width: 1200px) 1200px, (min-width: 768px) 768px, (min-width: 300px) 300px, 100vw" src=https://uploads.gamedev.net/news/monthly_2024_04/medium.9d89c4d885594519a388efa2f2b61a04.material.webp srcset="https://uploads.gamedev.net/news/monthly_2024_04/thumbnail.9d89c4d885594519a388efa2f2b61a04.material.webp 150w, https://uploads.gamedev.net/news/monthly_2024_04/small.9d89c4d885594519a388efa2f2b61a04.material.webp 300w, https://uploads.gamedev.net/news/monthly_2024_04/medium.9d89c4d885594519a388efa2f2b61a04.material.webp 768w, https://uploads.gamedev.net/news/monthly_2024_04/large.9d89c4d885594519a388efa2f2b61a04.material.webp 1200w" style="aspect-ratio: 400/247;" width=400></figure><p><a href="https://gavinyork.github.io/zephyr3d/tut/demo-3.html?dev=webgl2&ui=1" rel="noopener noreferrer" target=_blank>Outdoor rendering</a></p><figure class="image image-style-align-left"><img data-mime-type data-original=https://uploads.gamedev.net/news/monthly_2024_04/57103b7ae9ea4eba99569c3239d38bf3.terrain.jpg decoding=async height=250 loading=lazy referrerpolicy=no-referrer sizes="(min-width: 1200px) 1200px, (min-width: 768px) 768px, (min-width: 300px) 300px, 100vw" src=https://uploads.gamedev.net/news/monthly_2024_04/medium.57103b7ae9ea4eba99569c3239d38bf3.terrain.webp srcset="https://uploads.gamedev.net/news/monthly_2024_04/thumbnail.57103b7ae9ea4eba99569c3239d38bf3.terrain.webp 150w, https://uploads.gamedev.net/news/monthly_2024_04/small.57103b7ae9ea4eba99569c3239d38bf3.terrain.webp 300w, https://uploads.gamedev.net/news/monthly_2024_04/medium.57103b7ae9ea4eba99569c3239d38bf3.terrain.webp 768w, https://uploads.gamedev.net/news/monthly_2024_04/large.57103b7ae9ea4eba99569c3239d38bf3.terrain.webp 1200w" style="aspect-ratio: 400/250;" width=400></figure><p><a href="https://gavinyork.github.io/zephyr3d/tut/demo-5.html?dev=webgl2&ui=1" rel="noopener noreferrer" target=_blank>geometry instancing</a></p><figure class="image image-style-align-left"><img data-mime-type data-original=https://uploads.gamedev.net/news/monthly_2024_04/270e486fc022418e84b8da7862f11529.instancing.jpg decoding=async height=253 loading=lazy referrerpolicy=no-referrer sizes="(min-width: 1200px) 1200px, (min-width: 768px) 768px, (min-width: 300px) 300px, 100vw" src=https://uploads.gamedev.net/news/monthly_2024_04/medium.270e486fc022418e84b8da7862f11529.instancing.webp srcset="https://uploads.gamedev.net/news/monthly_2024_04/thumbnail.270e486fc022418e84b8da7862f11529.instancing.webp 150w, https://uploads.gamedev.net/news/monthly_2024_04/small.270e486fc022418e84b8da7862f11529.instancing.webp 300w, https://uploads.gamedev.net/news/monthly_2024_04/medium.270e486fc022418e84b8da7862f11529.instancing.webp 768w, https://uploads.gamedev.net/news/monthly_2024_04/large.270e486fc022418e84b8da7862f11529.instancing.webp 1200w" style="aspect-ratio: 400/253;" width=400></figure><p><a href="https://gavinyork.github.io/zephyr3d/tut/demo-4.html?dev=webgl2&ui=1" rel="noopener noreferrer" target=_blank>Physics</a></p><figure class="image image-style-align-left"><img data-mime-type data-original=https://uploads.gamedev.net/news/monthly_2024_04/717c7544c87546d2a41aa6ba10b297bc.physics.jpg decoding=async height=252 loading=lazy referrerpolicy=no-referrer sizes="(min-width: 1200px) 1200px, (min-width: 768px) 768px, (min-width: 300px) 300px, 100vw" src=https://uploads.gamedev.net/news/monthly_2024_04/medium.717c7544c87546d2a41aa6ba10b297bc.physics.webp srcset="https://uploads.gamedev.net/news/monthly_2024_04/thumbnail.717c7544c87546d2a41aa6ba10b297bc.physics.webp 150w, https://uploads.gamedev.net/news/monthly_2024_04/small.717c7544c87546d2a41aa6ba10b297bc.physics.webp 300w, https://uploads.gamedev.net/news/monthly_2024_04/medium.717c7544c87546d2a41aa6ba10b297bc.physics.webp 768w, https://uploads.gamedev.net/news/monthly_2024_04/large.717c7544c87546d2a41aa6ba10b297bc.physics.webp 1200w" style="aspect-ratio: 400/252;" width=400></figure><p><a href="https://gavinyork.github.io/zephyr3d/tut/demo-6.html?dev=webgpu&ui=1" rel="noopener noreferrer" target=_blank>Drawcall benchmark(requires WebGPU)</a></p><figure class="image image-style-align-left"><img data-mime-type data-original=https://uploads.gamedev.net/news/monthly_2024_04/8aa52e9f5aab4dea9a7383829a8ff99d.commandbufferreuse.jpg decoding=async height=230 loading=lazy referrerpolicy=no-referrer sizes="(min-width: 1200px) 1200px, (min-width: 768px) 768px, (min-width: 300px) 300px, 100vw" src=https://uploads.gamedev.net/news/monthly_2024_04/medium.8aa52e9f5aab4dea9a7383829a8ff99d.commandbufferreuse.webp srcset="https://uploads.gamedev.net/news/monthly_2024_04/thumbnail.8aa52e9f5aab4dea9a7383829a8ff99d.commandbufferreuse.webp 150w, https://uploads.gamedev.net/news/monthly_2024_04/small.8aa52e9f5aab4dea9a7383829a8ff99d.commandbufferreuse.webp 300w, https://uploads.gamedev.net/news/monthly_2024_04/medium.8aa52e9f5aab4dea9a7383829a8ff99d.commandbufferreuse.webp 768w, https://uploads.gamedev.net/news/monthly_2024_04/large.8aa52e9f5aab4dea9a7383829a8ff99d.commandbufferreuse.webp 1200w" style="aspect-ratio: 400/230;" width=400></figure><p><a href="https://gavinyork.github.io/zephyr3d/tut/demo-7.html?dev=webgpu&ui=1" rel="noopener noreferrer" target=_blank>Order-Independent-Transparency</a></p><figure class="image image-style-align-left"><img data-mime-type data-original=https://uploads.gamedev.net/news/monthly_2024_04/9ffdbe6904e64ad3aff6e6331402f397.oit.jpg decoding=async height=231 loading=lazy referrerpolicy=no-referrer sizes="(min-width: 1200px) 1200px, (min-width: 768px) 768px, (min-width: 300px) 300px, 100vw" src=https://uploads.gamedev.net/news/monthly_2024_04/medium.9ffdbe6904e64ad3aff6e6331402f397.oit.webp srcset="https://uploads.gamedev.net/news/monthly_2024_04/thumbnail.9ffdbe6904e64ad3aff6e6331402f397.oit.webp 150w, https://uploads.gamedev.net/news/monthly_2024_04/small.9ffdbe6904e64ad3aff6e6331402f397.oit.webp 300w, https://uploads.gamedev.net/news/monthly_2024_04/medium.9ffdbe6904e64ad3aff6e6331402f397.oit.webp 768w, https://uploads.gamedev.net/news/monthly_2024_04/large.9ffdbe6904e64ad3aff6e6331402f397.oit.webp 1200w" style="aspect-ratio: 400/231;" width=400></figure>
Discussion