{"id":55919,"date":"2023-09-18T22:39:23","date_gmt":"2023-09-18T22:39:23","guid":{"rendered":"https:\/\/saveupdata.com\/?p=55919"},"modified":"2023-09-18T22:39:23","modified_gmt":"2023-09-18T22:39:23","slug":"tech-secrets-behind-cosmonious-highs-interactive-vr-characters","status":"publish","type":"post","link":"https:\/\/saveupdata.com\/vr\/tech-secrets-behind-cosmonious-highs-interactive-vr-characters\/","title":{"rendered":"Tech Secrets Behind Cosmonious High\u2019s Interactive VR Characters"},"content":{"rendered":"
<\/td>\n | \u00a0\u00a0Thank you for Signing Up<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n
Cosmonious High<\/em> contains 18 characters across six species all created by a team with zero dedicated animators. That means lots and lots of code to create realistic behaviors and Owlchemy-quality interactivity! The ‘character system’ in Cosmonious High<\/em> is a group of around 150 scripts that together answer many design and animation problems related to characters. Whether it\u2019s how they move around, look at things, interact with objects, or react to the player, it\u2019s all highly modular and almost completely procedural.<\/p>\n <\/span><\/p>\n This modularity enabled a team of content designers to create and animate every single line of dialogue in the game, and for the characters to feel alive and engaging even when they weren\u2019t in the middle of a conversation. Here’s how it works.<\/p>\n Guest Article by Sean Flanagan &\u00a0Emma Atkinson<\/strong><\/p>\n Cosmonious High is a game from veteran VR studio Owlchemy Labs about attending an alien high school that’s definitely completely free of malfunctions!\u00a0<\/em>Sean Flanagan, one of Owlchemy’s Technical Artists, created Cosmonious High’s core character system amongst many other endeavors. Emma Atkinson is part of the Content Engineering team, collectively responsible for implementing every narrative sequence you see and hear throughout the game.<\/em><\/p>\n Almost all code in the character system is reusable and shared between all the species. The characters in\u00a0Cosmonious High<\/em> are a bit like modular puppets\u2014built with many of the same parts underneath, but with unique art and content on top that individualizes them.<\/p>\n From the very top, the character system code can be broken down into modules<\/strong> and drivers<\/strong>.<\/p>\n Every character in Cosmonious High<\/em> gets its behavior from its set of character modules<\/strong>. Each character module is responsible for a specific domain of problems, like moving or talking. In code, this means that each type of Character is defined by the modules we assign to it. Characters are not required to implement each module in the same way, or at all (e.g. the Intercom can\u2019t wave.)<\/p>\n Some of our most frequently used modules were:<\/p>\n CharacterLocomotion<\/strong>\u00a0\u2013 Responsible for locomotion. It specifies the high-level locomotion behavior common to all characters. The actual movement comes from each implementation. All of the ‘grounded’ characters\u2014the Bipid and Flan\u2014use CharacterNavLocomotion, which moves them around on the scene Nav Mesh.<\/p>\n CharacterPersonality<\/strong>\u00a0\u2013 Responsible for how characters react to the player. This module has one foot in content design\u2014its main responsibility is housing the responses characters have when players wave at them, along with any conversation options. It also houses a few ‘auto’ responses common across the cast, like auto receive (catching anything you throw) and auto gaze (returning eye contact).<\/p>\n CharacterEmotion<\/strong>\u00a0\u2013 Keeps track of the character\u2019s current emotion. Other components can add and remove emotion requests from an internal stack.<\/p>\n CharacterVision \u2013<\/strong>\u00a0Keeps track of the character\u2019s current vision target(s). Other components can add and remove vision requests from an internal stack.<\/p>\n CharacterSpeech \u2013<\/strong>\u00a0How characters talk. This module interfaces with Seret, our internal dialogue tool, directly to queue and play VO audio clips, including any associated captions. It exposes a few events for VO playback, interruption, completion, etc.<\/p>\n It\u2019s important to note that animation is a separate concern. The Emotion module doesn\u2019t make a character smile, and the Vision module doesn\u2019t turn a character\u2019s head\u2014they just store the character\u2019s current emotion and vision targets. Animation scripts reference<\/em> these modules and are responsible for transforming their data into a visible performance.<\/p>\n The modules that a character uses collectively outline what that character can do, and can even implement that behavior if it is universal enough (such as Speech and Personality.) However, the majority of character behavior is not capturable at such a high level. The dirty work gets handed off to other scripts\u2014collectively known as drivers\u2014<\/strong>which form the real ‘meat’ of the character system.<\/p>\n Despite their more limited focus, drivers are still written to be as reusable as possible. Some of the most important drivers\u2014like CharacterHead and CharacterLimb\u2014invisibly represent some part of a character in a way that is separate from any specific character type. When you grab a character\u2019s head with Telekinesis, have a character throw something, or tell a character to play a mocap clip, those two scripts are doing the actual work of moving and rotating every frame as needed.<\/p>\n Drivers can be loosely divided into logic drivers<\/strong> and animation drivers<\/strong>.<\/p>\n Logic drivers are like head and limb\u2014they don\u2019t do anything visible themselves, but they capture and perform some reusable part of character behavior and expose any important info. Animation drivers reference<\/em> logic drivers and use their data to create character animation\u2014moving bones, swapping meshes, solving IK, etc.<\/p>\n Animation drivers also tend to be more specific to each character type. For instance, everyone with eyes uses a few instances of CharacterEye (a logic driver), but a Bipid actually animates their eye shader with BipedAnimationEyes, a Flan with FlanAnimationEyes, etc. Splitting the job of ‘an eye’ into two parts like this allows for unique animation per species that is all backed by the same logic.<\/p>\n |