Game Technology. Lecture Hardware Rendering. Prof. Dr.-Ing. Ralf Steinmetz KOM - Multimedia Communications Lab. Dr.-Ing.

Similar documents
Game Technology. Lecture Physically Based Rendering. Dipl-Inform. Robert Konrad Polona Caserman, M.Sc.

Shaders. Slide credit to Prof. Zwicker

Today. Texture mapping in OpenGL. Texture mapping. Basic shaders for texturing. Today. Computergrafik

Computergrafik. Matthias Zwicker Universität Bern Herbst 2016

Programming Graphics Hardware

Lets assume each object has a defined colour. Hence our illumination model is looks unrealistic.

Texture mapping. Computer Graphics CSE 167 Lecture 9

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

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

The Rasterization Pipeline

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

Dave Shreiner, ARM March 2009

Computer Graphics Coursework 1

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)!

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

Evolution of GPUs Chris Seitz

Lecture 2. Shaders, GLSL and GPGPU

Introduction to Visualization and Computer Graphics

Could you make the XNA functions yourself?

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

Spring 2009 Prof. Hyesoon Kim

Real-Time Rendering (Echtzeitgraphik) Michael Wimmer

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

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

Programming shaders & GPUs Christian Miller CS Fall 2011

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

OPENGL RENDERING PIPELINE

The Rasterization Pipeline

CS 130 Final. Fall 2015

CS4621/5621 Fall Computer Graphics Practicum Intro to OpenGL/GLSL

Textures. Texture coordinates. Introduce one more component to geometry

The Graphics Pipeline

CS179: GPU Programming

CS451Real-time Rendering Pipeline

CS427 Multicore Architecture and Parallel Computing

28 SAMPLING. ALIASING AND ANTI-ALIASING

Sign up for crits! Announcments

Programming Graphics Hardware

12.2 Programmable Graphics Hardware

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

CS 354R: Computer Game Technology

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

Graphics Hardware. Instructor Stephen J. Guy

Spring 2011 Prof. Hyesoon Kim

Optimizing and Profiling Unity Games for Mobile Platforms. Angelo Theodorou Senior Software Engineer, MPG Gamelab 2014, 25 th -27 th June

CSE 591: GPU Programming. Introduction. Entertainment Graphics: Virtual Realism for the Masses. Computer games need to have: Klaus Mueller

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

Programmable Graphics Hardware

Lecture 13: OpenGL Shading Language (GLSL)

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

Mattan Erez. The University of Texas at Austin

Pipeline Operations. CS 4620 Lecture 14

INF3320 Computer Graphics and Discrete Geometry

CS GPU and GPGPU Programming Lecture 12: GPU Texturing 1. Markus Hadwiger, KAUST

COMP371 COMPUTER GRAPHICS

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

CS 179: GPU Programming

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

CS 498 VR. Lecture 19-4/9/18. go.illinois.edu/vrlect19

Shaders CSCI 4239/5239 Advanced Computer Graphics Spring 2014

Technical Game Development II. Reference: Rost, OpenGL Shading Language, 2nd Ed., AW, 2006 The Orange Book Also take CS 4731 Computer Graphics

Programming with OpenGL Part 3: Shaders. Ed Angel Professor of Emeritus of Computer Science University of New Mexico

Texture Mapping. CS 537 Interactive Computer Graphics Prof. David E. Breen Department of Computer Science

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

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

CS GPU and GPGPU Programming Lecture 16+17: GPU Texturing 1+2. Markus Hadwiger, KAUST

Graphics Architectures and OpenCL. Michael Doggett Department of Computer Science Lund university

WebGL and GLSL Basics. CS559 Fall 2015 Lecture 10 October 6, 2015

CS GPU and GPGPU Programming Lecture 11: GPU Texturing 1. Markus Hadwiger, KAUST

SHADER PROGRAMMING. Based on Jian Huang s lecture on Shader Programming

Shaders (some slides taken from David M. course)

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

Zeyang Li Carnegie Mellon University

OpenGL shaders and programming models that provide object persistence

Working with Metal Overview

Graphics Programming. Computer Graphics, VT 2016 Lecture 2, Chapter 2. Fredrik Nysjö Centre for Image analysis Uppsala University

GPGPU. Peter Laurens 1st-year PhD Student, NSC

INF3320 Computer Graphics and Discrete Geometry

Lecture 17: Shading in OpenGL. CITS3003 Graphics & Animation

Grafica Computazionale: Lezione 30. Grafica Computazionale. Hiding complexity... ;) Introduction to OpenGL. lezione30 Introduction to OpenGL

OpenGl Pipeline. triangles, lines, points, images. Per-vertex ops. Primitive assembly. Texturing. Rasterization. Per-fragment ops.

GLSL 1: Basics. J.Tumblin-Modified SLIDES from:

graphics pipeline computer graphics graphics pipeline 2009 fabio pellacini 1

Chapter Answers. Appendix A. Chapter 1. This appendix provides answers to all of the book s chapter review questions.

Deferred Rendering Due: Wednesday November 15 at 10pm

Broken Age's Approach to Scalability. Oliver Franzke Lead Programmer, Double Fine Productions

A Trip Down The (2011) Rasterization Pipeline

graphics pipeline computer graphics graphics pipeline 2009 fabio pellacini 1

CPSC 436D Video Game Programming

CS 464 Review. Review of Computer Graphics for Final Exam

TEXTURE MAPPING. DVA338 Computer Graphics Thomas Larsson, Afshin Ameri

OUTLINE. Implementing Texturing What Can Go Wrong and How to Fix It Mipmapping Filtering Perspective Correction

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

Shaders CSCI 4229/5229 Computer Graphics Fall 2017

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

CMSC427 Advanced shading getting global illumination by local methods. Credit: slides Prof. Zwicker

Texture Mapping 1/34

CS559 Computer Graphics Fall 2015

Computergrafik. Matthias Zwicker. Herbst 2010

Transcription:

Game Technology Lecture 5 28.11.2015 Hardware Rendering Dr.-Ing. Florian Mehm Prof. Dr.-Ing. Ralf Steinmetz KOM - Multimedia Communications Lab PPT-for-all v.3.4_office2010 2012.09.10.pptx author(s) of these slides including research results from the KOM research network and TU Darmstadt; otherwise it is specified at the respective slide 27-Nov-15 Template all v.3.4

Organization Date Lecture Topic 24.10.2015 1 Input and Output 2 The Game Loop 3 Software Rendering 4 Advanced Software Rendering 28.11.2015 5 Basic Hardware Rendering 6 Bumps and Animations 7 Physically Based Rendering 8 Physics 1 19.12.2015 9 Physics 2 10 Procedural Content Generation 11 Compression and Streaming 12 Multiplayer 23.1.2016 13 Audio 14 Artificial Intelligence 15 Scripting KOM Multimedia Communications Lab 2

Organization Lecture recordings Available on the wiki: https://wiki.ktxsoftware.com Exercises from last block Exercise 1 corrected Will be uploaded to your git repository Groups which uploaded incorrectly were informed New exercises 3 exercises until next block KOM Multimedia Communications Lab 3

Organization Next block: 19.12.2015 Sorry about the date! Recordings will be available soon after the block No exercise scheduled for winter break (but will respond to feedback during the break if you want to work) KOM Multimedia Communications Lab 4

Ludum Dare@KOM Game Jams Game development contest Vague theme (e.g. 10 seconds ) Tight time constraints (e.g. 48 h) Starting from scratch (design, assets, code, ) No excuses just submit something The Head Wizards Course, 2014 Ludum Dare 30 @ TUD, 2014 Ludum Dare 34@TUD Sa., 12.12.2015, 9:00 Mo., 14.12.2015 (night) Registration (first-come-first-serve): gamejam@kom.tu-darmstadt.de A Maze Thing, 2013 10 Seconds to Apocalypse, 2013 10sion, 2013 10Up Experiments: Mountain Brew, 2014 The Most Important 10 Seconds Of Your Life, 2013 As We Are, 2014 Neon Multiverse, 2014 KOM Multimedia Communications Lab 5

KOM Multimedia Communications Lab 6

KOM Multimedia Communications Lab 7

KOM Multimedia Communications Lab 8

KOM Multimedia Communications Lab 9

KOM Multimedia Communications Lab 10

Pong & Computer Space Pong (1972), Computer Space (1971) KOM Multimedia Communications Lab 11

Pong Game Engine Pong (1972), Clock Generator KOM Multimedia Communications Lab 12

Apple 2 (1977) KOM Multimedia Communications Lab 13

Apple II One of the first mass-produced home computer with CG capabilities Quirky hardware and software interface But: Gave rise to first home graphical games Mystery House (1980) KOM Multimedia Communications Lab 14

Apple II Graphics KOM Multimedia Communications Lab 15

Apple II Graphics (Low-res mode) KOM Multimedia Communications Lab 16

Atari VCS (1977) KOM Multimedia Communications Lab 17

Atari VCS Later renamed to Atari 2600 MOS Technologies 6507 Variant of 6502: Addressable memory reduce from 64 kb to 8 kb ~1,19 MHz Developers had to be very creative E.g. build mirrored levels Use the timing of the monitor to switch colors in one frame Use undocumented features More info: Racing the Beam: The Atari Video Computer System Adventure (1979) KOM Multimedia Communications Lab 18

Nintendo Entertainment System/Famicom (1983) KOM Multimedia Communications Lab 19

Nintendo Entertainment System/Famicom CPU: Ricoh 2A03 (6502-base) @ 1,77 MHz (PAL) / 1,79 MHz (NTSC) Graphics: PPU Ricoh-Chip (NTSC: RP2C02, PAL: RP2C07) @ 5,37 MHz bzw. 5,32 MHz CPU: Not much difference to VCS But built for better handling of sprite, tiled rendering KOM Multimedia Communications Lab 20

NES quirks Sprite flickering Emulated in Mega Man 9 (2008) Happened when too many sprites were being drawn Limited memory Intended for tiled backgrounds Sprites only small elements Mega Man boss fights: Black background for memory reasons Mega Man 2 (1988) KOM Multimedia Communications Lab 21

NES Quirks https://www.youtube.com/watch?feature=player_embedded&v=jrh5q8gssvy KOM Multimedia Communications Lab 22

Commodore 64 (1982) KOM Multimedia Communications Lab 23

Amiga 500 (1987) KOM Multimedia Communications Lab 24

Origin (Complex), 1993 https://www.youtube.com/watch?v=meofahw3nvw KOM Multimedia Communications Lab 25

IBM PC (1981) KOM Multimedia Communications Lab 26

Voodoo Graphics (1996) KOM Multimedia Communications Lab 27

Features of Voodo Graphics chip Triangle raster engine Linearly interpolated Gouraud-shaded rendering Perspective-corrected (divide-per-pixel) texture-mapped rendering with iterated RGB modulation/addition Detail and Projected Texture mapping Linearly interpolated 16-bit Z-buffer rendering Perspective-corrected 16-bit floating point W-buffer rendering (patent pending) Texture filtering: point-sampling, bilinear, and trilinear filtering with mipmapping KOM Multimedia Communications Lab 28

Modern intel CPUs KOM Multimedia Communications Lab 29

Windows Vista (2007) KOM Multimedia Communications Lab 30

PS4 KOM Multimedia Communications Lab 31

CPU vs GPU CPU Run sequential code as fast as possible GPU (Graphical Processing Unit) Massively parallel code execution Plus triangle rasterizer Plus texture sampler GPGPU (General purpose computations on GPU) Programmable computing units, not directly tied to graphics anymore Carry out a computation massively parallelized KOM Multimedia Communications Lab 32

GPGPU http://www.gdcvault.com/play/102 2421/Ubisoft-Cloth-Simulation- Performance-Postmortem Ideally suited for parallel tasks Adding many large vectors What if there are dependencies? Throw away some results Organize data better... KOM Multimedia Communications Lab 33

GPGPU https://www.coursera.org/course/hetero MOOC course Heterogeneous Parallel Programming University of Illinois KOM Multimedia Communications Lab 34

Triangles KOM Multimedia Communications Lab 35

Aliasing KOM Multimedia Communications Lab 36

Aliasing Sampling frequency is too low Example: Original wave on the left Sample points in the middle Inaccurate sampled wave on the right KOM Multimedia Communications Lab 37

Edge Antialiasing Specifically work on edges Blur with the background Would require back-to-front rendering KOM Multimedia Communications Lab 38

Supersample Antialiasing KOM Multimedia Communications Lab 39

Multisample Antialiasing https://www.youtube.com/watch?v=nef6ywyu0-i KOM Multimedia Communications Lab 40

Postprocess Antialiasing KOM Multimedia Communications Lab 41

Temporal Anti-Aliasing Anti-Aliasing done over several frames, to remove effects seen during motion KOM Multimedia Communications Lab 42

Textures Basically images Preferably 2 n * 2 n Other sizes not necessarily supported Expand image and fix up texture coordinates KOM Multimedia Communications Lab 43

Texture Sampling Point Filtering Bilinear Filtering Interpolate four neighbouring pixels KOM Multimedia Communications Lab 44

Bilinear filtering KOM Multimedia Communications Lab 45

Mip Mapping Example: Texture mapped to one pixel Ideally calculate mean color value of the complete texture Trick: Precompute images Width / 2, Height / 2 Width / 4, Height / 4 Sample from best fitting image (multum in parvo, much in little) KOM Multimedia Communications Lab 46

No mip mapping KOM Multimedia Communications Lab 47

MIP Mapping KOM Multimedia Communications Lab 48

Mip Mapping Seams between mip levels are often visible Trilinear filtering Perspective stretches images differently in x and y No optimal mip level KOM Multimedia Communications Lab 49

Anisotropic Filtering KOM Multimedia Communications Lab 50

Anisotropic filtering KOM Multimedia Communications Lab 51

Depth Buffer Implemented in hardware Used automatically by the rasterizer 3D APIs offer simple configuration Off, allow only smaller values, allow only larger values KOM Multimedia Communications Lab 52

Alpha-Blending Critical for performance Reads in previous pixels, stresses memory interface Makes parallel execution more difficult Fixed modes 1 * new pixel + 0 * old pixel source alpha * new pixel + (1 - source alpha) * old pixel (destination alpha is rarely used) KOM Multimedia Communications Lab 53

Programmable Blending Render to texture Draw rendered texture Draw blended geometry Use rendered texture as input Much slower KOM Multimedia Communications Lab 54

Most used blending modes Standard blending source alpha * new pixel + (1 - source alpha) * old pixel Additive blending source alpha * new pixel + old pixel KOM Multimedia Communications Lab 55

Texture Sampling and Transparency Bilinear filtering samples rgb + alpha At alpha borders samples rgb values with alpha 0 KOM Multimedia Communications Lab 56

Premultiplied Alpha Multiply rgb with alpha Fixes texture sampling (invisible pixels are multiplied with 0) Fixes sunglasses Premultiply alpha, then add something Combines standard and additive blending Blending mode: new pixel + (1 - source alpha) * old pixel KOM Multimedia Communications Lab 57

Vertex Shader Calculates vertex transformations Prepares additional data for later shader stages What we did in Exercise 3 KOM Multimedia Communications Lab 58

Fragment Shader Also referred to as Pixel Shader Uses interpolated data from vertex shader Calculates colors What we did in Exercise 4 KOM Multimedia Communications Lab 59

Vertex Buffer Array of vertices Can hold additional data per vertex E.g normal, animation data,... Has to assign additional data to names or registers for vertex shader Primary interface from CPU to GPU KOM Multimedia Communications Lab 60

Index Buffer Array of indices That s it One vertex can be re-used in several triangles KOM Multimedia Communications Lab 61

Draw Calls Set Vertex Shader Set Fragment Shader Set IndexBuffer Set Vertex Buffer DrawIndexedTriangles() DrawIndexedTriangles() KOM Multimedia Communications Lab 62

Implicit Work Create command buffers Verify data (compile shaders) KOM Multimedia Communications Lab 63

Compute Shader GPGPU No Rasterization Additional options for data synchronization Not yet supported everywhere Many competing languages Even OpenCL and GLSL compute shaders KOM Multimedia Communications Lab 64

Triangles on Compute Xeon Phi Ex project Larrabee https://code.google.com/p/cudaraster/ From nvidia KOM Multimedia Communications Lab 65

More Shaders Geometry Shader Works on complete triangles Tesselation Shader Can create new triangles Not yet supported on all hardware Notably no support on ios KOM Multimedia Communications Lab 66

Phong Lighting color = ambient + diffuse + specular Note: Light from different sources can always be added just like that KOM Multimedia Communications Lab 67

Ambient = Constant KOM Multimedia Communications Lab 68

Diffuse KOM Multimedia Communications Lab 69

Diffuse diffuse = LN (see previous lecture) KOM Multimedia Communications Lab 70

Specular KOM Multimedia Communications Lab 71

Specular I specular = I in k specular cos n θ I specular = I in k specular R V n R: mirrored vector to the light source (reflectance vector) V: vector to the camera n: roughness start at 32 and tune Empirical model (aka basically nonsense) Ugly for larger angles (cos 0) (H: Half-vector between V and L) (N: Normal) KOM Multimedia Communications Lab 72

Blinn Phong H = V + L V + L I specular = I in k specular cos n θ I specular = I in k specular (V + L) N (V + L) N A little faster A little nicer KOM Multimedia Communications Lab 73

Better ambient light Real ambient light is hard Light bouncing and bouncing and bouncing Ambient light tends to look very diffuse No hard borders Precompute everything Put it in small textures Bilinear filtering blurry stuff works wonderfully KOM Multimedia Communications Lab 74

Light Baking Quake (1996) KOM Multimedia Communications Lab 75

Better specular lighting Render six orthogonal perspectives into a cube map Camera center = center of object to be rendered Sample vector into cubemap for every pixel Obviously very expensive Can not be precomputed KOM Multimedia Communications Lab 76

Ambient, Diffuse Thinking of Ambient is only an approximation Phong lighting is an approximation of an approximation Light bounces around First bounce direct lighting (use diffuse and specular) Second bounce hard shadows More bounces ambient light KOM Multimedia Communications Lab 77

Shadow Mapping Set camera to light source Render depth each pixel value = distance from light During regular rendering Transform vertices two times Using camera position Using light position z = distance from light Read depth texture Compare depth calculated using light pos and depth from texture If greater in shadow KOM Multimedia Communications Lab 78

Shadow Mapping KOM Multimedia Communications Lab 79

Shadow Mapping Problems KOM Multimedia Communications Lab 80

Cascaded Shadow Maps KOM Multimedia Communications Lab 81

Summary What work can the GPU assist us with? Highly parallel calculations: Graphics (each pixel, each vertex,...) General purpose tasks that can be parallelized Graphics-related tasks Rasterization Texture lookups/filtering Techniques Antialiasing Mip-mapping... Now: How to program this? KOM Multimedia Communications Lab 82

GLSL OpenGL Shading Language Added to OpenGL in 2004 with OpenGL 2.0 Version 1.10 Similar to C Semiautomatic parallelization KOM Multimedia Communications Lab 83

GLSL Example uniform sampler2d tex; varying vec2 texcoord; varying vec4 color; void kore() { vec4 texcolor = texture2d(tex, texcoord) * color; texcolor.rgb *= color.a; gl_fragcolor = texcolor; } KOM Multimedia Communications Lab 84

Kore/Kha specialties Kore and especially Kha are intended for cross-platform usage Challenge 1: GSLS versions, capabilities Widest coverage: OpenGL ES Shading Language WebGL: Based on OpenGL ES Supported across mobile devices Supported on desktop devices Challenge 2: Different shader languages E.g. on Windows: DirectX, HLSL Apple devices: Metal Cross-compiler krafix KOM Multimedia Communications Lab 85

Vertex Shader Transforms vertices Writes transformed vertex to special var gl_position Can write additional data KOM Multimedia Communications Lab 86

Fragment Shader Writes final color to special var gl_fragcolor Can not write additional data Mostly (multi target rendering, gl_fragdepth, - not on all hardware) KOM Multimedia Communications Lab 87

Parallelism Vertex shader defines one function.....which is applied to lots of vertices in parallel Fragment shader defines one function......which is applied to lots of pixels in parallel Programming model allows hardware to parallelize automatically To multiple compute cores, SIMD units or weird combinations of both KOM Multimedia Communications Lab 88

Uniforms Constants Do not change while shader executes Can be changed between draw calls uniform mat4 projectionmatrix; uniform sampler2d tex; KOM Multimedia Communications Lab 89

Attributes Vertex shader input Defined in Vertex Buffer attribute vec3 vertexposition; attribute vec2 texposition; attribute vec4 vertexcolor; KOM Multimedia Communications Lab 90

Varyings Transfer data between shader stages Vertex shader Interpolation Fragment shader Output in vertex shader = input in fragment shader varying vec2 texcoord; KOM Multimedia Communications Lab 91

Vector types vec3 position; vec4 color; Support basic arithmetic Support swizzling color.bgr position.xy KOM Multimedia Communications Lab 92

Matrix types mat4 projection; Supports arithmetic with vectors KOM Multimedia Communications Lab 93

Samplers To read textures uniform sampler2d tex; vec4 texcolor = texture2d(tex, texcoord); KOM Multimedia Communications Lab 94

Special vars gl_position gl_fragcolor https://www.opengl.org/wiki/built-in_variable_(glsl) There are many more KOM Multimedia Communications Lab 95

Precision modifiers precision mediump float; Precision can be reduced Often makes sense in the fragment shader And is often necessary (OpenGL ES) KOM Multimedia Communications Lab 96

GLSL versions Up to version 4.5 Different versions for OpenGL ES Kore uses GLSL ES GLSL version used by OpenGL ES 2.0 and WebGL GLSL 1.1 plus some 1.2 KOM Multimedia Communications Lab 97

GLSL in Kore main is called kore Only difference to real GLSL To make things easier in Windows use node Kore/make -g opengl2 Optionally debug Direct3D later (Deletes your varyings in the fragment shader when they are not used, which breaks shader linkage) Shader compiled automatically in Visual Studio Not in XCode or Code::Blocks Optionally directly work with the files in Deployment Beware: A call to koremake overwrites them KOM Multimedia Communications Lab 98

Kore Graphics #include <Kore/Graphics/Graphics.h> Straight forward API Set uniforms ala ConstantLocation loc = program->getconstantlocation( bla ); Graphics::setFloat(loc, 2.0f); Coordinate system is (-1 to 1, -1 to 1, -1 to 1) like in OpenGL KOM Multimedia Communications Lab 99

Conclusion OpenGL Shading Language Types of shaders Input and Output Operations More info: Orange Book (OpenGL Shading Language) KOM Multimedia Communications Lab 100

See it in action Very nicely done GTA V Graphics Study http://www.adriancourreges.com/blog/2015/11/02/gta-v-graphicsstudy/ KOM Multimedia Communications Lab 101