22

What Well Be Covering Today: Modified Butterfly Subdivision Texturing and Antialiasing Global Illumination via Radiosity

Embed Size (px)

Citation preview

Page 1: What Well Be Covering Today: Modified Butterfly Subdivision Texturing and Antialiasing Global Illumination via Radiosity
Page 2: What Well Be Covering Today: Modified Butterfly Subdivision Texturing and Antialiasing Global Illumination via Radiosity

What We’ll Be Covering Today:

• Modified Butterfly Subdivision

• Texturing and Antialiasing

• Global Illumination via Radiosity

Page 3: What Well Be Covering Today: Modified Butterfly Subdivision Texturing and Antialiasing Global Illumination via Radiosity

Modified Butterfly Subdivision

• Based on Dyn/Levin/Gregory Butterfly Subdivision

• Adds rules for non-regular vertices– Standard Butterfly is not C1 at k=3 or k>7

Page 4: What Well Be Covering Today: Modified Butterfly Subdivision Texturing and Antialiasing Global Illumination via Radiosity

Mesh Data Structure

• List of vertices• Each vertex has a set

edges (vertices it is connected to)– sorted in order around

vertex

– Not guaranteed CCW (normal problems)

Page 5: What Well Be Covering Today: Modified Butterfly Subdivision Texturing and Antialiasing Global Illumination via Radiosity

Vertex Normals

• Formulas from SIG2000 course notes

• Problems with boundary edge rules– Possibly due to bad

vertex orientation

Page 6: What Well Be Covering Today: Modified Butterfly Subdivision Texturing and Antialiasing Global Illumination via Radiosity

Starfish-like Thing

Page 7: What Well Be Covering Today: Modified Butterfly Subdivision Texturing and Antialiasing Global Illumination via Radiosity

Frog-ish Head

Page 8: What Well Be Covering Today: Modified Butterfly Subdivision Texturing and Antialiasing Global Illumination via Radiosity

Anti-Aliasing

• Standard OpenGL Accumulation Buffer techniques

• Helpful Tip: Don’t save your antialiasing example pictures as JPEG’s

Page 9: What Well Be Covering Today: Modified Butterfly Subdivision Texturing and Antialiasing Global Illumination via Radiosity

Texture Mapping

• Calculate vertex texture coordinates using spherical projection

• Issues to Deal with:– Texture coordinate

problems

– Polar Distortion

Page 10: What Well Be Covering Today: Modified Butterfly Subdivision Texturing and Antialiasing Global Illumination via Radiosity

Wrapped Texture Coordinates

• Vertices can only have one texture coordinate– Some need two

• Two Solutions:– Duplicate vertices

(bad, fast)

– Detect & Fix at render time (good, slow)

Page 11: What Well Be Covering Today: Modified Butterfly Subdivision Texturing and Antialiasing Global Illumination via Radiosity

At-Pole Texture Coordinates

• Singularity at poles– entire line of texture on

one point

– OpenGL cannot handle this gracefully

• Again, can be detected and corrected at render-time

Page 12: What Well Be Covering Today: Modified Butterfly Subdivision Texturing and Antialiasing Global Illumination via Radiosity

Polar Distortion Problem

• Texture mapped like lines of lattitude / longitude

• Lines get closer at poles

• Distort texture to counter this effect

• WARNING: distorted texture will not tile!

Page 13: What Well Be Covering Today: Modified Butterfly Subdivision Texturing and Antialiasing Global Illumination via Radiosity

Polar Distortion Solution

Page 14: What Well Be Covering Today: Modified Butterfly Subdivision Texturing and Antialiasing Global Illumination via Radiosity

Son Of Frog-ish Head

Page 15: What Well Be Covering Today: Modified Butterfly Subdivision Texturing and Antialiasing Global Illumination via Radiosity

Radiosity

• Progressive Refinement (Shooting)– My machine only has 256 MB of RAM– Large Scenes == Thrashing– Throw away form factors after each ‘shot’

• Use hemicube to calculate form factors– Projecting faces – easy way and hard way

Page 16: What Well Be Covering Today: Modified Butterfly Subdivision Texturing and Antialiasing Global Illumination via Radiosity

Form Factors the Hard Way

• Clip and project each poly onto faces of hemicube (geometrically)

• Find pixels that intersect projected poly

A HUGE WASTE OF PROGRAMMING EFFORT

(and it’s really slow, too)

Page 17: What Well Be Covering Today: Modified Butterfly Subdivision Texturing and Antialiasing Global Illumination via Radiosity

Form Factors the Easy Way

• Use OpenGL’s Z-buffer– Encode each face with a color– Graphics Hardware speeds this up

• Can be less accurate than geometric method– Standard Z-Buffer accuracy problem

Page 18: What Well Be Covering Today: Modified Butterfly Subdivision Texturing and Antialiasing Global Illumination via Radiosity

Other Implementation Issues

• Use double precision!– Dealing with summation of lots of tiny values– Single precision ‘loses light’– Particularly for Fq’s in HemiCube

• OpenGL and multi-threading do not really mix together so nicely…

Page 19: What Well Be Covering Today: Modified Butterfly Subdivision Texturing and Antialiasing Global Illumination via Radiosity

Progressive Refinement

Page 20: What Well Be Covering Today: Modified Butterfly Subdivision Texturing and Antialiasing Global Illumination via Radiosity

Low Hemicube Resolution

Page 21: What Well Be Covering Today: Modified Butterfly Subdivision Texturing and Antialiasing Global Illumination via Radiosity

Radiosity On Butterfly Surfaces

Page 22: What Well Be Covering Today: Modified Butterfly Subdivision Texturing and Antialiasing Global Illumination via Radiosity