Welcome Guestlogin to KGsePGregister at KGsePG email | FAQs

Basic Physics

download

    1 of 72

    Basic Physics



    Basic Physics - Transcript



    CSCE 590E Spring 2007
    Basic Physics
    By Jijun Tang

    Announcements
     Final game demo will be held at 2:00pm,
    Tuesday, May 8th
     Place: Amoco hall, open to the college
     Pizza and drink will be served
     Second presentation will be held on April 16th
    and 18th
     Give progress report
     Show partial demos
     Discuss problems
     Modify designs

    The Dot Product
     The dot product is a product between
    two vectors that produces a scalar
     The dot product between two
    n-dimensional vectors V and W is
    given by
     In three dimensions,

    The Dot Product
     The dot product can be used to project
    one vector onto another
    α
    V
    W

    The Cross Product
     The cross product between V and W is
     A helpful tool for remembering this
    formula is the pseudodeterminant

    The Cross Product
     The cross product satisfies the
    trigonometric relationship
     This is the area of
    the parallelogram
    formed by
    V and W
    α
    V
    W
    ||V|| sin α

    The Cross Product
     The area A of a triangle with vertices
    P1, P2, and P3 is thus given by

    Transformations
     Suppose that the coordinate axes in
    one coordinate system correspond to
    the directions R, S, and T in another
     Then we transform a vector V to the
    RST system as follows

    Transformations
     Homogeneous coordinates
     Four-dimensional space
     Combines 3 × 3 matrix and translation
    into one 4 × 4 matrix

    Geometry
     A line in 3D space is represented by
     S is a point on the line, and V is the
    direction along which the line runs
     Any point P on the line corresponds to a
    value of the parameter t
     Two lines are parallel if their direction
    vectors are parallel
    ( )t t= +P S V

    Geometry
     A plane in 3D space can be defined by
    a normal direction N and a point P
     Other points in the plane satisfy
    P
    Q
    N

    Geometry
     Distance d from a point P to a line
    S + t V
    P
    VS
    d

    Geometry
     Use Pythagorean theorem:
     Taking square root,
     If V is unit length, then V 2 = 1

    Geometry
     Intersection of a line and a plane
     Let P(t) = S + t V be the line
     Let L = (N, D) be the plane
     We want to find t such that L ⋅ P(t) = 0
     Careful, S has w-coordinate of 1, and V
    has w-coordinate of 0
    x x y y z z w
    x x y y z z
    L S L S L S Lt L V L V L V
    + + +

    = − = −
    + +�
    L S
    L V

    Geometry
     If L ⋅ V = 0, the line is parallel to the
    plane and no intersection occurs
     Otherwise, the point of intersection is
    ( )t = −

    L SP S VL V

    Real-time Game Physics
    Introduction

    Why Physics?
     The Human Experience
     Real-world motions are physically-based
     Physics can make simulated game worlds
    appear more natural
     Makes sense to strive for physically-realistic
    motion for some types of games
     Emergent Behavior
     Physics simulation can enable a richer gaming
    experience
     Or it can kill a game

    Approaches
     Classic approaches to creating realistic
    motion:
     Artist-created keyframe animations
     Motion capture
     Both are labor intensive and expensive
     Physics simulation:
     Motion generated by algorithm
     Theoretically requires only minimal artist input
     Potential to substantially reduce content
    development cost

    Physics in Digital Content
    Creation Software
     Many DCC modeling tools provide physics
     Benefits:
     Export physics-engine-generated animation as keyframe
    data
     Enables incorporation of physics into game engines that
    do not support real-time physics
     Straightforward update of existing asset creation pipelines
     Problems:
     Does not provide player with the same emergent-
    behavior-rich game experience
     Does not provide full cost savings to developer/publisher

    Real-time Physics in Game at
    Runtime:
     Enables the emergent behavior that provides player
    a richer game experience
     Potential to provide full cost savings to
    developer/publisher
     Difficult
     May require significant upgrade of game engine
     May require significant update of asset creation pipelines
     May require special training for modelers, animators, and
    level designers
     Licensing an existing engine may significantly
    increase third party middleware costs

    License vs. Build Physics
    Engine
     License middleware physics engine
     Complete solution from day 1
     Proven, robust code base (in theory)
     Most offer some integration with DCC tools
     Features are always a tradeoff
     Build physics engine in-house
     Choose only the features you need
     Opportunity for more game-specific optimizations
     Greater opportunity to innovate
     Cost can be easily be much greater
     No asset pipeline at start of development

    Engines
     Commercial
     Game Dynamics SDK (Havok.com)
     Renderware Physics (renderware.com)
     NovodeX SDK (novodex.com)
     Free
     Open Dynamic Engine (ODE) (ode.org)
     Tokamak Game Physics SDK
    (tokamakphysics.com)
     Newton Game Dynamics SDK
    (newtondynamics.com)

    Real-time Game Physics
    The Beginning: Particle
    Physics

    Particle Physics
     What is a Particle?
     A sphere of finite radius with a perfectly smooth,
    frictionless surface
     Experiences no rotational motion (or assume the
    sphere has no size)
     Particle Kinematics
     Defines the basic properties of particle motion
     Position, Velocity, Acceleration

     Location of Particle in World Space
     SI Units: meters (m)
     Changes over time when object moves
    p ( t ) p ( t +
    t )
    Particle Position
    zyx ppp ,,=p

    Particle Velocity and
    Acceleration
     Velocity (SI units: m/s)
     First time derivative of position:
     Acceleration (SI units: m/s2)
     First time derivative of velocity
     Second time derivative of position
    )()()(lim)(
    0
    tdt
    d
    t
    tttt
    t
    pppV =

    −∆+
    =
    →∆
    )()()( 2
    2
    tdt
    dtdt
    dt pVa ==

    Newton’s 2nd Law of Motion
     Paraphrased – “An object’s change in
    velocity is proportional to an applied force”
     The Classic Equation:
     m = mass (SI units: kilograms, kg)
     F(t) = force (SI units: Newtons)
    ( ) ( )tmt aF =

    F=ma

    What is Physics Simulation?
     The Cycle of Motion:
     Force, F(t), causes acceleration
     Acceleration, a(t), causes a change in velocity
     Velocity, V(t) causes a change in position
     Physics Simulation:
     Solving variations of the above equations over
    time to emulate the cycle of motion

    Example: 3D Projectile Motion
     Constant Force
     Weight of the projectile, W = mg
     g: constant acceleration due to gravity (9.81m/s2)
     Closed-form Projectile Equations of Motion:
     These closed-form equations are valid, and
    exact*, for any time, t, in seconds, greater than
    or equal to tinit
    ( )initinit ttt −+= gVV )(
    ( ) ( ) 22
    1)( initinitinitinit ttttt −+−+= gVpp

    Example: 3D Projectile Motion
     Initial Value Problem
     Simulation begins at time tinit
     The initial velocity, Vinit and position, pinit, at time tinit, are known
     Solve for later values at any future time, t, based
    on these initial values
     On Earth:
     If we choose positive Z to be straight up (away
    from center of Earth), gEarth = 9.81 m/s2:
    2m/s 81.9,0.0,0.0ˆ −=−= kgEarthEarthg

    Concrete Example: Target
    Practice
    V i n i
    t
    F = w e i g h t = m gTarget
    Projectile Launch
    Position, pinit

     Choose Vinit to Hit a Stationary Target
     ptarget is the stationary target location
     We would like to choose the initial velocity, Vinit, required to hit the target at some future time, thit.
     Here is our equation of motion at time thit:
     Solution in general is a bit tedious to derive…
     Infinite number of solutions!
     Hint: Specify the magnitude of Vinit, solve for its direction
    Target Practice
    ( ) ( ) 22
    1
    inithitinithitinitinittarget tttt −+−+= gVpp

     Choose Scalar launch speed, Vinit, and Let:
     Where:
    Solution
    φφθφθ sin,cossin,coscos initinitinitinit VVV=V
    ( ) ( ) ( ) ( )
    ( ) ( )
    ( )θθ
    φ
    θθ
    sincos
    2
    12
    tan
    sin ; cos
    ,,,,
    2,,
    22
    2
    2
    ,,
    2
    ,,
    ,,
    2
    ,,
    2
    ,,
    ,,
    +
    +−+
    =
    
    
    



    

    −+

    

    

    

    −±
    =
    −−−

    =
    −−−

    =
    xinityinitxtargetytarget
    init
    zinitztarget
    initinit
    yinitytargetxinitxtarget
    yinitytarget
    yinitytargetxinitxtarget
    xinitxtarget
    ppppA
    A
    V
    g
    ppV
    AgV
    AgAA
    pppp
    pp
    pppp
    pp

     If Radicand in tanφ Equation is Negative:
     No solution. Vinit is too small to hit the target
     Otherwise:
     One solution if radicand == 0
     If radicand > 0, TWO possible launch angles, φ
     Smallest φ yields earlier time of arrival, thit
     Largest φ yields later time of arrival, thit
    Rules
    solution! no then ,02
    12 if ,,
    22
    2 <

    

    

    

    −+

    

    

    

    − zinitztarget
    initinit
    ppV
    AgV
    AgA

    969.31
    Example 1
    Vinit = 25 m/sValue of Radicand of tanφ equation:
    Launch angle φ: 19.4 deg or 70.6 deg
    0.00
    5.00
    10.00
    15.00
    20.00
    25.00
    30.00
    35.00
    40.00
    45.00
    0.00 20.00 40.00 60.00
    Horizontal Position (m)
    Ve
    rtic
    al
    Po
    sit
    ion
    (m
    ) Projectile Launch
    Position
    Target Position
    Trajectory 1 - High
    Angle, Slow Arrival
    Trajectory 2 - Low
    Angle, Fast Arrival

    Example 2
    0.00
    5.00
    10.00
    15.00
    20.00
    25.00
    30.00
    35.00
    40.00
    45.00
    0.00 20.00 40.00 60.00
    Horizontal Position (m)
    Ve
    rtic
    al
    Po
    sit
    ion
    (m
    ) Projectile Launch
    Position
    Target Position
    Trajectory 1 - High
    Angle, Slow Arrival
    Trajectory 2 - Low
    Angle, Fast Arrival
    60.2Vinit = 20 m/sValue of Radicand of tanφ equation:
    Launch angle φ: 39.4 deg or 50.6 deg

    Example 3
    ­290.4Vinit = 19 m/sValue of Radicand of tanφ equation:
    Launch angle φ: No solution! Vinit too small to reach target!
    0.00
    5.00
    10.00
    15.00
    20.00
    25.00
    30.00
    35.00
    40.00
    45.00
    0.00 20.00 40.00 60.00
    Horizontal Position (m)
    Ve
    rtic
    al
    Po
    sit
    ion
    (m
    ) Projectile Launch
    Position
    Target Position
    Trajectory with farthest
    reach barely
    undershoots target

    Example 4
    2063Vinit = 18 m/sValue of Radicand of tanφ equation:
    Launch angle φ: ­6.38 deg or 60.4 deg
    0.00
    5.00
    10.00
    15.00
    20.00
    25.00
    30.00
    35.00
    40.00
    45.00
    0.00 20.00 40.00 60.00
    Horizontal Position (m)
    Ve
    rtic
    al
    Po
    sit
    ion
    (m
    ) Projectile Launch
    Position
    Target Position
    Trajectory 1 - High
    Angle, Slow Arrival
    Trajectory 2 - Low
    Angle, Fast Arrival

    Real-time Game Physics
    Practical Implementation:
    Numerical Simulation

    Beauty of Close form
     Equations Presented Above
     They are “closed-form”
     Valid and exact for constant applied force
     Do not require time-stepping
     Just determine current game time, t, using system
    timer
     e.g., t = QueryPerformanceCounter /
    QueryPerformanceFrequency or equivalent on Microsoft®
    Windows® platforms
     Plug t and tinit into the equations
     Equations produce identical, repeatable, stable results,
    for any time, t, regardless of CPU speed and frame
    rate

    Why Numerical Simulation?
     The above sounds perfect
     Why not use those equations always?
     Constant forces aren’t very interesting
     Simple projectiles only
     Closed-form solutions rarely exist for interesting (non-
    constant) forces
     How should we handle wind?
     We need a way to deal when there is no closed-
    form solution…

    Numerical Simulation
    Techniques for incrementally solving the
    equations of motion
     when forces applied to an object are not
    constant, or
     when otherwise there is no closed-form
    solution

    Finite Difference Methods
     What are They?
     The most common family of numerical
    techniques for rigid-body dynamics simulation
     Incremental “solution” to equations of motion
     Derived using truncated Taylor Series
    expansions
     See text for a more detailed introduction
     “Numerical Integrator”
     This is what we generically call a finite difference
    equation that generates a “solution” over time

    Finite Difference Methods
     The Explicit Euler Integrator:
     Properties of object are stored in a state vector, S
     Use the above integrator equation to incrementally update S
    over time as game progresses
     Must keep track of prior value of S in order to compute the
    new
     For Explicit Euler, one choice of state and state derivative for
    particle:
    ( ) ( ) ( ) )( 2
    derivative state
    stateprior statenew
    tOtdt
    dtttt ∆+∆+=∆+
     
    SSS
    pVS ,m= VFS ,=dtd

    Explicit Euler Integration
    F=Weight = mg Vinitpinit
    Vinit = 30 m/sLaunch angle, φ: 75.2 deg (slow arrival)
    Launch angle, θ: 0 deg (motion in world xz plane)
    Mass of projectile, m: 2.5 kg
    Target at <50, 0, 20> meters
    tinit
    Time p x p y p z mV x mV y mV z F x F y F z V x V y V z
    5.00 10.00 0.00 2.00 19.20 0.00 72.50 0.00 0.00 -24.53 7.68 0.00 29.00
    Velocity (m/s)Position (m) Linear Momentum (kg-m/s) Force (N)
    mVinit
    S = dS/dt =

    ∆ t = .01 s∆ t = .1 s
    Explicit Euler Integration
    
    
    
    


    
    
    
    


    =
    
    
    
    


    
    
    
    


    =
    
    
    
    


    
    
    
    


    =
    
    
    
    


    
    
    
    



    ∆+
    
    
    
    


    
    
    
    


    =∆+=∆+
    2900.2
    0.0
    0768.10
    2549.72
    0.0
    2025.19

    9000.4
    0.0
    7681.10
    0476.72
    0.0
    2025.19

    8000.7
    0.0
    5362.11
    5951.67
    0.0
    2025.19

    0.29
    0.0
    68.7
    53.24
    0.0
    0.0
    0.2
    0.0
    0.10
    5.72
    0.0
    2.19
    )()()( ttdt
    dtttt SSS
    ∆ t = .2 s
    
    
    
    


    
    
    
    


    =
    
    
    
    


    
    
    
    


    =
    
    
    
    


    
    
    
    


    =
    2895.2
    0.0
    0768.10
    2549.72
    0.0
    2.19

    8510.4
    0.0
    1536.10
    0476.72
    0.0
    2.19

    6038.7
    0.0
    5362.11
    5951.67
    0.0
    2.19
    Solution form-Closed Exact,

    Truncation Error
     The previous slide highlights values in the numerical solution
    that are different from the exact, closed-form solution
     This difference between the exact solution and the numerical
    solution is primarily truncation error
     Truncation error is equal and opposite to the value of terms
    that were removed from the Taylor Series expansion to
    produce the finite difference equation
     Truncation error, left unchecked, can accumulate to cause
    simulation to become unstable
     This ultimately produces floating point overflow
     Unstable simulations behave unpredictably

    Controlling Truncation Error
     Under certain circumstances, truncation error
    can become zero, e.g., the finite difference
    equation produces the exact, correct result
     For example, when zero force is applied
     More often in practice, truncation error is
    nonzero
     Approaches to control truncation error:
     Reduce time step, ∆ t
     Select a different numerical integrator

    Explicit Euler Integration –
    Truncation Error
    



    



    =
    



    



    



    



    ==∆
    



    



    =
    



    



    



    



    ==∆
    



    



    =
    



    



    



    



    ==∆
    0005.0
    0.0
    0.0

    2895.2
    0.0
    0768.10
    -
    2900.2
    0.0
    0768.10
    0.01s)t(Error Truncation
    049.0
    0.0
    0.0

    8510.4
    0.0
    1536.10
    -
    9000.4
    0.0
    1536.10
    0.1s)t(Error Truncation
    1962.0
    0.0
    0.0

    6038.7
    0.0
    5362.11
    -
    800.7
    0.0
    5362.11
    0.2s)t(Error Truncation
    exactnumerical
    exactnumerical
    exactnumerical
    Truncation ErrorLets Look at Truncation Error (position only)

    Explicit Euler Integration –
    Truncation Error
    (1/∆t) * Truncation Error is a linear (first­
    order) function of ∆ t: explicit Euler 
    Integration is First­Order­Accurate in time
    This accuracy is denoted by “O(∆ t)”
    0.00
    0.20
    0.40
    0.60
    0.80
    1.00
    0.00 0.05 0.10 0.15 0.20 0.25
    ∆t(secs)
    (1/
    t )
    * T
    run
    ca
    tio
    n E
    rro
    r

    Explicit Euler Integration -
    Computing Solution Over Time
    0.00
    10.00
    20.00
    30.00
    40.00
    50.00
    0.00 20.00 40.00 60.00
    Horizontal Position (m)
    Ve
    rtic
    al
    Po
    sit
    ion
    (m
    ) Projectile Launch
    Position
    Target Position
    Closed-Form
    Explicit Euler
     The solution proceeds step-by-step, each time
    integrating from the prior state
    Time p x p y p z mV x mV y mV z F x F y F z V x V y V z
    5.00 10.00 0.00 2.00 19.20 0.00 72.50 0.00 0.00 -24.53 7.68 0.00 29.00
    5.20 11.54 0.00 7.80 19.20 0.00 67.60 0.00 0.00 -24.53 7.68 0.00 27.04
    5.40 13.07 0.00 13.21 19.20 0.00 62.69 0.00 0.00 -24.53 7.68 0.00 25.08
    5.60 14.61 0.00 18.22 19.20 0.00 57.79 0.00 0.00 -24.53 7.68 0.00 23.11
    M M M M M
    10.40 51.48 0.00 20.87 19.20 0.00 -59.93 0.00 0.00 -24.53 7.68 0.00 -23.97
    Velocity (m/s)Position (m) Linear Momentum (kg-m/s) Force (N)

    Finite Difference Methods
     The Verlet Integrator:
     Must store state at two prior time steps, S(t) and S(t-∆ t)
     Uses second derivative of state instead of the first
     Valid for constant time step only (as shown above)
     For Verlet, choice of state and state derivative for a particle:
    pS = aFS == mdtd /22
    ( ) ( ) ( ) ( )
        
    derivative state
    2
    22
    2 stateprior 1 stateprior state new
    )(2 

    
    ∆+∆−−=∆+ tdt
    dtttttt SSSS

    Verlet Integration
    a=<0,0,-g>p
    S =

    d2S/dt2 =
    )( ,)( 2
    2
    initinit tdt
    dt SS
    )( ,)( 2
    2
    ttdt
    dtt initinit ∆+∆+ SS
     Since Verlet requires two prior values of state, S(t) and S(t-∆ t),
    you must use some method other than Verlet to produce the
    first numerical state after start of simulation, S(tinit+∆ t)
     Solution: Use explicit Euler integration to produce S(tinit+∆ t),
    then Verlet for all subsequent time steps
    Time p x p y p z a x a y a z
    5.00 10.00 0.00 2.00 0.00 0.00 -9.81
    5.20 11.54 0.00 7.80 0.00 0.00 -9.81
    Position (m) Acceleration (m/s2)

      
     The solution proceeds step-by-step, each time integrating from the
    prior two states
     For constant acceleration, Verlet integration produces results identical
    to those of explicit Euler
     But, results are different when non-constant forces are applied
     Verlet Integration tends to be more stable than explicit Euler for
    generalized forces
    Time p x p y p z a x a y a z
    5.00 10.00 0.00 2.00 0.00 0.00 -9.81
    5.20 11.54 0.00 7.80 0.00 0.00 -9.81
    5.40 13.07 0.00 13.21 0.00 0.00 -9.81
    5.60 14.61 0.00 18.22 0.00 0.00 -9.81
    5.80 16.14 0.00 22.85 0.00 0.00 -9.81
    6.00 17.68 0.00 27.08 0.00 0.00 -9.81
    M M M
    10.40 51.48 0.00 20.87 0.00 0.00 -9.81
    Position (m) Acceleration (m/s2)
    Verlet Integration
    S(t+∆ t)
    S(t)
    S(t-∆ t) )(2
    2
    tdt
    d S

    Real-time Game Physics
    Generalized Rigid Bodies

    Generalized Rigid Bodies
     Key Differences from Particles
     Not necessarily spherical in shape
     Position, p, represents object’s center-of-mass location
     Surface may not be perfectly smooth
     Friction forces may be present
     Experience rotational motion in addition to translational
    (position only) motion
    C e n t e r o f M a s s
    worldX
    worldZ
    objectX
    objectZ

    Generalized Rigid Bodies –
    Simulation
     Angular Kinematics
     Orientation, 3x3 matrix R or quaternion, q
     Angular velocity, ω
     As with translational/particle kinematics, all properties are
    measured in world coordinates
     Additional Object Properties
     Inertia tensor, J
     Center-of-mass
     Additional State Properties for Simulation
     Orientation
     Angular momentum, L=Jω
     Corresponding state derivatives

    Generalized Rigid Bodies -
    Simulation
     Torque
     Analogous to a force
     Causes rotational acceleration
     Cause a change in angular momentum
     Torque is the result of a force (friction, collision response,
    spring, damper, etc.)
    r FP
    = C e n t e r - o f - M a s s
    τ = r F

    Angular Vecocity

    Additional forces
     Linear Spring
     Viscous Damping
     Aerodynamic Drag
     Friction
     …

    Linear Springs
    dllkF restspring )( −=

    Viscous Damping
    ddVVcF epepdamping ))(( 12 ⋅−=

    Aerodynamic Drag
    S: projected front area
    CD: drag coefficient

    Friction

    Generalized Rigid Bodies –
    Numerical Simulation
     Using Finite Difference Integrators
     Translational components of state are the same
     S and dS/dt are expanded to include angular momentum
    and orientation, and their derivatives
     Be careful about coordinate system representation for J, R, etc.
     Otherwise, integration step is identical to the translation
    only case
     Additional Post-integration Steps
     Adjust orientation for consistency
     Adjust updated R to ensure it is orthogonal
     Normalize q
     Update angular velocity, ω

    Collision Response
     Why?
     Performed to keep objects from interpenetrating
     To ensure behavior similar to real-world objects
     Two Basic Approaches
     Approach 1: Instantaneous change of velocity at time of
    collision
     Benefits:
     Visually the objects never interpenetrate
     Result is generated via closed-form equations, and is perfectly
    stable
     Difficulties:
     Precise detection of time and location of collision can be
    prohibitively expensive (frame rate killer)
     Logic to manage state is complex

    Collision Response
     Two Basic Approaches (continued)
     Approach 2: Gradual change of velocity and position over
    time, following collision
     Benefits
     Does not require precise detection of time and location of
    collision
     State management is easy
     Potential to be more realistic, if meshes are adjusted to deform
    according to predicted interpenetration
     Difficulties
     Object interpenetration is likely, and parameters must be
    tweaked to manage this
     Simulation can be subject to numerical instabilities, often
    requiring the use of implicit finite difference methods

    Final Comments
     Instantaneous Collision Response
     Classical approach: Impulse-momentum equations
     See text for full details
     Gradual Collision Response
     Classical approach: Penalty force methods
     Resolve interpenetration over the course of a few integration
    steps
     Penalty forces can wreak havoc on numerical integration
     Instabilities galore
     Implicit finite difference equations can handle it
     But more difficult to code
     Geometric approach: Ignore physical response equations
     Enforce purely geometric constraints once interpenetration
    has occurred

    Fixed Time Step Simulation
     Numerical simulation works best if the simulator
    uses a fixed time step
     e.g., choose ∆ t = 0.02 seconds for physics updates of
    1/50 second
     Do not change ∆ t to correspond to frame rate
     Instead, write an inner loop that allows physics simulation
    to catch up with frame rate, or wait for frames to catch up
    with physics before continuing
     This is easy to do
     Read the text for more details and references!

    Final Comments
     Simple Games
     Closed-form particle equations may be all you
    need
     Numerical particle simulation adds flexibility
    without much coding effort
     Collision detection is probably the most difficult
    part of this
     Generalized Rigid Body Simulation
     Includes rotational effects and interesting (non-
    constant) forces
     See text for details on how to get started

    Final Comments
     Full-Up Simulation
     The text and this presentation just barely touch the
    surface
     Additional considerations
     Multiple simultaneous collision points
     Articulating rigid body chains, with joints
     Friction, rolling friction, friction during collision
     Mechanically applied forces (motors, etc.)
     Resting contact/stacking
     Breakable objects
     Soft bodies
     Smoke, clouds, and other gases
     Water, oil, and other fluids