Art Tevs, Saarbrücken, Germany max planck institut informatik osg-user-meeting, Paris, april 2008.

Post on 27-Mar-2015

215 views 2 download

Tags:

Transcript of Art Tevs, Saarbrücken, Germany max planck institut informatik osg-user-meeting, Paris, april 2008.

Art Tevs, Saarbrücken, Germany

max planck institutmax planck institutinformatikinformatik

osg-user-meeting, Paris, april 2008

Overview

About Me– publications– projects

osgPPU– overview– classes– examples

About Me

Art Tevs, born in Russia, living in Germany Master Degree in Computer Science in University

of Saarland, Saarbrücken, Germany PhD student in Max-Planck-Institut Informatik,

Saarbrücken, Germany– research topics: rendering, natural phenomena, GPUs,

geometry processing (just started)

About Me (publications)

Siggraph07, I. Ihrke, G. Ziegler, A. Tevs, C. Theobalt, M. Magnor, H.-P. Seidel, "Eikonal Rendering: Efficient Light Transport in Refractive Objects"– realistic rendering of refractive objects with spatially

varying properties (refractive index, attenuation, scattering, ...), first time using OSG and osgPPU

About Me (publications)

I3D08, A. Tevs, I. Ihrke, H.-P. Seidel, "Maximum Mipmaps for Fast, Accurate, and Scalable Dynamic Height Field Rendering"– quadtree-like datastructure for efficient ray-heightmap

intersection on the GPU (usuable displacement mapping), using osgPPU for computations

About Me (projects)

osgPPU ( http://projects.tevs.eu/osgppu )– developed during the Siggraph07 project– offscreen renderer using GLSL shaders for

computations– used for post-processing effects– used to compute maximum-mipmap in the I3D08

project– working hard on v0.2 release– osgPlugins/osgdb_ppu to read/write osgPPU graphs

from/to .ppu files

osgPPU

Screenshot from Eikonal Rendering (Siggraph07)

osgPPU

Screenshots from Maximum Mipmaps (I3D08)

osgPPU Processor

– derived from osg::Group– can be placed anywhere in the scene graph– contains camera pointer to retrieve texture attachments

and viewport data– do initialize, optimize, update and draw PPU graph– resolve cycles in the Unit graph by placing a

BarrierNode which blocks the traversion

osgPPU Unit (base class)

– derived from osg::Group– should be placed in the processor's subgraph– collect Input data (textures) from the parent Units

(output textures) or from processor (camera attachments)

– connect input Unit to specified uniform (usefull for shader parameters)

– a lot of virtual functions to override in derived classes

osgPPU UnitBypass

– derived from osgPPU::Unit– perform no rendering– do just set OutputTexture = InputTexture– very usefull to just bypass the data for example from

the processor's camera

UnitDepthbufferBypass– derived from osgPPU::UnitBypass– perform no rendering– bypass the processor's camera depthbuffer attachment– usefull to bring the depthbuffer texture into the PPU

graph

osgPPU UnitTexture

– derived from osgPPU::Unit– perform no rendering– bypass a user specified input texture (external texture)

to the output– very usefull to bring external data into the PPU graph

osgPPU UnitInOut

– derived from osgPPU::Unit– render a 2D screenquad to perform computation on the

input data– use FrameBufferObject (FBO) to setup the output

texture– supports MRT by moving the MRT setup code into the

FBO patch for the new osg v2.4

UnitInResampleOut– derived from osgPPU::UnitInOut– same as UnitInOut however resample the output

texture by specified factor

osgPPU UnitInMipmapOut

– derived from osgPPU::UnitInOut– same as UnitInOut however the output texture is

mipmapped– compute the mipmap data by either applying the

glGenerateMipmapsEXT or the attached Shader program

UnitText– derived from osgPPU::UnitInOut– don't render the 2D quad, bypass the input to the output– render an osgText::Text on the output texture– very usefull to render text into a texture

osgPPU UnitOut

– derived from osgPPU::Unit– perform as UnitInOut but don't use FBO– used to render the input to the frame buffer– usualy the last unit in the osgPPU graph to bring the

computed result to the screen

UnitOutCapture– derived from osgPPU::UnitOut– same as UnitOut but after the rendering write the input

texture to a file– very usefull to capture screen contents in upto 4K

resolution (8K on G80 chips)

osgPPU (examples) viewer

– a simple viewer for the .ppu files– ./viewer file.ppu [scene.osg = default teapot]

dof– a simple „faked“ depth of field effect with osgPPU– ./dof [scene.osg = default cow.osg]

hdr– shows implementation of HDR rendering– ./hdr [scene.osg = default teapot]

osgPPU (examples - DoF)

http://www.daionet.gr.jp/~masa/archives/GDC2003_DSTEAL.ppt

Color bypass

Depthmap bypass

DoF resample0.5

DoF resample0.5

DoF blurvertical

DoF blurhorizontal

DoF blurvertical

DoF blurhorizontal

DoF Result

osgPPU (examples - DoF)

http://www.daionet.gr.jp/~masa/archives/GDC2003_DSTEAL.ppt

osgPPU (examples - HDR)

http://msdn2.microsoft.com/en-us/library/bb173484.aspx

Camera Bypass

Downsample

Compute avg.luminance

Compute scaledluminance

BrightpassDownsample

Blur vertical Blur horizontalTone mapping

osgPPU (examples - HDR)

http://www.daionet.gr.jp/~masa/archives/GDC2003_DSTEAL.ppt

Thank You!

Questions, Discussion, French-Beer...