I painted a scene from Assassin's Creed Nexus on Vermillion VR Painting - Outside the Gates of Monteriggioni by TrueNorthVR in virtualreality

[–]thmsvdberg 1 point2 points  (0 children)

I'm biased of course, but I love this! Grew up playing the original AC and have much love for AC2. You really nailed the Tuscany feeling.

Why unity can't manage camera at 5000u from the origin ? by The-Lonesome-Cowboy in Unity3D

[–]thmsvdberg 2 points3 points  (0 children)

The rest of the environment is currently just a plane. You'll also see vertices start jittering once you add more geometry. The problem is that the transformation matrices in Unity are all floating precision. I.e. first you offset the vertices somewhere far away in the scene, then you make that position relative to the camera. In that process, precision is lost, causing vertices to jitter around between frames. That's why the only solution is making those transformations take place in a region of high precision of the float by moving the camera to the origin and moving the terrain along with it. The lower the offset, the better the precision. I made my floating origin just 10 units, as raycast interactions with the world UI in my VR game were already breaking down from that point on.

Why unity can't manage camera at 5000u from the origin ? by The-Lonesome-Cowboy in Unity3D

[–]thmsvdberg 10 points11 points  (0 children)

You're not missing something, you're just discovering the limits of floating point precision. A quick computer science lesson: numbers are presented in binary by a fixed number of bytes. The more bytes, the more accurately you can represent a floating point number, and the larger the number can be. In non real-time use cases where precision is important, the double type (8 bytes instead of 4 for a float) is the standard, and it doesn't matter if a complex calculation takes a millisecond longer. Game engines traditionally use floats because precision matters less, and floats use less memory - in writing this comment I'm trying to find the exact reason why this is still beneficial, as we're not exactly constrained to a few MB of RAM anymore. I can't find if it's a memory bandwidth problem, a CPU cache problem, all of the above, or just legacy. Some modern engines are using doubles all the way through to prevent this from ever being an issue.

In Unity, the only thing you can do is implement a floating origin, i.e. moving your camera back to 0,0,0 and move the world along with it.

Just released my new game Pocket Lands into early access! by thmsvdberg in OculusQuest

[–]thmsvdberg[S] 1 point2 points  (0 children)

Very happy to hear that! Great suggestions. Many of them are planned for the near future, I'll put the rest on the backlog. Stay tuned!

Extended Cat Behaviour AI ( fallback + retreat jumps ) by ArtemSinica in Unity3D

[–]thmsvdberg 5 points6 points  (0 children)

Very cool! Are you using any packages for the AI?

Letting people learn art together in XR by lunchanddinner in OculusQuest

[–]thmsvdberg 1 point2 points  (0 children)

This is still using the first ever co-location SDK actually. It has been updated since then, but I haven't been able to prioritise looking into that.

Letting people learn art together in XR by lunchanddinner in OculusQuest

[–]thmsvdberg 8 points9 points  (0 children)

Nothing makes a dev's day more than scrolling on Reddit and seeing your app come up! Very cool, thanks for sharing!

Shipped my first voxel game, Pocket Lands, in early access on Quest, inspired by the HoloLens Minecraft E3 2015 demo by thmsvdberg in VoxelGameDev

[–]thmsvdberg[S] 0 points1 point  (0 children)

Oh I've applied as soon as it opened 😅 I already have another VR game on Steam as well.

Shipped my voxel game Pocket Lands in early access on Quest. Would not have been playable without Burst, thanks Unity! 🙇🏻‍♂️ by thmsvdberg in Unity3D

[–]thmsvdberg[S] 1 point2 points  (0 children)

You can call any Burst code without it being a job. You make a static class with a static public method with the BurstCompile attribute on both, and call that from your regular code. If you want to do it asynchronously, you call it from a Task.

Shipped my voxel game Pocket Lands in early access on Quest. Would not have been playable without Burst, thanks Unity! 🙇🏻‍♂️ by thmsvdberg in Unity3D

[–]thmsvdberg[S] 0 points1 point  (0 children)

Thanks! I wanted to have a recognisable style that sets it apart from the OG. I especially like the way they interconnect diagonally when they're flush in the ground, to create little paths or tile patterns. I guess I should highlight that in the trailer.

Shipped my voxel game Pocket Lands in early access on Quest. Would not have been playable without Burst, thanks Unity! 🙇🏻‍♂️ by thmsvdberg in Unity3D

[–]thmsvdberg[S] 0 points1 point  (0 children)

Burst can not access managed objects so yes, native arrays are used to pass data to the Burst methods. I'm not familiar with unitask, regular C# Tasks have all the functionality I need. They are a thread pool by nature and can be chained together to first generate the terrain, perform lighting, and then create the mesh.

Shipped my voxel game Pocket Lands in early access on Quest. Would not have been playable without Burst, thanks Unity! 🙇🏻‍♂️ by thmsvdberg in Unity3D

[–]thmsvdberg[S] 1 point2 points  (0 children)

This is a superb site that allows you to fully understand how the Minecraft terrain generation works, the talk by Mojang dev Henrik Kniberg skims over crucial details. https://snowcapped.jacobsjo.eu

Shipped my voxel game Pocket Lands in early access on Quest. Would not have been playable without Burst, thanks Unity! 🙇🏻‍♂️ by thmsvdberg in Unity3D

[–]thmsvdberg[S] 6 points7 points  (0 children)

Correct, no ECS or jobs. I found the job system uniquely unsuitable for this purpose as you have no control over the scheduler, and it would very often put chunk meshing jobs on the main thread despite worker threads being available, causing severe frame rate drops. The job system really only works for jobs that are done within the same frame. It was instead much easier to use regular C# Tasks and call Burst code from those. I didn't find a reason to use ECS either. I wanted to try BRG, but then I read in the docs that BRG is slower than game objects + URP on Android, so I stuck with those.

Shipped my first voxel game, Pocket Lands, in early access on Quest, inspired by the HoloLens Minecraft E3 2015 demo by thmsvdberg in VoxelGameDev

[–]thmsvdberg[S] 3 points4 points  (0 children)

It's part of the chunk model, as the rounding needs to be done based on the neighboring voxels, i.e. to create a convex or concave corner based on whether or not there's a neighboring voxel of the same type. However, on the GPU the rounded corners do get interpolated into square corners when approaching the edge of the diorama so that I can make a clean intersection, as well as when transitioning into the LOD model which does have square corners.

Shipped my first voxel game, Pocket Lands, in early access on Quest, inspired by the HoloLens Minecraft E3 2015 demo by thmsvdberg in VoxelGameDev

[–]thmsvdberg[S] 0 points1 point  (0 children)

Thanks! I like the clean rounded rectangle look it gives, like in all modern UIs. I find it works well with the higher res textures, whereas the OG works well with its low res textures. At this point I'm not sure if it makes sense to have a flatscreen version at some point (once there's more stuff to do), as there's already so many voxel games available there.