15
Cg – C for Graphics Eric Vidal CS 280

Cg – C for Graphics Eric Vidal CS 280. History General graphics processing languages – Renderman shading language (1988) Assembly languages for graphics

Embed Size (px)

Citation preview

Page 1: Cg – C for Graphics Eric Vidal CS 280. History General graphics processing languages – Renderman shading language (1988) Assembly languages for graphics

Cg – C for Graphics

Eric Vidal

CS 280

Page 2: Cg – C for Graphics Eric Vidal CS 280. History General graphics processing languages – Renderman shading language (1988) Assembly languages for graphics

History

General graphics processing languages– Renderman shading language (1988)

Assembly languages for graphics card processing– DirectX 8/9 vertex shaders and pixel shaders (2000, 2002)– OpenGL ARB_vertex_program/ARB_fragment_program

(2002)

High-level languages for graphics card processing– DirectX High Level Shading Language (HLSL) (2002)– OpenGL Shading Language (glslang) (2003)– Cg – C for Graphics (2002)

Page 3: Cg – C for Graphics Eric Vidal CS 280. History General graphics processing languages – Renderman shading language (1988) Assembly languages for graphics

History

Cg – C for Graphics– Developed in 2002 by NVIDIA Corporation in close

collaboration with Microsoft– Supports OpenGL and DirectX (does not replace them)– Supported in Windows, Mac OS X and Linux– Proprietary (but language specification is open)– Cg compiler technology is open-source

Page 4: Cg – C for Graphics Eric Vidal CS 280. History General graphics processing languages – Renderman shading language (1988) Assembly languages for graphics

Rationale

Do graphics-related processing (“shading”) in graphics card

– Offloads work from the main processor– Higher performance

Cg is a high-level language– Easier to understand than graphics card “assembly

language” (DirectX vertex/pixel shaders, OpenGL vertex/fragment programs)

– Code portability across graphics cards

Page 5: Cg – C for Graphics Eric Vidal CS 280. History General graphics processing languages – Renderman shading language (1988) Assembly languages for graphics

Features

Two types of Cg programs:– Vertex programs– Fragment programs

On-the-fly compilation supports several target graphics assembly language formats:

– DirectX 8 vertex/pixel shaders (vs_1_1, ps_1_3)– DirectX 9 vertex/pixel shaders (vs_2_0, ps_2_x)– OpenGL vertex/fragment program extensions (arbvp1, arbfp1)– NVIDIA proprietary OpenGL extensions (vp20, fp20, vp30,

fp30)

Page 6: Cg – C for Graphics Eric Vidal CS 280. History General graphics processing languages – Renderman shading language (1988) Assembly languages for graphics

Features

First class support for vector data types– float4 – vector of four floats– float4x4 – square matrix with 16 elements

Same operators as C– Works with vectors as well as with scalars

float scalar = 4.0;float4 vector = float4(1.0, 2.0, -1.0, 3.0), result;

/* this properly scales “vector” by “scalar” */result = scalar * vector;

Page 7: Cg – C for Graphics Eric Vidal CS 280. History General graphics processing languages – Renderman shading language (1988) Assembly languages for graphics

Features

uniform parameters input semantics (for non-uniform parameters) out, inout parameters

void simpleTransform(float4 objectPosition : POSITION, float4 color : COLOR, float4 decalCoord : TEXCOORD0, float4 lightMapCoord : TEXCOORD1, out float4 clipPosition : POSITION, out float4 oColor : COLOR, out float4 oDecalCoord : TEXCOORD0, out float4 oLightMapCoord : TEXCOORD1, uniform float brightness, uniform float4x4 modelViewProjection)

Page 8: Cg – C for Graphics Eric Vidal CS 280. History General graphics processing languages – Renderman shading language (1988) Assembly languages for graphics

Features

Structures and arrays (including multidimensional arrays)

All of C’s arithmetic operators boolean type Boolean/relational operators (||, &&, !, etc.) Increment/decrement operators (++, --) Conditional expressions (?, :) Assignment expressions (=, +=, etc.)

Page 9: Cg – C for Graphics Eric Vidal CS 280. History General graphics processing languages – Renderman shading language (1988) Assembly languages for graphics

Features

User-defined functions– But no recursive functions!

Control flow constructs– do, while, for, if, break, continue– No switch and goto!

Data types– float, half, double– int– fixed

Page 10: Cg – C for Graphics Eric Vidal CS 280. History General graphics processing languages – Renderman shading language (1988) Assembly languages for graphics

Features

#include, #define, #ifdef C and C++-style comments Swizzling and write-masking

float4 vec1 = float4(1.0, 2.0, 3.0, 4.0);float2 vec2 = vec1.yx; // vec2 = (2.0, 1.0);float scalar = vec1.w; // scalar = 4.0;float3 vec3 = scalar.xxx; // vec3 = (4.0, 4.0, 4.0);vec1.xw = vec3; // vec1 = (4.0, 2.0, 3.0, 4.0);

discard keyword (similar to return, but no return value)

Page 11: Cg – C for Graphics Eric Vidal CS 280. History General graphics processing languages – Renderman shading language (1988) Assembly languages for graphics

Features

Built-in library functions for graphics math– abs()– log2()– mul()– dot()– normalize()– lerp()– specular()– reflect()– ... and more! (No need to #include)

Page 12: Cg – C for Graphics Eric Vidal CS 280. History General graphics processing languages – Renderman shading language (1988) Assembly languages for graphics

(Non-)Features

Pointers Bitwise operations Unions Function variables String processing File I/O Memory allocation/deallocation C++ classes, templates, overloading, exceptions

Page 13: Cg – C for Graphics Eric Vidal CS 280. History General graphics processing languages – Renderman shading language (1988) Assembly languages for graphics

Sample Programs

Page 14: Cg – C for Graphics Eric Vidal CS 280. History General graphics processing languages – Renderman shading language (1988) Assembly languages for graphics

Applications Using Cg

Unreal engine (Epic Games, Inc.) Aurora engine (Bioware Inc.) Storm engine (Blizzard Entertainment) Other game companies (Electronic Arts, Ensemble

Studios, Ion Storm, LithTech, Maxis, Microsoft Games) Third party content creation tools

– Alias Wavefront Maya 4.5– Discreet 3ds max 5– SOFTIMAGE|XSI v.3.0

Page 15: Cg – C for Graphics Eric Vidal CS 280. History General graphics processing languages – Renderman shading language (1988) Assembly languages for graphics

Where to Get Cg

Main Cg Website:– http://developer.nvidia.com/page/cg_main.html

Cg Language Specification:– http://developer.nvidia.com/object/cg_specification.html

Cg Compiler and Toolkit:– http://developer.nvidia.com/object/cg_toolkit.html