Ordered systems: Humanization

From looking at the GDC paper on Bungie’s modular meta-data approach I think i can simplify this down to something like:

system.Element

For example leg.upper.twist.1 so that ‘leg’ is the system and ‘upper’ as an element of that system. Systems themselves still have attributes, but also contain .elements. Elements in turn have .name, .node, .system (which refers back to the system there part of).

I think this may take on the form of a pseudo XML/HTM tag based approach:- list.element with attributes list.elements element.list, element.name etc..

Ordered systems: properties

As with an object existing as an index of a system, additional nodes, assets etc may affect the system directly or indirectly. For these the only reference thats needed is the system itself e.g.

011 = Root
011-21 = upperLeg
011-22 = lowerLeg
011.property[1] = polevector

This is very rough atm, and currently called a ‘property’ of the system. Anything can be a property of a system including, nodes, controllers, values – it’s just something thats related to the system.

Im assuming we can ask an object/controller/value etc if its the property of a system with x.isProperty returning the systems index its connected to.

Properties just aid the system – there created when the system is created. E.g if my system is a leg, a property in the form of a poleVector may get created. And this may be based on custom information with the system when its saved like “poleVector=True” etc.

Properties are what control the system, and there what get saved I’m assuming if we need to save animation.

How this animation is stored is something I’m not sure about – it would be a transform matrix, but whether it would be the transform relative to the system itself, character, base or the world i don’t know.

The interesting thing with this approach of
parent-system-index|property is that it can work with agile scrum type tracking.

A character maybe a system, with a set of indices denoting steps in its creation. eg.

project X|Assets|Characters|
project X|Assets|Characters|-|PlayerMale|Model
project X|Assets|Characters|-|PlayerMale|Model|-|Mesh|lowRez
project X|Assets|Characters|-|PlayerMale|Animation|-|ambient|aa

With properties of playerMale being ‘name’, ‘role’, ‘height’ etc..

Generalized ordered systems

Im working on an ordered theory for building rigs and loading animation. This is a general approach that isn’t reliant on rig construction at all, just an paradigm for ordered processes.

‘parent > system > index’

The theory follows some basic strict rules to determine an objects id in a system, and generalize relationship – not in any way its physical parent etc (though i can be used for it). An object is first represented by its parent, then the system its in and finally its index of that system. A root object for example can look something like so:

‘011′ or [0][1][1] or [0]system[1][1] – the first part denotes the systems parent, in this case ‘0′ represents nothing or ‘undefined’, the second part is the system index – in this case its the first system of the rig. Lastly the index denotes that its the first object in that system. Note that the parent index, and the last part ‘index’ and co-habit with each other. This will be explained now:

Once a root/base/first system has been establishes with its id; 011 extending this to cover new relationships is easy. Adding a leg system to this can be referred to as:

011-21

or

parent|system|index| – |system|index|

Reading this id (right to left) we can see its the 1st bone of the 2nd system, which is in turn parented to the 1st bone of the 1st system, which has no parent.

Chains

System can have multiple objects , we just need to determine there index. On creation of a system, an index of 1 always follows as a system or object cannot exist without one or the other. Object represented by an index do not need to be parented – they can if need be, but its not necessary.

Rigging information such as the how the object in the system are setup is purposefully left off, as this is more of a generalized approach than a finite one. Addition information about the system could be held in a’custom’ variable such as #(“leg”, “ikfk”,poleVector”) etc..  This is to allow a system be constructed in any manner we see fit I.e. there maybe a system for the entire leg, or one up to the ankle and another for the foot.  Crucially its dependant on how you want to build your systems.

Construction

Constructing a  system we first build the base system and object, ‘root’ in this case. Addition systems need to know about the system there connected to, and as before this does not need to be a physical parent just a connection to the entire system.

Weight Space entries: Local Weight

As an entry in the weight space is essentially added on top, local weight manipulation is key.

An entry is now classified as an interpolated product of interpolated values between 0 and 1, multiplied by a local weight. The local weight is important , as once an entry has been added it becomes impossible to see the mix of weights/entries that went into it.

Interpolation of an entry can take many forms, remember though that its product can still be non-linear.

Weight space entries.

Entries placed inside the weight space, are based on the products of multiple weights in a value interpolated sense between [0:1].

I.e An entry placed at 0.5 using weight A * weight B should not be the product of weight A and B to produce 0.5. As inconsistencies can arise for example:

A = 1.0, B = 0.5
A = 0.5, B = 1.0

Resulting in unbalanced in between combinations - Rather an entry sits at the product of a value interpolate by each weight:

Weight A @ 0.0 – Value = 0.0
Weight A @ 0.5 – Value = 1.0
Weight A @ 1.0 – Value = 0.0

The entry therefore sits at (weight A @ 0.5 = Value 1.0) * (weight B @ 0.5 = value 1.0)

This allows for true interpolations, special thanks go to Daniel Pook Kolb – finally starting to understand this.

Correctives without the correction.

Thanks goes to Daniel Pook Kolb.

Given a weight space of real numbers where each weight is a dimension, we can embed any data in this space be it an input or a pure value itself. By breaking the connection of weight to data (shape) we can essentially have multiple weights drive a single input.

For example if we have a dimension of two weights: W1 and W2 when W1 is at 1.0 we can drive a face pose/blendshape – lets call this shape S1. Likewise when W2 is at 1.0 we can drive another shape S2.

Treating this as a two dimensional space, we can place entries anywhere inside it. For example combining W1 and W2 (W1 * W2) we can place an entry (shape) at this point in the space.

Manipulating the weights drive this entry in a non-linear way. For example when W1 is at 1.0 and W2 is at 1.0, W1*W2 results in this entry being at 1.0. Likewise when W1 is at 1.0 but W2 is at 0.0, (W1 * W2) the entry is at 0.0.

Greater values of the input weights causes greater influence of the entry at there combination. This influence happens in a non-linear way.

W1 0.00 W2 0.00 = Entry 0.0
W1 0.25 W2 0.25 = Entry 0.06
W1 0.50 W2 0.50 = Entry 0.25
W1 0.75 W2 0.75 = Entry 0.56
W1 1.00 W2 1.00 = Entry 1.00

If we treat this as corrective system, the entry at the combination is additive to the other entrys at W1 and W2. This entry however can be an absolute if its regarded as a value that the W1 and W2 entries take negatively, whilst driving a new entry positively.

The weight space can in theory have as many dimensions as possible, with as many entries into its space (given that they exist inside a range of 0:1).

Objectified: The paradigm of construct

I’ve not seen ‘Objectified’ , but from this clip of Jonathan Ive talking about the design and construction of the Macbook Air, it rings very true to what I’m striving for. Essentially its the goal to make ideas, system and methods appear effortlessly, as if by magic to the user.

The hardest part as described in a talk at TED, is with finding a reason for things – the goal of science is to find the best explanation of something that has the littlest variation. This is crucially what spurns innovation, development and understanding. This ‘best explanation’ analogy is basically what designers, engineers, inventors etc strive for too. The goal of their product is to feel it was the only way for it to exist and be used.

Dragon Age: Origins – Out Today!

So the game I’ve been pretty much working on since joining BioWare is out today!

http://dragonage.bioware.com/

http://kotaku.com/5395135/dragon-age-origins-review-tripping-the-blight-fantastic

Check it out!

Implying detail

I try to discuss this as often as i can at work. Implying detail can be far powerful than putting every little thing in. Artist such as Turner, Degas and Rembrandt only needed to mention that there was something there for our brains to fill in the blanks.

In a way to relates to the uncanny valley, rather than hitting every possible detail if we can trick the brain into ‘believing’ theres more detail we may get away with it.

I found matthew cooks work to be just this – implying enough detail for you to fill in the blanks. Amazing paintings of life , during battle and outside of in Afghanistan.

http://www.matthewcookillustrator.co.uk/content/matthewcookwarartist/