Adapting 2D fur techniques to 3D
• Easy to do in Filmo fixed viewpointo 1 vp per shot
• Difficult in interactive sceneso dynamic viewpoint
• How does the fur react to changes in camera position?
Possibilities
Static Geometry
• Fur is represented in the 3D model itself
• Relatively inexpensive• No easy fur animation• No Level of Detail• Not art-directable• No control over fur
Inflexible
Dynamic Geometry
• Fur dynamically generated• Potentially expensive• Fur can be rendered in a
separate style from model• Easy to animate• Art-directable• Controllable (size, length, ...)
Flexible
What's a GPU Graftal?A Graftal is a small "fin" of geometry, many Graftals are used on an object to represent fur/complexity. (Introduced in Kowalski '99)
A Graftal has many components:• Position (on the object)• Orientation• Level-of-Detail• Geometry• Lines or "Strokes"• Animation state• Etc...
GPU refers to the fact that these graftals are rendered entirely on the graphics processing unit.
Initial Graftal Placement
• Place a graftal at each vertex
• Graftal density depends on mesh
• Tons of room for improvement
Graftal Expansion
• Represented as a central “spine”– Blue points on the right
• Expanded to a 3D “fin” in a geometry shader
• Spinal representation allows for easy animation
Uniform Graftals
• Graftals placed at every vertex
• Graftals have uniform properties– Size, length, normal
• Looks interesting, but not artistic
Perturbed Graftals
• “Randomized” normals, sizes, lengths
• Looks more natural
• Not quite artistic– Too busy
Silhouette Graftals
• Scale graftals based on dot(Normal, View)
• Emphasize graftals on object edges– Efficiently!
• Notice the grid noise– Result of initial placement
Multiple Levels of Detail
• Graftals sorted into multiple Levels of Detail
• Based on dot(N,V)
• Rendered in different styles
Performance
• GeForce 8800 GTS (low-end)
• Frame Budget:16ms for 60 fps
• 4ms is a valid graftal budget
Stages Time (ms) # Graftals Time/Graftal
Culling 0.3 70,000 ~
LOD Sort #1 0.1 35,000 ~
LOD Sort #2 0.1 35,000 ~
LOD Draw #1 4.7 10,000 470 ns
LOD Draw #2 1.3 2,700 481 ns
Total: 6.5 ms 70,000 93 ns
The Problem
• The Question:o How do we represent furry or
complex objects (like grass) in a stylized 3D scene?
• Answer: o Study traditional animation!
• The Challenge:o Applying animation techniques to
3D real-time rendering• The Solution:
o Graftals!
What's been accomplished thus far?
GPU Graftal Implementation• Research!• Graftal system implemented completely on GPU
o CPU independento Only 1 draw() call required (per object)
• Complex model with >34,000 graftals• Running at at ~300 fps
o Compared to 2-4fps for the original paper• Basic Graftal Level-of-Detail rules
What I plan to accomplish
By the end of the quarter:• Produce images comparable to the original paper
Next quarter:• Level-Of-Detail rules• Individualized Graftals
o Randomized size, shape, orientation...• Customization system
o Currently, complex shader code• Fully polished example with several different classes of graftals
o Furry creature in grass• Initial Graftal distribution system
o Even coverage, but no visible pattern