IP Library Granted Patent US 10,062,197
Granted Patent B2
US 10,062,197 · App. 15/421,852 · Granted Aug 28, 2018

Animating a virtual object in a virtual world

Inventors: Alberto Aguado (Aston, GB); James Edward John Brewster (Sidmouth, GB)
Assignee: NaturalMotion Ltd.
G06T13/40G06T2213/12
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 10,062,197
App. No.
15/421,852
Granted
Aug 28, 2018
Kind
B2
Abstract

A computer implemented method for use in animating parts of a virtual object in a virtual world, the method comprising obtaining joint data for each joint of a chain of joints associated with parts of a virtual object, joint data including length data defining a vector length for a vector from the joint to a next joint, the length data corresponding to a length of a part in the virtual world, the joint data for at least one joint including vector constraint data defining a rotational constraint for the vector; accessing data for a target curve defining target locations for the joints of the parts of the virtual object; and processing the joint data to rotate the vector for a joint towards a target location on the curve for a next joint in the chain; and if constraint data for the joint prevents the rotated vector from reaching the target location: set the vector angle for the joint at an angle dependent on the rotational constraint; and rotate an immediately preceding joint in the chain to move the vector for the joint towards the target location on the curve.

Claims (51)

1. A computer implemented method for use in animating parts of a virtual object in a virtual world, the method comprising:

obtaining joint data for each joint of a chain of joints associated with parts of a virtual object, joint data including length data defining a vector length for a vector from the joint to a next joint, the length data corresponding to a length of a part in the virtual world, the joint data for at least one joint including vector constraint data defining a rotational constraint for the vector;

accessing data for a target curve defining possible target locations for the joints of the parts of the virtual object; and

processing the joint data to:

rotate the vector for a joint towards a target location on the curve for a next joint in the chain;

determine if the vector constraint data for the joint prevents the rotated vector from reaching the target location; and

if it is determined that the vector constraint data for the joint does not prevent the rotated vector from reaching the target location, rotate the vector for the joint to reach the target location; or

if it is determined that the vector constraint data for the joint prevents the rotated vector from reaching the target location:

set the vector angle for the joint at an angle dependent on the rotational constraint; and

rotate an immediately preceding joint in the chain to move the vector for the joint towards the target location on the curve.

2. A method according to claim 1 , wherein the setting and rotating are performed recursively to joint data for successively preceding joints in the chain until the vector for the joint reaches the target location on the curve for a next joint in the chain.

3. A method according to claim 2 , wherein a combined vector is determined for a preceding joint in the chain as a vector sum of the vector for the joint, the vector for the preceding joint and vectors for the or each joint between the joint and the preceding joint, a residual angle is determined for the rotation of the combined vector to reach the target location on the curve for the next joint in the chain, and the preceding joint in the chain is rotated by the residual angle to move the vector for the joint towards the target location on the curve.

4. A method according to claim 1 , wherein a combined vector is determined as a vector sum of the vector for the joint and the vector for the immediately preceding joint, a residual angle is determined for the rotation of the combined vector to reach the target location on the curve for the next joint in the chain, and the immediately preceding joint in the chain is rotated by the residual angle to move the vector for the joint towards the target location on the curve.

5. A method according to claim 1 , wherein processing of the joint data is performed recursively for each joint along the chain.

6. A computer system for use in animating parts of a virtual object in a virtual world, the computer system comprising:

a program memory storing program code; and

a processor for implementing the program code stored in the program memory;

wherein the program code comprises:

code for controlling the processor to obtain joint data for each joint of a chain of joints associated with parts of a virtual object, joint data including length data defining a vector length for a vector from the joint to a next joint, the length data corresponding to a length of a part in the virtual world, the joint data for at least one joint including vector constraint data defining a rotational constraint for the vector;

code for controlling the processor to access data for a target curve defining possible target locations for the joints of the parts of the virtual object; and

code for controlling the processor to process the joint data to:

rotate the vector for a joint towards a target location on the curve for a next joint in the chain;

determine if the vector constraint data for the joint prevents the rotated vector from reaching the target location; and

if it is determined that the vector constraint data for the joint does not prevent the rotated vector from reaching the target location, rotate the vector for the joint to reach the target location; or

if it is determined that the vector constraint data for the joint prevents the rotated vector from reaching the target location:

set the vector angle for the joint at an angle dependent on the rotational constraint; and

rotate an immediately preceding joint in the chain to move the vector for the joint towards the target location on the curve.

7. A system according to claim 6 , wherein the code for controlling the processor includes code for controlling the processor to perform the setting and rotating recursively to joint data for successively preceding joints in the chain until the vector for the joint reaches the target location on the curve for a next joint in the chain.

8. A system according to claim 7 , wherein the code for controlling the processor includes:

code for controlling the processor to determine a combined vector for a preceding joint in the chain as a vector sum of the vector for the joint, the vector for the preceding joint and vectors for the or each joint between the joint and the preceding joint,

code for controlling the processor to determine a residual angle for the rotation of the combined vector to reach the target location on the curve for the next joint in the chain, and

code for controlling the processor to rotate the preceding joint in the chain by the residual angle to move the vector for the joint towards the target location on the curve.

9. A system according to claim 6 , wherein the code for controlling the processor includes:

code for controlling the processor to determine a combined vector as a vector sum of the vector for the joint and the vector for the immediately preceding joint,

code for controlling the processor to determine a residual angle for the rotation of the combined vector to reach the target location on the curve for the next joint in the chain, and

code for controlling the processor to rotate the immediately preceding joint in the chain by the residual angle to move the vector for the joint towards the target location on the curve.

10. A system according to claim 6 , including code for controlling the processor to process the joint data recursively for each joint along the chain.

11. A non-transient storage medium storing computer code for controlling a computer to:

obtain joint data for each joint of a chain of joints associated with parts of a virtual object, joint data including length data defining a vector length for a vector from the joint to a next joint, the length data corresponding to a length of a part in the virtual world, the joint data for at least one joint including vector constraint data defining a rotational constraint for the vector;

access data for a target curve defining possible target locations for the joints of the parts of the virtual object; and

process the joint data to:

rotate the vector for a joint towards a target location on the curve for a next joint in the chain;

determine if the vector constraint data for the joint prevents the rotated vector from reaching the target location; and

if it is determined that the vector constraint data for the joint does not prevent the rotated vector from reaching the target location, rotate the vector for the joint to reach the target location; or

if it is determined that the vector constraint data for the joint prevents the rotated vector from reaching the target location:

set the vector angle for the joint at an angle dependent on the rotational constraint; and

rotate an immediately preceding joint in the chain to move the vector for the joint towards the target location on the curve.

12. A non-transient storage medium according to claim 11 , storing computer code for controlling a computer to perform the setting and rotating recursively to joint data for successively preceding joints in the chain until the vector for the joint reaches the target location on the curve for a next joint in the chain.

13. A non-transient storage medium according to claim 12 , storing computer code for controlling a computer to determine a combined vector for a preceding joint in the chain as a vector sum of the vector for the joint, the vector for the preceding joint and vectors for the or each joint between the joint and the preceding joint, to determine a residual angle for the rotation of the combined vector to reach the target location on the curve for the next joint in the chain, and to rotate the preceding joint in the chain by the residual angle to move the vector for the joint towards the target location on the curve.

14. A non-transient storage medium according to claim 11 , storing computer code for controlling a computer to determine a combined vector as a vector sum of the vector for the joint and the vector for the immediately preceding joint, to determine a residual angle for the rotation of the combined vector to reach the target location on the curve for the next joint in the chain, and to rotate the immediately preceding joint in the chain by the residual angle to move the vector for the joint towards the target location on the curve.

15. A non-transient storage medium according to claim 11 , storing computer code for controlling a computer to process the joint data recursively for each joint along the chain.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Feb 1, 2017
From: AGUADO, ALBERTO; BREWSTER, JAMES EDWARD JOHN
To: NATURALMOTION LIMITED
Reel/Frame 041147/0348 →
Priority Claims (1)
GB 1601779.0 · Feb 1, 2016 · national
Continuity (1)
Related Publication 20170221250A1 · Aug 3, 2017