It is often difficult to see patterns in data that changes in a sequence, such as data that changes over time. For example, sales data may exhibit some seasonality (e.g., higher in the summer than in the winter). A solution to this problem is to animate a visual representation of the data as the data changes. For example, graphical elements on a chart may represent the data, and the animation may show the graphical elements changing to represent changes in the data.
There are many different types of rendering environments where animations of data may be rendered. Some of these rendering environments may be configured as client environments in client-server systems, where some portion of the processing for the animations may be performed by servers. Other rendering environments may be configured to generate and run animations locally using local applications. For example, rendering environments may include browser-based environments, local business productivity software environments, and/or other environments. Representations of data animations have traditionally not been suitable for use with different types of rendering environments, which may be configured differently and may use different languages to represent animations. The tools and techniques described herein relate to general animation representations that can be translated into specific animation representations that are suitable for rendering environments where the representations are to be rendered as animations.
As an example, in one embodiment, the tools and techniques can include processing multiple data frames to produce a general animation representation that represents the data frames. The general animation representation may be in a general language that is suitable for being translated into any of multiple different specific languages. The general animation representation can be translated into a specific animation representation that is in a specific language suitable for processing by a rendering environment. The specific animation representation can be sent to the rendering environment, where the specific animation representation can be rendered on a display device.
This Summary is provided to introduce a selection of concepts in a simplified form. The concepts are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used to limit the scope of the claimed subject matter. Similarly, the invention is not limited to implementations that address the particular techniques, tools, environments, disadvantages, or advantages discussed in the Background, the Detailed Description, or the attached drawings.
Embodiments described herein are directed to techniques and tools for improved animations of data frames. Such improvements may result from the use of various techniques and tools separately or in combination.
Such techniques and tools may include creating an abstract or general representation of graphical animation elements that can be translated to different specific languages. The animation representations in the different specific languages can each be used in different types of rendering environments. For example, specific languages may include markup languages such as XML-based languages (e.g., GVML), HTML-based languages (e.g., HTML 5), and languages that include XAML. A specific language for animation may include a combination of different languages that are all recognized by a rendering environment.
Allowing animations for the data frames to be defined in a general language and then translated into specific languages can allow the same techniques for defining the general animation representations to be used, even for animations that will be rendered in different types of rendering environments. For example, the same techniques for defining a general animation representation may be used whether the animation is to be used in a client-server browser-based environment, or in a local environment that does not use a browser.
The subject matter defined in the appended claims is not necessarily limited to the benefits described herein. A particular implementation of the invention may provide all, some, or none of the benefits described herein. Although operations for the various techniques are described herein in a particular, sequential order for the sake of presentation, it should be understood that this manner of description encompasses rearrangements in the order of operations, unless a particular ordering is required. For example, operations described sequentially may in some cases be rearranged or performed concurrently. Moreover, for the sake of simplicity, flowcharts may not show the various ways in which particular techniques can be used in conjunction with other techniques.
Techniques described herein may be used with one or more of the systems described herein and/or with one or more other systems. For example, the various procedures described herein may be implemented with hardware or software, or a combination of both. For example, dedicated hardware implementations, such as application specific integrated circuits, programmable logic arrays and other hardware devices, can be constructed to implement at least a portion of one or more of the techniques described herein. Applications that may include the apparatus and systems of various embodiments can broadly include a variety of electronic and computer systems. Techniques may be implemented using two or more specific interconnected hardware modules or devices with related control and data signals that can be communicated between and through the modules, or as portions of an application-specific integrated circuit. Additionally, the techniques described herein may be implemented by software programs executable by a computer system. As an example, implementations can include distributed processing, component/object distributed processing, and parallel processing. Moreover, virtual computer system processing can be constructed to implement one or more of the techniques or functionality, as described herein.
The computing environment (100) is not intended to suggest any limitation as to scope of use or functionality of the invention, as the present invention may be implemented in diverse general-purpose or special-purpose computing environments.
With reference to
Although the various blocks of
A computing environment (100) may have additional features. In
The storage (140) may be removable or non-removable, and may include computer-readable storage media such as magnetic disks, magnetic tapes or cassettes, CD-ROMs, CD-RWs, DVDs, or any other medium which can be used to store information and which can be accessed within the computing environment (100). The storage (140) stores instructions for the software (180).
The input device(s) (150) may be a touch input device such as a keyboard, mouse, pen, or trackball; a voice input device; a scanning device; a network adapter; a CD/DVD reader; or another device that provides input to the computing environment (100). The output device(s) (160) may be a display, printer, speaker, CD/DVD-writer, network adapter, or another device that provides output from the computing environment (100).
The communication connection(s) (170) enable communication over a communication medium to another computing entity. Thus, the computing environment (100) may operate in a networked environment using logical connections to one or more remote computing devices, such as a personal computer, a server, a router, a network PC, a peer device or another common network node. The communication medium conveys information such as data or computer-executable instructions or requests in a modulated data signal. A modulated data signal is a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. By way of example, and not limitation, communication media include wired or wireless techniques implemented with an electrical, optical, RF, infrared, acoustic, or other carrier.
The tools and techniques can be described in the general context of computer-readable media, which may be storage media or communication media. Computer-readable storage media are any available storage media that can be accessed within a computing environment, but the term computer-readable storage media does not refer to propagated signals per se. By way of example, and not limitation, with the computing environment (100), computer-readable storage media include memory (120), storage (140), and combinations of the above.
The tools and techniques can be described in the general context of computer-executable instructions, such as those included in program modules, being executed in a computing environment on a target real or virtual processor. Generally, program modules include routines, programs, libraries, objects, classes, components, data structures, etc. that perform particular tasks or implement particular abstract data types. The functionality of the program modules may be combined or split between program modules as desired in various embodiments. Computer-executable instructions for program modules may be executed within a local or distributed computing environment. In a distributed computing environment, program modules may be located in both local and remote computer storage media.
For the sake of presentation, the detailed description uses terms like “determine,” “choose,” “generate,” “receive”, and “send” to describe computer operations in a computing environment. These and other similar terms are high-level abstractions for operations performed by a computer, and should not be confused with acts performed by a human being, unless performance of an act by a human being (such as a “user”) is explicitly noted. The actual computer operations corresponding to these terms vary depending on the implementation.
A. System and Environment with General Animation Representations
The general animation representation generator (220) can process the frames (210) using the animation definitions (230) to generate a general animation representation (240). The general animation representation (240) can represent graphical features of the animation, and may also include representations of the underlying data frames (210) (which may or may not be represented in the same language as the graphical representations of the animation). As an example of the graphical representations of the animation, the general animation representation generator (220) may include one or more timelines and one or more animation actions in the general animation representation (240). The general animation representation (240) may be in a general language that is configured to be translated into any of multiple different specific languages that can represent animations.
The general animation representation (240) can be passed to an animation representation translator (250). The animation representation translator (250) can translate the general animation representation (240) into a specific language to produce a specific animation representation (260) that is configured to be used by a specific rendering environment (270). The specific animation representation (260) can be sent to the specific rendering environment (270). For example, the specific animation representation (260) may be sent over a computer network, through an application programming interface within a computing machine, or in some other manner. The rendering environment (270) can render the represented animation of the data frames (210). The rendering environment (270) could be within any of many different types of devices, such as a personal computer, a slate computer, or a handheld mobile device such as a mobile phone. Also, the entire data frame animation environment (200) could reside on a single device, or it could be distributed over multiple devices. For example, the general animation representation generator (220) and the animation representation translator (250) could be hosted on one or more server machines, such as in a Web service, and the rendering environment (270) could be hosted on a client machine that utilizes a browser program for rendering.
The general animation representation generator (220) and an animation representation translator (250) can form a core animation runtime tool that can process animation representations and pass specific animation representations to corresponding rendering environments (270) that are configured to process the specific animation representations (260).
B. Incremental Updates and Delta Frames
As noted above, the general animation representation (220) can represent changes that occur to graphical elements in the animation over time. This may be done by the general animation representation (220) defining sequential graphical frames that each defines all graphical elements of the animation view for a particular point in time. Alternatively, the general animation representation (240) may define key animation frames (242) that each define all the graphical elements of the animation view for a particular point in time. Then, to save computing resources, subsequent animation frames (including frames between key frames (242)), or delta animation frames (244), can each define a graphical view by defining graphical features (such as properties of graphical elements) that have changed from the previous view.
The delta animation frames (244 and 264) can represent changed graphical elements that directly represent the data (bars on bar charts, graph lines, graphical elements that are sized to represent data quantities, etc.), as well as background graphical elements (chart axes, labels, titles, etc.). It can be inferred that other graphical elements not represented in the delta animation frame (244 or 264) will remain unchanged from the previous animation frame. Similar key animation frames (262) and delta animation frames (264) may also be used in the specific animation representation (260) to the extent that the features of the delta frames are supported in the specific language of the specific animation representation (260). To determine what graphical elements have changed from one animation frame to another, the general animation representation generator (220) can maintain a mapping of animation graphical elements to data fields in the data frames (210). Accordingly, if the underlying data for a graphical element has not changed, then the general animation representation generator (220) need not include information on corresponding graphical elements in the next delta animation frame (244). Similarly, if the changes in the data from one data frame (210) to another data frame (210) can be illustrated without changing the background graphical elements, then new information on those background graphical elements can be omitted from the next delta animation frame (244). For example, if the axes from the previous animation frame are sufficient for the data values in the next data frame (210), then the axes can remain the same and information on the axes can be omitted from the next delta animation frame (244). However, if, for example, the data values in the next data frame (210) exceed the limits of the existing axes, then the next delta animation frame (244) can define new axes with values that are large enough to handle representations of the new data values. It should be noted that the animation may not be a chart, and the background graphical elements may be other types of elements. For example, the animation could be a data driven map of a country that displays population census data by state or province in that country. In one implementation, the color of each state or province could be represented by a range of colors depending upon the size of the population. The animation could represent 100 years of animated population data, with the color of individual states/provinces changing to indicate the corresponding change in population during each decade.
If the animation is to perform a seek operation to go to a specified point in the animation or is to rewind to a specified previous point in the animation, and there is a delta animation frame (264) in the specific animation representation (260) at that point, the animation can go to a key animation frame (262) that precedes the specified point, and can play forward to the delta animation frame (264) at the specified point in the animation.
C. Batching Data and Animation Frames
In some situations where there are a finite number of data frames (210) to be processed, all the data frames (210) can be processed prior to rendering any of the corresponding animation graphics, and the entire specific animation representation (260) can be sent together to the rendering environment (270). However, for large sets of data frames (210), or where the set of data frames (210) to be processed is unbounded (such as where the data frames (210) are being streamed to the general animation representation generator (220)), it can be beneficial to process the data frames (210) in batches and to send the corresponding batched portions of the specific animation representation (260) to the rendering environment (270) for rendering while other data frames (210) are still being processed by the general animation representation generator (220) and the animation representation translator (250). The rendering environment (270) can render the batched portions of the specific animation representation (260) as those batched portions are received.
D. Data Frame Animation Implementation
A specific example of an implementation of some tools and techniques for data frame animation will now be described.
Referring now to
In the illustration of
Referring back to
E. Example Implementation of Using the General Language
Referring back to
The animation actions may cover various graphics scenarios. For example, one action may be creating a shape, and another may be destroying a shape. The creation could also include defining shape properties, including an identification that can be referenced by subsequent actions on the shape. Another action could manipulate or transform one or more shape properties. For example, such manipulation could include transforming from one shape to another, changing color, changing shape size, changing shape orientation, changing shape position, etc. Manipulations of shapes could also include interpolating between actions. For example, an interpolation action could specify initial and final values of manipulated properties, as well as one or more clock values for the manipulation. The interpolation could be performed between these initial and final properties (e.g., between an initial and final size, between an initial and final position, etc.). Different specific interpolation rules may be applied to different types of animation actions, and the specifying an action may include specifying at least a portion of the interpolation rules to be used for interpolation rules to be applied to that action.
As noted above, the general language may also allow for the use of timelines that can govern the execution of animation actions. In one example, a root timeline may be specified for each animation. The root timeline can manage the clock for the animation, and can drive the overall animation sequence, including managing child timelines. In one example, the range of the clock can be defined by the number of key frames, and the clock rate can be defined by the speed (e.g., in frames per second). Also, a clock rate of infinity can result in only key frames being displayed, and no interpolations between the key frames (the clock value to child timelines for each clock tick can be a value of zero). The root timeline can be manipulated by controls such as the controls (350) discussed above with reference to
The root clock can fire clock events to child timelines, and each child timeline can control one or more animation actions. The beginning and end times of the child timeline can be specified relative to the root timeline, and the child timeline can receive clock tick values from the root timeline. A child timeline can translate the root timeline clock tick values to relative values between two values, such as zero and one (where the child timeline can start at relative time zero and end at relative time one). The child timeline can fire child timeline clock tick events to the animation actions that are controlled by the child timeline.
F. Example Runtime Technique Implementation
An example of techniques to be performed for an animation at runtime will now be discussed, although different techniques could be used. The runtime technique can include view validation, and translation/rendering. All or part of both of these acts can be performed on the same computing machine or on different computing machines. These techniques will be discussed with reference to a data-driven chart, but similar techniques could be used for other types of animations that derive from data frames.
During view validation, a chart object can create a data driven root view element and attach it to a view. The chart object can scan through all key frames to determine minimum and maximum values to use for the chart's axes. A root timeline can be created, and can be attached to the root view element.
The chart object can also create root timeline controls. For example, this creation may include creating a child timeline with a start time, and attaching the child timeline to the root timeline at the start time. A create animation action for a play control, a create animation action for a speed control, and a create animation action for a progress bar can all be attached to the child timeline.
The chart object can also create shapes for static graphics on the chart. For example, this can include creating a child timeline for the static graphics and attaching that child timeline to the root timeline at a start time for the child timeline. Create animation actions for each of the static graphics (e.g., chart title, plot area, gridlines, axes, and axis labels) can be generated with the properties for the graphics, and those create animation actions can each be attached to the child timeline for static graphics.
Additionally, the chart object can iterate through the collections of key data frames and perform the following for each data frame: create a child timeline and attach the child timeline to the root timeline at a start time for the child timeline; for each new shape, attach a create animation action with properties for the shape to the child timeline; for each existing shape that is going away, attach a destroy animation action with the shape identification to the child timeline; and for each continuing shape that will be changed, attach a transform or manipulate animation action with the shape identification and initial and final property values to the child timeline.
The translation/rendering can be done differently for local applications than for a browser scenario. For both scenarios, the root view element can parse the root timeline. For the local application scenario, as the timeline is parsed, for each child timeline with a current start time, each associated animation action for the child timeline can be processed. This processing can include translating the animation actions into representations that are specific to the rendering environment. For example, if the rendering is to be done with a spreadsheet program, the animation actions can be translated into a specific language (which could actually include information in one or more languages) that is understood by the spreadsheet program. Similarly, if the rendering is to be done by a database program or a word processing program, the animation action can be translated into a specific language that can be understood by that program (which again may be one or more languages, such as in Java script and HTML). The translated specific representations can be provided to a rendering engine, such as by being passed within a program, or being passed to a program through an application programming interface.
For the browser scenario, the root and child timelines and their association animation actions can be translated into a payload in a specific language that can be understood and processed by the browser. Each payload can be sent to the browser as the payload is completely generated, and the browser can process the payloads as the payloads arrive, even if all payloads have not yet arrived. Besides the browser scenario and the local application scenario discussed above, other scenarios could work similarly. For example, there could be a dedicated device, such as a handheld device, for processing the frames and performing the animation. The representations could be sent over a network without using a browser at the receiving end (e.g., where a dedicated animation device without a browser receives the representations and renders the animations). Also, different scenarios could involve different types of devices, such as slate devices, mobile phones, desktop computers, laptop computers, etc. It should be noted that the local application could use the mechanism described above for a remote browser scenario, and a remote browser scenario could use the mechanism described above for the local application.
Several techniques for general representations for data frame animations will now be discussed. Each of these techniques can be performed in a computing environment. For example, each technique may be performed in a computer system that includes at least one processor and memory including instructions stored thereon that when executed by at least one processor cause at least one processor to perform the technique (memory stores instructions (e.g., object code), and when processor(s) execute(s) those instructions, processor(s) perform(s) the technique). Similarly, one or more computer-readable storage media may have computer-executable instructions embodied thereon that, when executed by at least one processor, cause at least one processor to perform the technique.
Referring to
The general animation representation can be translated (420) into a specific animation representation that is in a specific language suitable for processing by a rendering environment. The general animation representation and/or the specific animation representation may represent each of the data frames as a point in time in an animation, although there may be interpolation between the data frames. Translating (420) may include removing from the general animation representation one or more features that are not supported in the specific language. Translating may include identifying one or more features from the general animation representation that are not supported in the specific language, and substituting one or more features in the specific animation representation for the unsupported features in the general animation representation. For example, if the general animation representation calls for a shape to be faded out in an animation action, but fading out is not supported in the specific language, the fade-out animation action could be removed or replaced with an action for immediately removing the shape.
The specific animation representation can be sent (430) to the rendering environment. For example, the specific animation representation may be sent over a computer network, and the rendering environment can include a browser. The specific animation representation can be sent to a program module within a computing machine that also includes one or more program modules that process the multiple data frames, translate the general animation representation, and/or send the specific animation representation to the rendering environment.
The general animation representation can define one or more animation actions and one or more timelines for the animation action(s). For example, the general animation representation may include a root timeline and one or more child timelines. The specific animation representation can be in a markup language. The general animation representation can be in a general language that is configured to be translated into any of multiple different specific languages.
For the sake of clarity in this paragraph, the data frames can be termed a first set of data frames, the general animation representation can be termed a first general animation representation in a general language, the rendering environment can be termed a first rendering environment, and the specific animation representation can be termed a first specific animation representation in a first specific language. The technique can include processing a second set of multiple data frames to produce a second general animation representation in the general language. The second general animation representation can represent the second set of data frames. The second general animation representation can be translated into a second specific animation representation in a second specific language that is different from the first specific language. The second specific language can be suitable for processing by a second rendering environment. The second specific animation representation can be sent to the second rendering environment with instructions to render the second specific animation representation.
Referring still to
Referring now to
The technique can also include processing (540) a second set of multiple data frames to produce a second general animation representation in the general language. The second general animation representation can represent the second set of data frames as changes to a set of graphical elements of a second animation through time. The second general animation representation can define one or more timelines and one or more animation actions. The second general animation representation can be translated (550) into a second specific animation representation that is in a second specific language suitable for processing by a second rendering environment. The second specific animation representation can be sent to the second rendering environment (560).
Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. Rather, the specific features and acts described above are disclosed as example forms of implementing the claims.