Abstract:
A computer-implemented method for applying details in a simulation includes obtaining first data corresponding to a first simulation of matter in a space domain. The method includes performing, using the first data, a second simulation of the matter producing second data representing details for the first simulation, the second data distributed in the space domain using a grid where each cell has a common depth-to-size ratio from a camera perspective. The method includes rendering an image of the matter, wherein the second data is obtained from the grid and used in the rendering.

Description:
TECHNICAL FIELD 
     This document relates to applying details in a simulation. 
     BACKGROUND 
     Simulation is an area of computer graphics that places high demands on the ability to generate lifelike images, sometimes as close to an actual photograph as possible, and also to be able to do so as quickly as possible or using the least amount of system resources. A particular challenge in simulation is to generate a plausible appearance—and in animated sequences, behavior—of fluid materials, for example smoke or water, taking into account practical limits for how much system resources can be used and how rapidly the simulation should be generated. 
     SUMMARY 
     In a first aspect, a computer-implemented method for applying details in a simulation includes obtaining first data corresponding to a first simulation of matter in a space domain. The method includes performing, using the first data, a second simulation of the matter producing second data representing details for the first simulation, the second data distributed in the space domain using a grid where each cell has a common depth-to-size ratio from a camera perspective. The method includes rendering an image of the matter, wherein the second data is obtained from the grid and used in the rendering. 
     Implementations can include any or all of the following features. The depth-to-size ratio is determined by a depth of each cell and a height or width of each cell. The first data includes a vector field for the matter in the space domain and at least one scalar field for the matter in the space domain; and the second data includes at least one detail scalar field representing the details. The vector field represents velocities of the matter in the space domain; and the scalar field and the detail scalar field represent at least one physical characteristic of the matter. First and second scalar fields in the first data represent a temperature and a density, respectively, of the matter in the first simulation; and first and second detail scalar fields in the second data represent a temperature and a density, respectively, of the matter in the second simulation. The matter includes a fluid; the first simulation corresponds to a first fluid movement that is globally coupled in the space domain; and the second simulation corresponds to a second fluid movement that is not globally coupled in the space domain. The space domain has a first resolution for the first simulation that is visually of a low frequency, the first simulation representing a low frequency fluid motion; and the space domain has a second resolution for the second simulation that is visually of a high frequency, the second resolution higher than the first resolution, the second simulation representing spatially independent high frequencies to the low frequency fluid motion. The grid is a perspective grid based on three dimensional cells arranged in a frustum space. The three dimensional cells are shaped so that: heights of all the cells in the frustum space are equal with regard to a camera viewing the space domain from the camera perspective; and widths of all the cells in the frustum space are equal with regard to the camera. The second simulation is performed at a higher resolution in the space domain than the first simulation: and the second simulation is performed only for a subset of the cells in the grid. The grid includes a first plurality of cells in the first simulation, each cell being configured to assume any of at least an on state and an off state; only a second plurality selected from the first plurality of cells as being in the on state are included in the second simulation; and each of the cells in the second plurality of cells includes a further subdivision not present in a remainder of the first plurality of cells, the further subdivision providing the higher resolution of the second simulation. 
     In a second aspect, a computer program product is tangibly embodied in a computer-readable storage medium and includes instructions that when executed by a processor perform a method for applying details in a simulation. The method includes obtaining first data corresponding to a first simulation of matter in a space domain. The method includes performing, using the first data, a second simulation of the matter producing second data representing details for the first simulation, the second data distributed in the space domain using a grid where each cell has a common depth-to-size ratio from a camera perspective. The method includes rendering an image of the matter, wherein the second data is obtained from the grid and used in the rendering. 
     In a third aspect, a system includes at least one simulator tangibly implemented in a computer readable storage device, the simulator configured to: perform a first simulation of matter in a space domain, the first simulation producing first data; and perform a second simulation of the matter using the first data, the second simulation producing second data representing details for the first simulation, the second data distributed in the space domain using a grid where each cell has a common depth-to-size ratio from a camera perspective. The system includes a renderer tangibly implemented in a computer readable storage device, the renderer configured to render an image of the matter, wherein renderer obtains the second data from the grid for use in the rendering. 
     Implementations can include any or all of the following features. The depth-to-size ratio is determined by a depth of each cell and a height or width of each cell. The first data includes a vector field for the matter in the space domain and at least one scalar field for the matter in the space domain; and the second data includes at least one detail scalar field representing the details. The vector field represents velocities of the matter in the space domain; and the scalar field and the detail scalar field represent at least one physical characteristic of the matter. First and second scalar fields in the first data represent a temperature and a density, respectively, of the matter in the first simulation; and first and second detail scalar fields in the second data represent a temperature and a density, respectively, of the matter in the second simulation. 
     Implementations can include any or all of the following features. The space domain has a first resolution for the first simulation that is visually of a low frequency, the first simulation representing a low frequency fluid motion; and the space domain has a second resolution for the second simulation that is visually of a high frequency, the second resolution higher than the first resolution, the second simulation representing spatially independent high frequencies to the low frequency fluid motion. The grid is a perspective grid based on three dimensional cells arranged in a frustum space. The three dimensional cells are shaped so that: heights of all the cells in the frustum space are equal with regard to a camera viewing the space domain from the camera perspective; and widths of all the cells in the frustum space are equal with regard to the camera. The second simulation is performed at a higher resolution in the space domain than the first simulation: and the second simulation is performed only for a subset of the cells in the grid. The grid includes a first plurality of cells in the first simulation, each cell being configured to assume any of at least an on state and an off state; only a second plurality selected from the first plurality of cells as being in the on state are included in the second simulation; and each of the cells in the second plurality of cells includes a further subdivision not present in a remainder of the first plurality of cells, the further subdivision providing the higher resolution of the second simulation. 
     The details of one or more implementations are set forth in the accompanying drawings and the description below. Other features and advantages will be apparent from the description and drawings, and from the claims. 
    
    
     
       DESCRIPTION OF DRAWINGS 
         FIG. 1  is a block diagram of an example computer system that can generate and render fluid models. 
         FIG. 2  is a flowchart of an example process for rendering generating a fluid model. 
         FIGS. 3A  and B are block diagrams of an example fluid model. 
         FIG. 4  is a block diagram of a computing system that can be used in connection with computer-implemented methods described in this document. 
     
    
    
     Like reference symbols in the various drawings indicate like elements. 
     DETAILED DESCRIPTION 
       FIG. 1  is a block diagram of an example computer system  100  that can generate and render fluid models. In some implementations, the computer system  100  generates a three dimensional model of a fluid, applies high resolution detail to the model, and renders the model into a two dimensional image. For example, such high-resolution detail can be selectively distributed using a perspective grid in the model. The computer system  100  can be used to make frames of a video, such as for a cinematic movie or live videogame output, to name just a few examples. 
     A material features data repository  102  can store data defining fluid behavior for use in one or more fluid simulations. In some examples, the data in the materials features data repository  102  includes vector and scalar features used to define parameters of a fluid that can affect the visual appearance of the fluid. For example, a smoke fluid can be based on vector values for airflow and scalar values for temperature and density. 
     A fluid simulator  104  and/or  106  can receive data defining fluid behavior. In some implementations, the fluid simulator  104  and/or  106  can generate a three dimensional model of the fluid, the model including at least one vector field and at least one scalar field. In some examples, the fluid simulators  104  and/or  106  can receive additional data, such as a three dimensional model defining an environment in which the fluid is modeled. In some examples, the fluid simulator  104  can be configured to solve fluid motion using the same or different calculations as the fluid simulator  106 . For example, the fluid simulator  104  can use the Navier-Stokes method of solving globally coupled fluid motion, and the fluid simulator  106  can use the incompressible Euler equations method of solving globally coupled fluid motion. Other simulation methods can be used. The system  100  can include one or more simulators, e.g., the simulator  104  and/or  106 . 
     In some implementations, a three dimensional model created by the fluid simulator  104  and/or  106  can be stored in an intermediate storage  108 . The three dimensional model can be defined with reference to any of multiple space domains capable of representing at least three dimensions, for example a Cartesian world space domain. In some examples, the fluid model can be accessed to solve an engineering problem or used in motion picture rough cuts. The intermediate storage  108  can be based on one or more computer readable media. 
     The fluid model can be used by a noise simulator  110  to create a high frequency fluid model. The noise simulator can increase the detail level of the original fluid model by applying noise to the vector and/or scalar fields of the fluid model. For example, the fluid model can be treated as non-globally-coupled. In some examples, the noise applied to the fluid model can be of a higher frequency than the fluid model. In other implementations, another simulator can be used to generate detail data at a higher resolution than the earlier simulation. 
     The fluid model can be rendered by a render engine  112  and/or  114 . The render engines  112  and/or  114  can perform volume rendering functions to create a two dimensional image from the three dimensional fluid model. In some examples, the render engine  112  can perform ray tracing volume rendering and/or the render engine  114  can perform raster volume rendering. The render engine  112  and/or  114  can store two dimensional images to a film  116 , a disk  118 , live video output  120 , and/or other output media. The system  100  can include one or more render engines, e.g., the render engine  112  and/or  114 . 
     The fluid model can be incremented by the fluid simulator  104  and/or  106 , such as to represent points in time. In some implementations, such incrementing can be performed when generating individual video frames. For example, a model for a video to be shown at sixty frames per second can by incremented by one sixtieth of a second. 
       FIG. 2  is a flowchart of an example process  200  for generating and rendering a fluid model. In some implementations, the process  200  can be used to generate a first fluid model, identify areas of the model to be displayed, generate high frequency details based on the first fluid model to create a second fluid model, and display the second fluid model. 
     A first simulation can be performed to create first data ( 202 ). In some implementations, a globally coupled fluid model can be solved to create scalar and vector fields that represent physical properties of the model, such as temperature, color, density, velocity, and state of matter. For example, the fluid simulator  104  and/or  106  can generate a relatively low-resolution simulation of a fluid, such as the expansion of gas in a simulated explosion. 
     The environment containing the model can be partitioned into a perspective grid, for example a frustum-shaped three dimensional grid. Some of the cells can be identified as containing nonzero scalar values ( 204 ), and these cells can be assigned a value such as ‘on’ ( 206 ). Other cells can be assigned a value ‘off’ ( 208 ). In some implementations, either ‘on’ or ‘off’ can be a default value that is initially applied to all cells, and only the applicable one of steps  206  and  208  need then be performed. 
     Cells containing portions of the model, such as those assigned a value ‘on,’ can be partitioned ( 210 ) into subcells. In some implementations, the partitioning is performed automatically in all ‘on’ cells based on their status. 
     A second simulation can be performed to create second data ( 212 ). In some implementations, for each subcell, pseudo-random numbers within a predefined range can be added to the values of the scalar and/or vector fields to represent turbulence or noise. For example, the noise simulator  110  can create the second data. 
     The second data can be rendered ( 214 ) into a two dimensional image. In some examples, a color can be determined for each point in the scalar and/or vector fields. For example, in a model of smoke, the value at a point in a scalar field representing density and a scalar field representing temperature can be collected. The two scalar values can be used as the input to a function that returns a color for each point, such as a red, green, blue color (RGB color) with an alpha level (e.g., transparency). The color values can be used with volume rendering techniques to create a two dimensional image. 
     One or more of the operations of the method  200  can be repeated, such as for each frame of a video. Although a particular number, order, and type of operations are shown, it will be understood that other numbers, orders, and types of operation are possible. For example, the operations  204 - 210  can represent optional optimization operations intended to prevent calculation for volume not containing the model. 
       FIGS. 3A  and B are block diagrams of an example fluid model. The fluid model can be used to determine the color and shape of a fluid in a virtual environment for rendering into a two dimensional shape. In some examples, the fluid model can generally include data of a relatively low frequency and, near a viewport, the fluid model can include data of a relatively high frequency, such as to provide visual detail. 
     In a first simulation, data  300 , which can represent one or more fluids at a particular time, can be defined with regard to any space domain, for example a three dimensional Cartesian coordinate space, or can be defined using any other indexing method. A coordinate grid  302  here illustrates two of the dimensions of the Cartesian coordinate system, with the third dimension not visible. One or more simulation fluids  304  can be represented in the data  300  using at least a vector field and/or a scalar field. The vector and/or scalar fields can be used to solve for the fluids  304  at an arbitrary point in time. For example, if the state of the vector and/or scalar fields is known at a time T 0 , the state of the vector and/or scalar fields at another time T 1  can be determined. The shape of one or more of the fluids  304  can then be different at the times T 0  and T 1 . 
     In some examples, a vector field can represent a velocity of the fluids  304  and a scalar field can represent a physical property of the fluid, such as temperature, density, color, and/or state of matter. In some examples, the fluids  304  can be considered to be globally coupled. In some examples, the data  300  can be generated at a first resolution and can be used to represent fluid flow at the first resolution. Thus, the data  300  can be at a low resolution and represent low resolution fluid flow. 
     In a second simulation, data  350 , which can represent fluids at a particular time, can be organized using a frustum coordinate space, or using another indexing and/or perspective indexing method. A coordinate grid  352  is shown to illustrate two of the three dimensions of the frustum coordinate space. Simulation fluids  354  are here represented in the data  350  by at least a vector field and/or a scalar field. In some examples, the vector field can represent the velocity of the fluids  354  and a scalar field can represent a physical property, such as temperature, density, color, and/or state of matter. The vector and/or scalar fields can be modified to add detail to the fluids  354 , such as to improve the visual appearance of the fluids  354  when rendered. In some examples, the fluids  304  are used to create the fluids  354  at the same time state. 
     The frustum space in the data  350  can represent the area visible to a virtual camera  356  used, for example, in rendering the data  350  into a two dimensional image. In some examples, the frustum space is perspective space. The frustum space can be configured to place more high-resolution detail near the camera, where it matters more to a viewer. For example, the ratio of height or width to depth of each cell in the frustum space can be constant. Here, a height of each cell as seen by the camera is defined using an x-axis, and a depth of each cell as seen by the camera is defined using a z-axis. The width of each cell as seen by the camera is not visible in  FIG. 3B , but can be defined using a y-axis in analogy with the x-axis. Here, for a cell  358  near the virtual camera  356  and a cell  360  farther from the virtual camera, the height to depth ratio of the cell  358  (dx 1 :dz 1 ) and that of the cell  360  (dx 2 :dz 2 ) can be equal (dx 1 :dz 1 =dx 2 :dz 2 ). In such examples, the cells near the camera have the same height to depth ratio as all other cells, and have a smaller volume than the cells farther away from the camera. In the frustum space, high level simulation data for a cell near the camera is applied to a smaller region of the model than other high level simulation data for a cell far from the camera. 
     In some examples, the cells of the coordinate grid  352  can be subdivided or partitioned. For example, cells not containing the fluids  354  can be turned ‘off’indicating that the empty cells can be ignored for the second simulation. Cells containing the fluids  354  can be turned ‘on’ and subdivided into subcells for use in the second simulation. 
     A random value (e.g., noise or turbulence) can be applied to the vector and/or scalar fields of the fluids  354  in one or more subcells. For example, such data can be applied to each subcell, or to each cell that is turned ‘on,’ or to each cell of the coordinate grid  352 . In some implementations, the fluids  354  can be treated as non-globally-coupled, such that noise applied to one point of the fluids  354  does not necessarily affect the data at any remote points in the fluids  354 . In some examples, each cell can have the same amount of noise data applied and, in some examples such as where each cell&#39;s height to width ratio is constant, noise data per volume density is greater closer to the camera than farther. In some examples, the data  350  can be at a higher resolution and represent higher resolution fluid flow than the resolution of the data  300 . 
       FIG. 4  is a schematic diagram of a generic computer system  400 . The system  400  can be used for the operations described in association with any of the computer-implement methods described previously, according to one implementation. The system  400  includes a processor  410 , a memory  420 , a storage device  430 , and an input/output device  440 . Each of the components  410 ,  420 ,  430 , and  440  are interconnected using a system bus  450 . The processor  410  is capable of processing instructions for execution within the system  400 . In one implementation, the processor  410  is a single-threaded processor. In another implementation, the processor  410  is a multi-threaded processor. The processor  410  is capable of processing instructions stored in the memory  420  or on the storage device  430  to display graphical information for a user interface on the input/output device  440 . 
     The memory  420  stores information within the system  400 . In some implementations, the memory  420  is a computer-readable medium. The memory  420  is a volatile memory unit in some implementations and is a non-volatile memory unit in other implementations. 
     The storage device  430  is capable of providing mass storage for the system  400 . In one implementation, the storage device  430  is a computer-readable medium. In various different implementations, the storage device  430  may be a floppy disk device, a hard disk device, an optical disk device, or a tape device. 
     The input/output device  440  provides input/output operations for the system  400 . In one implementation, the input/output device  440  includes a keyboard and/or pointing device. In another implementation, the input/output device  440  includes a display unit for displaying graphical user interfaces. 
     The features described can be implemented in digital electronic circuitry, or in computer hardware, firmware, software, or in combinations of them. The apparatus can be implemented in a computer program product tangibly embodied in an information carrier, e.g., in a machine-readable storage device, for execution by a programmable processor; and method steps can be performed by a programmable processor executing a program of instructions to perform functions of the described implementations by operating on input data and generating output. The described features can be implemented advantageously in one or more computer programs that are executable on a programmable system including at least one programmable processor coupled to receive data and instructions from, and to transmit data and instructions to, a data storage system, at least one input device, and at least one output device. A computer program is a set of instructions that can be used, directly or indirectly, in a computer to perform a certain activity or bring about a certain result. A computer program can be written in any form of programming language, including compiled or interpreted languages, and it can be deployed in any form, including as a stand-alone program or as a module, component, subroutine, or other unit suitable for use in a computing environment. 
     Suitable processors for the execution of a program of instructions include, by way of example, both general and special purpose microprocessors, and the sole processor or one of multiple processors of any kind of computer. Generally, a processor will receive instructions and data from a read-only memory or a random access memory or both. The essential elements of a computer are a processor for executing instructions and one or more memories for storing instructions and data. Generally, a computer will also include, or be operatively coupled to communicate with, one or more mass storage devices for storing data files; such devices include magnetic disks, such as internal hard disks and removable disks; magneto-optical disks; and optical disks. Storage devices suitable for tangibly embodying computer program instructions and data include all forms of non-volatile memory, including by way of example semiconductor memory devices, such as EPROM, EEPROM, and flash memory devices; magnetic disks such as internal hard disks and removable disks; magneto-optical disks; and CD-ROM and DVD-ROM disks. The processor and the memory can be supplemented by, or incorporated in, ASICs (application-specific integrated circuits). 
     To provide for interaction with a user, the features can be implemented on a computer having a display device such as a CRT (cathode ray tube) or LCD (liquid crystal display) monitor for displaying information to the user and a keyboard and a pointing device such as a mouse or a trackball by which the user can provide input to the computer. 
     The features can be implemented in a computer system that includes a back-end component, such as a data server, or that includes a middleware component, such as an application server or an Internet server, or that includes a front-end component, such as a client computer having a graphical user interface or an Internet browser, or any combination of them. The components of the system can be connected by any form or medium of digital data communication such as a communication network. Examples of communication networks include, e.g., a LAN, a WAN, and the computers and networks forming the Internet. 
     The computer system can include clients and servers. A client and server are generally remote from each other and typically interact through a network, such as the described one. The relationship of client and server arises by virtue of computer programs running on the respective computers and having a client-server relationship to each other. 
     A number of implementations have been described. Nevertheless, it will be understood that various modifications may be made without departing from the spirit and scope of this disclosure. Accordingly, other implementations are within the scope of the following claims.