Introduction to Programmable GPUs CPSC 314. Real Time Graphics

Similar documents
Introduction to Programmable GPUs CPSC 314. Introduction to GPU Programming CS314 Gordon Wetzstein, 09/03/09

Modern Hardware II, Curves. Week 12, Wed Apr 7

Tutorial on GPU Programming #2. Joong-Youn Lee Supercomputing Center, KISTI

Programmable GPUs. Real Time Graphics 11/13/2013. Nalu 2004 (NVIDIA Corporation) GeForce 6. Virtua Fighter 1995 (SEGA Corporation) NV1

The Graphics Pipeline and OpenGL III: OpenGL Shading Language (GLSL 1.10)!

Lighting and Shading II. Angel and Shreiner: Interactive Computer Graphics 7E Addison-Wesley 2015

CS 418: Interactive Computer Graphics. Basic Shading in WebGL. Eric Shaffer

CS452/552; EE465/505. Lighting & Shading

The Graphics Pipeline and OpenGL III: OpenGL Shading Language (GLSL 1.10)!

Programmable Graphics Hardware

Introduction to Computer Graphics with WebGL

GPU Programmable Graphics Pipeline

GLSL Introduction. Fu-Chung Huang. Thanks for materials from many other people

Tutorial on GPU Programming. Joong-Youn Lee Supercomputing Center, KISTI

Graphics Processing Units (GPUs) V1.2 (January 2010) Outline. High-Level Pipeline. 1. GPU Pipeline:

Pipeline Operations. CS 4620 Lecture Steve Marschner. Cornell CS4620 Spring 2018 Lecture 11

Chromatic Aberration. CEDEC 2001 Tokyo, Japan

X. GPU Programming. Jacobs University Visualization and Computer Graphics Lab : Advanced Graphics - Chapter X 1

Pipeline Operations. CS 4620 Lecture 14

Objectives. Introduce the OpenGL shading Methods 1) Light and material functions on MV.js 2) per vertex vs per fragment shading 3) Where to carry out

Basics of GPU-Based Programming

Shaders. Slide credit to Prof. Zwicker

GLSL Introduction. Fu-Chung Huang. Thanks for materials from many other people

Graphics Hardware. Instructor Stephen J. Guy

Pat Hanrahan. Modern Graphics Pipeline. How Powerful are GPUs? Application. Command. Geometry. Rasterization. Fragment. Display.

CS GPU and GPGPU Programming Lecture 7: Shading and Compute APIs 1. Markus Hadwiger, KAUST

Lecture 17: Shading in OpenGL. CITS3003 Graphics & Animation

CS770/870 Spring 2017 Open GL Shader Language GLSL

CS770/870 Spring 2017 Open GL Shader Language GLSL

CS GPU and GPGPU Programming Lecture 3: GPU Architecture 2. Markus Hadwiger, KAUST

CS GPU and GPGPU Programming Lecture 3: GPU Architecture 2. Markus Hadwiger, KAUST

CS 4600 Fall Utah School of Computing

Programmable Graphics Hardware

Objectives Shading in OpenGL. Front and Back Faces. OpenGL shading. Introduce the OpenGL shading methods. Discuss polygonal shading

CS GPU and GPGPU Programming Lecture 2: Introduction; GPU Architecture 1. Markus Hadwiger, KAUST

CS 432 Interactive Computer Graphics

12.2 Programmable Graphics Hardware

Shaders (some slides taken from David M. course)

Graphics Processing Units (GPUs) V2.2 (January 2013) Jan Kautz, Anthony Steed, Tim Weyrich

Spring 2009 Prof. Hyesoon Kim

CHAPTER 1 Graphics Systems and Models 3

Computer Graphics (CS 543) Lecture 10: Soft Shadows (Maps and Volumes), Normal and Bump Mapping

Graphics Hardware. Computer Graphics COMP 770 (236) Spring Instructor: Brandon Lloyd 2/26/07 1

Lecture 2. Shaders, GLSL and GPGPU

Graphics Hardware. Graphics Processing Unit (GPU) is a Subsidiary hardware. With massively multi-threaded many-core. Dedicated to 2D and 3D graphics

C P S C 314 S H A D E R S, O P E N G L, & J S RENDERING PIPELINE. Mikhail Bessmeltsev

Spring 2011 Prof. Hyesoon Kim

Sung-Eui Yoon ( 윤성의 )

Efficient and Scalable Shading for Many Lights

Methodology for Lecture. Importance of Lighting. Outline. Shading Models. Brief primer on Color. Foundations of Computer Graphics (Spring 2010)

Real - Time Rendering. Graphics pipeline. Michal Červeňanský Juraj Starinský

Introduction to Shaders.

CS 381 Computer Graphics, Fall 2008 Midterm Exam Solutions. The Midterm Exam was given in class on Thursday, October 23, 2008.

lecture 18 - ray tracing - environment mapping - refraction

Rasterization Overview

OPENGL RENDERING PIPELINE

CSE 167: Lecture #8: GLSL. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2012

CG Programming: 3D Texturing

Supplement to Lecture 22

CS 354R: Computer Game Technology

CS451Real-time Rendering Pipeline

3D buzzwords. Adding programmability to the pipeline 6/7/16. Bandwidth Gravity of modern computer systems

Real-Time Rendering (Echtzeitgraphik) Michael Wimmer

Intro to GPU Programming (OpenGL Shading Language) Cliff Lindsay Ph.D. Student CS WPI

COMP371 COMPUTER GRAPHICS

Mattan Erez. The University of Texas at Austin

CSE 167: Introduction to Computer Graphics Lecture #7: Lights. Jürgen P. Schulze, Ph.D. University of California, San Diego Spring Quarter 2015

C O M P U T E R G R A P H I C S. Computer Graphics. Three-Dimensional Graphics V. Guoying Zhao 1 / 65

CS427 Multicore Architecture and Parallel Computing

CS 130 Final. Fall 2015

Deferred Rendering Due: Wednesday November 15 at 10pm

CSE 167: Introduction to Computer Graphics Lecture #6: Lights. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2014

OpenGL Programmable Shaders

Hardware Accelerated Volume Visualization. Leonid I. Dimitrov & Milos Sramek GMI Austrian Academy of Sciences

Module Contact: Dr Stephen Laycock, CMP Copyright of the University of East Anglia Version 1

GpuPy: Accelerating NumPy With a GPU

Vertex and Pixel Shaders:

In-Game Special Effects and Lighting

Programming shaders & GPUs Christian Miller CS Fall 2011

CS559 Computer Graphics Fall 2015

PROFESSIONAL. WebGL Programming DEVELOPING 3D GRAPHICS FOR THE WEB. Andreas Anyuru WILEY. John Wiley & Sons, Ltd.

CS230 : Computer Graphics Lecture 4. Tamar Shinar Computer Science & Engineering UC Riverside

Shaders. Introduction. OpenGL Grows via Extensions. OpenGL Extensions. OpenGL 2.0 Added Shaders. Shaders Enable Many New Effects

Interactive Computer Graphics A TOP-DOWN APPROACH WITH SHADER-BASED OPENGL

Illumination & Shading I

Lessons Learned from HW4. Shading. Objectives. Why we need shading. Shading. Scattering

Mobile Application Programing: Android. OpenGL Operation

Phong Lighting & Materials. Some slides modified from: David Kabala Others from: Andries Van Damm, Brown Univ.

CS 4620 Program 3: Pipeline

Recall: Indexing into Cube Map

Cg 2.0. Mark Kilgard

Zeyang Li Carnegie Mellon University

Shadows. Prof. George Wolberg Dept. of Computer Science City College of New York

Chapter 7 - Light, Materials, Appearance

Computer graphics 2: Graduate seminar in computational aesthetics

Interactive Cloth Simulation. Matthias Wloka NVIDIA Corporation

CS452/552; EE465/505. Intro to Lighting

Programming Graphics Hardware

Shader Programming 1. Examples. Vertex displacement mapping. Daniel Wesslén 1. Post-processing, animated procedural textures

Programming Graphics Hardware

Transcription:

Introduction to Programmable GPUs CPSC 314 Introduction to GPU Programming CS314 Gordon Wetzstein, 02/2011 Real Time Graphics Introduction to GPU Programming CS314 Gordon Wetzstein, 02/2011 1

GPUs vs CPUs 800 GFLOPS vs 80 GFLOPS 86.4 GB/s vs 8.4 GB/s [courtesy NVIDIA] GPUs vs CPUs 800 GFLOPS vs 80 GFLOPS 86.4 GB/s vs 8.4 GB/s [courtesy NVIDIA] 2

Programmable Pipeline so far: have discussed rendering pipeline as specific set of stages with fixed functionality Programmable Pipeline now: programmable rendering pipeline! vertex shader fragment shader 3

Vertex Shader performs all per-vertex computation (transform & lighting): model and view transform perspective transform texture coordinate transform per-vertex lighting Vertex Shader input: vertex position and normal (sometimes tangent) (multi-)texture coordinate(s) modelview, projection, and texture matrix vertex material or color light sources color, position, direction etc. output: 2D vertex position transformed texture coordinates vertex color 4

Vertex Shader - Applications deformable surfaces: skinning different parts have different rigid transformations vertex positions are blended used in facial animations many transformations! upper arm: weight for M1=1 weight for M2=0 lower arm: weight for M1=0 weight for M2=1 transition zone: weight for M1 between 0..1 weight for M2 between 0..1 [courtesy NVIDIA] Fragment Shader performs all per-fragment computation: texture mapping fog input (interpolated over primitives by rasterizer): texture coordinates color output: fragment color 5

Fragment Shader - Applications Not really shaders, but very similar to NPR! A Scanner Darkly, Warner Independent Pictures GPU raytracing, NVIDIA OpenVIDIA Image Processing Volume Ray Casting, Peter Trier Vertex & Fragment Shader massively parallel computing by parallelization same shader is applied to all data (vertices or fragments) SIMD (single instruction multiple data) parallel programming issues: main advantage: high performance main disadvantage: no access to neighboring vertices/ fragments 6

Vertex Shader - Instructions Arithmetic Operations on 4-vectors: ADD, MUL, MAD, MIN, MAX, DP3, DP4 Operations on Scalars RCP (1/x), RSQ (1/ x), EXP, LOG Specialty Instructions DST (distance: computes length of vector) LIT (quadratic falloff term for lighting) Later generation: Loops and conditional jumps Vertex Shader - Example morph between cube and sphere & lighting vertex attributes: v[0..n], matrices c[1..n], registers R #blend normal and position # v= αv 1 +(1-α)v 2 = α(v 1 -v 2 )+ v 2 MOV R3, v[3] ;!! MOV R5, v[2] ;! ADD R8, v[1], -R3 ;! ADD R6, v[0], -R5 ;! MAD R8, v[15].x, R8, R3! MAD R6, v[15].x, R6, R5 ;! # transform normal to eye space DP3 R9.x, R8, c[12] ;! DP3 R9.y, R8, c[13] ;! DP3 R9.z, R8, c[14] ;! # normalize normal DP3 R9.w, R9, R9 ;! RSQ R9.w, R9.w ;! MUL R9, R9.w, R9 ;! # apply lighting and output color DP3 R0.x, R9, c[20] ;! DP3 R0.y, R9, c[22] ;! MOV R0.zw, c[21] ;! LIT R1, R0 ;! DP3 o[col0], c[21], R1 ; # transform position and output DP4 o[hpos].x, R6, c[4] ;! DP4 o[hpos].y, R6, c[5] ;! DP4 o[hpos].z, R6, c[6] ;! DP4 o[hpos].w, R6, c[7] ;! 7

Shading languages Cg (C for Graphics NVIDIA) GLSL (GL Shading Language OpenGL) HLSL (High Level Shading Language MS Direct3D) Introduction to GPU Programming CS314 Gordon Wetzstein, 02/2011 [courtesy NVIDIA] Cg History Introduction to GPU Programming CS314 Gordon Wetzstein, 02/2011 8

Cg How does it work? [courtesy NVIDIA] Cg Integration into OpenGL void initshader(void) { // get fragment shader profile _cgfragmentprofile = \ cgglgetlatestprofile(cg_gl_fragment); // init Cg context _cgcontext = cgcreatecontext(); void displayloop(void) { // setup transformation // enable shader and set parameters cgglenableprofile( _cgfragmentprofile ); cgglbindprogram( _cgprogram ); } // load shader from file _cgprogram = \ cgcreateprogramfromfile( _cgcontext, CG_SOURCE, MyShader.cg", _cgfragmentprofile, NULL, NULL); // upload shader on GPU cgglloadprogram( _cgprogram ); // get handles to shader parameters _cgtexture = \ cggetnamedparameter(_cgprogram, "texture"); _cgparameter = \ cggetnamedparameter(_cgprogram, parameter"); } // set Cg texture cgglsettextureparameter(_cgtexture, _textureid); cgglenabletextureparameter(_cgtexture); // set gamma cgglsetparameter1f(_cgparameter, _parameter); // draw geometry // disable Cg texture and profile cggldisabletextureparameter(_cgtexture); cggldisableprofile( _cgfragmentprofile ); // swap buffers 9

Cg Example Fragment Shader Fragment Shader: gamma mapping void main( float4 texcoord : TEXCOORD, uniform samplerrect texture, uniform float gamma, out float4 color : COLOR ) { // perform texture look up float3 texturecolor = f4texrect( texture, texcoord.xy ).rgb; } // set output color color.rgb = pow( texturecolor, gamma ); Cg Example Vertex Shader Vertex Shader: animated teapot void main( // input float4 position : POSITION, // position in object coordinates float3 normal : NORMAL, // normal // user parameters uniform float4x4 objectmatrix, // object coordinate system matrix uniform float4x4 objectmatrixit, // object coordinate system matrix inverse transpose uniform float4x4 modelviewmatrix, // modelview matrix uniform float4x4 modelviewmatrixit, // modelview matrix inverse transpose uniform float4x4 projectionmatrix, // projection matrix uniform float deformation, // deformation parameter uniform float3 lightposition, // light position uniform float3 lightambient, // light ambient parameter uniform float3 lightdiffuse, // light diffuse parameter uniform float3 lightspecular, // light specular parameter uniform float3 lightattenuation, // light attenuation parameter - constant, linear, quadratic uniform float3 materialemission, // material emission parameter uniform float3 materialambient, // material ambient parameter uniform float3 materialdiffuse, // material diffuse parameter uniform float3 materialspecular, // material specular parameter uniform float materialshininess, // material shininess parameter { // output out float4 outposition : POSITION, // position in clip space out float4 outcolor : COLOR ) // out color 10

Cg Example Vertex Shader // transform position from object space to clip space float4 positionobject = mul(objectmatrix, position); // transform normal into world space float4 normalobject = mul(objectmatrixit, float4(normal,1)); float4 normalworld = mul(modelviewmatrixit, normalobject); // world position of light float4 lightpositionworld = \ mul(modelviewmatrix, float4(lightposition,1)); // assume viewer position is in origin float4 viewerpositionworld = float4(0.0, 0.0, 0.0, 1.0); // apply deformation positionobject.xyz = positionobject.xyz + \ deformation * normalize(normalobject.xyz); float4 positionworld = mul(modelviewmatrix, positionobject); outposition = mul(projectionmatrix, positionworld); // two vectors float3 P = positionworld.xyz; float3 N = normalize(normalworld.xyz); // compute the ambient term float3 ambient = materialambient*lightambient; // compute the diffuse term float3 L = normalize(lightpositionworld.xyz - P); float diffusefactor = max(dot(n, L), 0); float3 diffuse = materialdiffuse * lightdiffuse * diffusefactor; // compute the specular term float3 V = normalize( viewerpositionworld.xyz - \ positionworld.xyz); float3 H = normalize(l + V); float specularfactor = \ pow(max(dot(n, H), 0), materialshininess); if (diffusefactor <= 0) specularfactor = 0; float3 specular = \ materialspecular * \ lightspecular * \ specularfactor; // attenuation factor float distancelightvertex = \ length(p-lightpositionworld.xyz); float attenuationfactor = \ 1 / ( lightattenuation.x + \ distancelightvertex*lightattenuation.y + \ distancelightvertex*distancelightvertex*\ lightattenuation.z ); // set output color outcolor.rgb = materialemission + \ ambient + \ attenuationfactor * \ ( diffuse + specular ); outcolor.w = 1; } Cg Example Phong Shading void main( float4 position : POSITION, // position in object coordinates float3 normal : NORMAL, // normal // user parameters vertex shader { } // output out float4 outtexcoord0 : TEXCOORD0, // world normal out float4 outtexcoord1 : TEXCOORD1, // world position out float4 outtexcoord2 : TEXCOORD2, // world light position out float4 outposition : POSITION) // position in clip space // transform position from object space to clip space // transform normal into world space // set world normal as out texture coordinate0 outtexcoord0 = normalworld; // set world position as out texture coordinate1 outtexcoord1 = positionworld; // world position of light outtexcoord2 = mul(modelviewmatrix, float4(lightposition,1)); 11

Cg Example Phong Shading fragment shader void main( float4 normal : TEXCOORD0, // normal float4 position : TEXCOORD1, // position float4 lightposition : TEXCOORD2, // light position out float4 outcolor : COLOR ) { // compute the ambient term // compute the diffuse term // compute the specular term // attenuation factor } // set output color outcolor.rgb = materialemission + ambient + attenuationfactor * (diffuse + specular); GPGPU general purpose computation on the GPU in the past: access via shading languages and rendering pipeline now: access via cuda interface in C environment 12

GPGPU Applications [courtesy NVIDIA] 13