Voice chat in Unity and the problems therein If, by the tribunes' leave, and yours, good people, I may be heard, I would crave a word or two; The which shall turn you to no further harm Than so much loss of time. Coriolanus: Act III, Scene 1So. It's been a while! This was a busy year for
Computing the area of a regular infinity-gon This Old Post: from 2012 in my WordPress blogging era. One of my favorite parts about calculus was learning about integrals. The mental leap I had when I realized you could compute the exact area under the curve if only you could use an infinitely small $dx$ in a Riemann
VS Code + SSH FS lagging If you're using VS Code and the SSH FS plugin to connect to Artemis/Odin and you've recently noticed significant lag while opening and saving files, you're not alone. The issue seems to have started with recent updates to either VS Code or the SSH FS plugin version. There's a
Networking in Unity The ever-changing standards of network support in Unity has made me more apprehensive about this working on this feature than any other one. For two prior projects, I used UNet, but that's been deprecated for a while. For a game jam, we used Photon, and for Play the Knave, we
Platform support Happy New Year! Over the last few days I've been testing how this Unity scene runs on Meta Quest 2 vs Valve Index. This is only an initial, exploratory effort to minimize friction developing with support for multiple devices. I'm mostly concerned with text readability because of the whole text
VRChat and VR performances As you can probably tell from my last few posts, I've been digging into Unity code to handle UI accessibility between desktop and XR platforms. Although there have been some great strides forward, there's nothing like forward progress to remind you of how much remains ahead. With that in mind,
The UI struggle continues, plus XR! I feel like I'm hitting every shared experience working with the virtual mouse input component. This is the most recent one about the cursor position jumping back to the last virtual position when going back and forth between the actual mouse and the virtual mouse. Same deal but this time
More on UIs, new devices. To continue from the last post, there's a VirtualMouseInput component that seems to be in the right direction. And just when I was polishing up the use of the hand-made version... This means more reconfiguring, but again, a little work now to save a lot in the future. *knocks on
UIs for multiple platforms I've been working on a menu system in Unity to be used in Windows Standalone mode (with keyboard/mouse and gamepad support) and OpenXR. In this stage, the UI canvases are set to world-space configuration, which, from what I've typically seen, is bad practice. Or at least it can be
Demos LBS (left) vs spring-based skinning (right) Ah shoot, if you're reading this, your browser doesn't support video tags. Here's a download link instead. With normals visible Ah shoot, if you're reading this, your browser doesn't support video tags. Here's a download link instead. Armadillo Spring forces with LBS Ah shoot,
Bone torque and flex weights Today I added some controls to my spring force solver. My goal is to have the spring solver "always-on" (updating the mesh once per frame based on the spring forces), but whenever I'd try letting the solver run continuously, the spring forces would eventually skew too much to
Spring forces and ARAP This is a post comparing two techniques for mesh deformation: spring forces, and ARAP. I've written about as-rigid-as-possible deformation before, but I haven't written much about springs before. The spring forces solver run on an OpenGL Compute shader, while the ARAP solver runs on the CPU using Eigen/LibIGL. In
Attachment and rigidity Glossary: ABCD: Attachment-based character deformation. Performs rigid skinning first, then deforms mesh vertices relative to a point of attachment on the skeleton. ARAP: As-rigid-as-possible surface modeling technique. Uses ROIs to define mesh deformation area. Switches between optimizing vertex positions and rotations to minimize cell energy until convergence. LSE: Laplacian surface
libigl Institute of Visual Computing of ETH Zürich Prof. Olga Sorkine-Hornung Research topics interactive shape modeling and animation, digital geometry processing, digital fabrication, image and video processing Publications And many more... libigl - A C++ Geometry Processing Library A simple C++ geometry processing library with wide functionality, including construction of sparse
Scene and Objects The scene files are changing once again. The progression so far has only been from XML files to json, with changes to object behavior to better align the two. Essentially I want everything serializable for saving state between files. Right now, the json file just contains a bunch of fields
On Vertex Skeleton Binding I've been thinking about how I bind mesh vertices to the skeleton tonight. The approach I've used so far is to create cut planes at each joint to help partition the mesh into segments for each bone. For every vertex in the mesh, one of the following happens: The vertex
Refactoring Notes Update 1 Overall refactoring was successful - code compiles and deploys much more nicely than it ever has before. There's still a strong dependency on relative paths to content, but precise duplication of the data/ and src/Shaders/ directory should be enough to generate an independent build. MeshInstance has inlined
Progress Report Code status I've migrated Sketch away from Hg to a new git repository on Bitbucket. The URL is here, although it's not a public repo. The main reason for the change is that the old codebase, along with hg, were starting to smell. This prompted a refactoring in the project
Skinning Pipeline I'd like to talk a bit about the work I do to write skinning shaders for OpenGL. The OpenGL I'm targeting is version 4.5; the modern-ish concepts that will be thrown around without regard for background knowledge include: vertex array objects (VAOs) for storing OpenGL vertex attribute bind locations
Incremental Rotation Skinning In this post, I'm going to discuss incremental rotation (IR) skinning. First, there's an overview on prior methods. To skip to the main section, click here. Skinning techniques like LBS and DQS work by transforming a vertex with a weighted average transform: $$ \begin{equation} v_i' = ( \sum_{j}^{C} w_
As-rigid-as-possible (ARAP) skinning Now that we've talked about Laplacian surface editing, it's a good time to introduce another technique for surface deformation. We're going to talk about As-Rigid-As-Possible Surface Modeling (Sorkine et al., 2007), then we'll look at how to make use of the technique alongside traditional skeletal skinning. Let's start with the
Laplacian Surface Editing (LSE) In this post, I'll be discussing surface deformation, differential geometry, least squares, and sparse linear linear systems. In Laplacian surface editing (LSE), the goal is to deform a mesh surface while minimizing changes to its differential geometry. Differential geometry is really neat: position data is defined based on the weighted
Implicit Skinning, Part 2 In this post, we'll be going over ""Robust Iso-Surface Tracking for Interactive Character Skinning"" from Vaillant et al. We're following up on their previous work. So why the follow-up? Well, implicit skinning had some problems. The original method relies on the mesh's skin weights. Because the
Implicit Skinning, Part 1 This is going to cover the paper, ""Implicit Skinning: Real-Time Skin Deformation with Contact Modeling,"" from Rodolphe Vaillant et al., and the work on which it builds (implicit surfaces, HRBFs). The prerequisite list is long, but here's a start: functional analysis radial basis functions Hermite and
Implicit Surfaces The feedback from SIGGRAPH prompted me to start reading more about implicit surfaces. Here's what I'm looking at: Wiki entry on implicit surfaces. Surface triangulation - turning implicit surfaces into polygons for rendering (as opposed to ray-tracing) Hessian matrix - a square matrix of second-order partial derivatives of a scalar-valued