Widely used in 3d animation, which is called skeletal animation. The rigging of the 3d model basically creates the hierarchical representation of the model, allowing high level usages such as FK and IK.
ananthmrao
I wanted to learn more about some of the other uses for hierarchical representation, and I found this very helpful:
https://math.hws.edu/graphicsbook/c2/s4.html
It shows how hierarchical modeling can also be used for a car and shows a nice graphic of how to get the wheels to turn without the rest of the car changing (except to move). It's similar to the example shown in the next slide for the human right arm movement.
sinood
How is the hierarchical transformation rendered so that it does not look like each shape is moving on its own? My guess is that, for example, to make an arm move, the transformations of each segment of the arm are computed hierarchically, and then the transformations are later rendered in an iterative way to avoid "floating" segments. I couldn't find a visualization about this--maybe someone could link one here if they find one?
davidmwei
I have a similar question to @sinood 's. How does a hierarchical representation give the "engine" necessary information to compute movement that seems sequential. For example, simulating running should (in theory) show movement propagating from the feet up through the body. Is this hierarchical representation the way modern engines compute such movements?
davidmwei
Furthermore, this slide mentions that "Changing a group's transform affects all parts". I'm curious to know how many different functions can mimic real world physics and biology, and how those functions are optimized in intensive applications (like Crysis 3 grass) such that a small change in a subgroup can affect the entire group.
GuardHei
Most game engines store the local space transform of the object (relative to its parent object). When acquiring the world space position of the object, the engine will perform a "chain" of recursion to compute the final result. This can be performance heavy if the object level is too deep. To solve this, engine normally cache the computation result, and mark it dirty when the transform changed.
Grass is different because most of them are stored in a flattened way. Since this is more efficient to do computation on GPU (scalar access) and has a better wavefront usage.
Staffrishiu
@sinood, @davidmwei -- These are all really great questions! Here are some slides from CMU that go into depth on this: http://graphics.cs.cmu.edu/nsp/course/15-462/Spring04/slides/05-hierarchy.pdf. But to summarize: to the question of how we keep them together, we can create our rotations so that the joints are connected at a point and the lower joint then rotates around this point only. This way they move together as one arm but can be rotated (for example to bend your elbow) when needed.
Staffrishiu
@davidmwei: to your question on how this is used to mimic real-world situations: This sort of heirarchical representation can be applied in many different situations in graphics. For example, suppose you were rendering a room and a lot of items inside it. You could have a "room transform" then a "desk transform" and a "laptop transform" that would all be relative to each other so you could move the room and everything inside would move with it.
maleny25
When we scale a hierarchical representation like a skeleton, the whole group would change its size and relative position to account for the scaling. Would this still be the case if you were to scale a linear representation with each piece individually? In the skeleton, the gaps between bones stays at the same scale with a hierarchy, but would scaling a linear representation still have these scaled gaps? Or would it not work because there is no relative pivots connecting the bones?
StephenYangjz
I think this is quite a clever design. I first encountered this in robotics in the design of self-driving sensor arrangement, and now the lecture here is able to help me establish a much deeper understanding. I am wondering though if we only wish to only change the position of an object at the center of the hierarchical tree, would it be costly to revise all the nodes below it? Then, does that mean that the hierarchical representation does not apply to all applications?
melodysifry
I'm curious about how we deal with the areas connecting different groups when creating more realistic transformations. In the example showed in the slides, we aren't worrying too much about the gaps between bones, for example, the area where an elbow would be. But if were working on something more realistic where there's skin stretched over this skeletal structure, areas like the elbow joint aren't well-defined as being part of one subgroup or another, as it will have to change shape based on the position and orientation of the upper arm and forearm. In situations like this, can we extend this hierarchical representation to include more and more granular "skeletons" at these gaps until a continuous image forms? Or is there another mechanism used?
Widely used in 3d animation, which is called skeletal animation. The rigging of the 3d model basically creates the hierarchical representation of the model, allowing high level usages such as FK and IK.
I wanted to learn more about some of the other uses for hierarchical representation, and I found this very helpful:
https://math.hws.edu/graphicsbook/c2/s4.html
It shows how hierarchical modeling can also be used for a car and shows a nice graphic of how to get the wheels to turn without the rest of the car changing (except to move). It's similar to the example shown in the next slide for the human right arm movement.
How is the hierarchical transformation rendered so that it does not look like each shape is moving on its own? My guess is that, for example, to make an arm move, the transformations of each segment of the arm are computed hierarchically, and then the transformations are later rendered in an iterative way to avoid "floating" segments. I couldn't find a visualization about this--maybe someone could link one here if they find one?
I have a similar question to @sinood 's. How does a hierarchical representation give the "engine" necessary information to compute movement that seems sequential. For example, simulating running should (in theory) show movement propagating from the feet up through the body. Is this hierarchical representation the way modern engines compute such movements?
Furthermore, this slide mentions that "Changing a group's transform affects all parts". I'm curious to know how many different functions can mimic real world physics and biology, and how those functions are optimized in intensive applications (like Crysis 3 grass) such that a small change in a subgroup can affect the entire group.
Most game engines store the local space transform of the object (relative to its parent object). When acquiring the world space position of the object, the engine will perform a "chain" of recursion to compute the final result. This can be performance heavy if the object level is too deep. To solve this, engine normally cache the computation result, and mark it dirty when the transform changed.
Grass is different because most of them are stored in a flattened way. Since this is more efficient to do computation on GPU (scalar access) and has a better wavefront usage.
@sinood, @davidmwei -- These are all really great questions! Here are some slides from CMU that go into depth on this: http://graphics.cs.cmu.edu/nsp/course/15-462/Spring04/slides/05-hierarchy.pdf. But to summarize: to the question of how we keep them together, we can create our rotations so that the joints are connected at a point and the lower joint then rotates around this point only. This way they move together as one arm but can be rotated (for example to bend your elbow) when needed.
@davidmwei: to your question on how this is used to mimic real-world situations: This sort of heirarchical representation can be applied in many different situations in graphics. For example, suppose you were rendering a room and a lot of items inside it. You could have a "room transform" then a "desk transform" and a "laptop transform" that would all be relative to each other so you could move the room and everything inside would move with it.
When we scale a hierarchical representation like a skeleton, the whole group would change its size and relative position to account for the scaling. Would this still be the case if you were to scale a linear representation with each piece individually? In the skeleton, the gaps between bones stays at the same scale with a hierarchy, but would scaling a linear representation still have these scaled gaps? Or would it not work because there is no relative pivots connecting the bones?
I think this is quite a clever design. I first encountered this in robotics in the design of self-driving sensor arrangement, and now the lecture here is able to help me establish a much deeper understanding. I am wondering though if we only wish to only change the position of an object at the center of the hierarchical tree, would it be costly to revise all the nodes below it? Then, does that mean that the hierarchical representation does not apply to all applications?
I'm curious about how we deal with the areas connecting different groups when creating more realistic transformations. In the example showed in the slides, we aren't worrying too much about the gaps between bones, for example, the area where an elbow would be. But if were working on something more realistic where there's skin stretched over this skeletal structure, areas like the elbow joint aren't well-defined as being part of one subgroup or another, as it will have to change shape based on the position and orientation of the upper arm and forearm. In situations like this, can we extend this hierarchical representation to include more and more granular "skeletons" at these gaps until a continuous image forms? Or is there another mechanism used?