|
@@ -15,8 +15,8 @@ with the following new features:
|
|
|
- Rounded rectangles with thickness, great for VR UI
|
|
|
- Mouse input
|
|
|
|
|
|
-This is a massive release with lots to chew on, so let's try to break things down into atomic,
|
|
|
-bite-sized pieces!
|
|
|
+This is a massive release with lots to chew on, so let's break things down into atomic, bite-sized
|
|
|
+pieces!
|
|
|
|
|
|
Passthrough
|
|
|
---
|
|
@@ -35,10 +35,13 @@ Blend Shapes
|
|
|
squishing, which is difficult to implement with skeletal animation. `Model:setBlendShapeWeight`
|
|
|
sets the weight of a blend shape, and weights can be animated with keyframe animations as well.
|
|
|
|
|
|
+<video controls loop src="/img/blend-shapes.mp4"></video>
|
|
|
+
|
|
|
They also use compute shaders instead of vertex shaders. This means:
|
|
|
|
|
|
- There's no limit on the number of active blend shapes
|
|
|
-- They won't be evaluated multiple times when there are multiple cameras
|
|
|
+- They won't be evaluated multiple times when there are multiple cameras, or when a model is drawn
|
|
|
+ multiple times in the same pose
|
|
|
- Extra style points
|
|
|
|
|
|
Roundrect
|
|
@@ -48,12 +51,19 @@ Thick rounded rectangles are a very common shape to use for UI in VR. Previousl
|
|
|
generate meshes, import them as models, use SDF shaders, or piece them together with cylinders and
|
|
|
boxes. Now, `Pass:roundrect` is built in!
|
|
|
|
|
|
+<img src="/img/vqwerty.png" alt="A virtual keyboard made of rounded rectangles" class="flat"/>
|
|
|
+
|
|
|
+Pictured above is [chui](https://github.com/jmiskovic/chui), a UI library made entirely of these
|
|
|
+rounded rectangles!
|
|
|
+
|
|
|
TerrainShape
|
|
|
---
|
|
|
|
|
|
`TerrainShape` is a new physics shape that lets you add heightfields to physics simulations. Terrain
|
|
|
can be provided as an `Image`, or as a Lua function for procedural terrain.
|
|
|
|
|
|
+<video controls loop src="/img/terrain.mp4"></video>
|
|
|
+
|
|
|
Frustum Culling
|
|
|
---
|
|
|
|
|
@@ -61,9 +71,11 @@ Frustum culling is an optimization that skips rendering objects that are out of
|
|
|
with content surrounding the player, this is a quick way to reduce GPU overhead, especially when
|
|
|
objects have lots of vertices.
|
|
|
|
|
|
-Frustum culling can be enabled using `Pass:setViewCull(true)`, which will cull objects that have
|
|
|
-bounding boxes. `Model` objects and most shape primitives have bounding boxes, and a `Mesh` can
|
|
|
-compute its bounds using `Mesh:computeBoundingBox`.
|
|
|
+<video controls loop src="/img/frustum-culling.mp4"></video>
|
|
|
+
|
|
|
+Frustum culling can be enabled using `Pass:setViewCull`. Any object with a bounding box will be
|
|
|
+culled against the cameras, including `Model` objects and most shape primitives. `Mesh` objects can
|
|
|
+compute their bounding boxes with `Mesh:computeBoundingBox`.
|
|
|
|
|
|
Plugins
|
|
|
---
|
|
@@ -101,6 +113,8 @@ also have names, and buffer data can be given as key-value pairs instead of only
|
|
|
Finally, you can also send a table directly to a uniform buffer variable instead of needing to
|
|
|
create a buffer first.
|
|
|
|
|
|
+ pass:send('lightData', { position = vec3(x, y, z), color = 0xffffee })
|
|
|
+
|
|
|
Graphics Improvements
|
|
|
---
|
|
|
|
|
@@ -151,6 +165,12 @@ compute shader dispatches within a pass. Since computes within a pass all ran a
|
|
|
previously had to use multiple Pass objects to get computes to wait for each other, which is costly.
|
|
|
With `Pass:barrier`, all computes before the barrier will finish before further compute work starts.
|
|
|
|
|
|
+ pass:setShader(computer)
|
|
|
+ pass:compute()
|
|
|
+ pass:compute()
|
|
|
+ pass:barrier()
|
|
|
+ pass:compute() --> this compute will wait for the first two
|
|
|
+
|
|
|
Headless VR
|
|
|
---
|
|
|
|
|
@@ -231,15 +251,15 @@ volume.
|
|
|
Community
|
|
|
---
|
|
|
|
|
|
-LÖVR's Slack is now deprecated because it held our messages hostage! We migrated all the chat
|
|
|
+LÖVR's Slack is now deprecated because Slack held our messages hostage! We migrated all the chat
|
|
|
history over to a [Matrix](https://matrix.org) homeserver hosted on `#community:lovr.org` and
|
|
|
bridged everything to a new Discord server. Keeping the source of truth for chat on a self-hosted,
|
|
|
open source platform ensures the community is hopefully a bit more resilient to future corporate
|
|
|
monkey business.
|
|
|
|
|
|
Speaking of corporate monkey business, LÖVR has entrenched itself further into the GitHub ecosystem
|
|
|
-by adding continuous releases via GitHub Actions! This means us mere mortals can have up-to-date
|
|
|
-builds for all platforms without needing to touch CMake or anything related to Android Studio.
|
|
|
+by adding continuous builds via GitHub Actions! This means us mere mortals can have up-to-date
|
|
|
+builds for all platforms without touching CMake or the Android SDK.
|
|
|
|
|
|
For the remaining masochists among us who choose to build LÖVR from source, there has been a change
|
|
|
to the branching system. The `dev` branch is now the default branch, and `master` has been renamed
|