A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex...

32
A Crash Course in HLSL Matt Christian

Transcript of A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex...

Page 1: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

A Crash Course in HLSL

Matt Christian

Page 2: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

Agenda• About Me

• What is HLSL?

• What is a Shader?– Vertex Shaders– Pixel Shaders– Geometry Shaders

• HLSL/Shader History

• How Does It Work?

• HLSL Code Segments

Page 3: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

Agenda (Cont’d)• Shader Examples

• Implementing a Simple Shader– Shader Overview– Engine Implementation

• Post Processing Shaders

• Conclusion

• Web Links

• Extras

Page 4: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

About Me• Student at University of Wisconsin – Stout

– Studying Applied Mathematics and Computer Science: Software Development

• Graduated with honors from Northcentral Technical College– Associates Degree in Computer Programming –

2006

• Avid gamer and general game development junkie

Page 5: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

What is HLSL?• Microsoft’s HLSL (High Level Shader

Language) is a simple language used to write shaders.

• Used with DirectX to provide high-end graphics

• Slightly comparable to a high-level C++

Page 6: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

What is a Shader?• A shader is a program (code file) that is

executed on the GPU (Graphics Processing Unit; ‘graphics card’) to manipulate the data before it is drawn to the screen.

• Can be written in numerous shader-specific languages:– HLSL (DirectX), GLSL (OpenGL), Cg (nVidia),

Assembly

• Math-Heavy (Algorithms)

Page 7: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

Vertex Shaders• Shader run on per-

vertex level

• Examples:– Color– Texture– Position

• Do not change the data type

Page 8: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

Pixel Shaders (Fragment Shader)• Run per-pixel

• Examples:– Lighting Values– Output certain color

• Cannot produce complex effects due to per-pixel implementation

Page 9: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

Geometry Shaders• Manipulate graphics primitives to create new

primitives (points, lines, triangles)• Examples:

– Shadow Volumes– Cube Map (Skybox)

• Newest Shader type, only works in DirectX 10– OpenGL Extension

Page 10: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

Shader Examples• Almost all recent video games use shaders

• All animated CGI movies use shaders (Pixar)

• Some techniques commonly used:– Parallax-Mapping (Bump-Mapping)– Phong Shading– Cell-shading– Bloom– High Dynamic Range Lighting (HDR)

Page 11: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

Parallax-Mapping

Page 12: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

Phong Shading

Page 13: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

Ray Tracing (Pre-Rendered)

Page 14: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

Cell-Shading (Windwaker)

Page 15: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

Bloom (Tron)

Page 16: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

High Dymanic Range Lighting (FarCry)

Page 17: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

Combination (Gears of War)

Page 18: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

Combination (Ratatouille)

Page 19: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

HLSL/Shader History• Four Generations of GPUs• Fixed-Function Pipeline

– Released with DirectX 7 (~2000)– Transformation and Lighting (T&L) hardware

• Pixar– RenderMan shading language

• Way to bypass built-in lighting

– Problem with render times

• Programmable Pipeline– Introduction of programmer defined code (shaders)

• First consumer-level programmable GPU

– Began with DirectX 8 (~2001)

Page 20: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

How Does It Work?• Graphics Pipeline

Page 21: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

HLSL Code Segments• Variables

– Float4x4 (4x4 Matrix), float4 (4 row vector-matrix), float• float4 ambientColor = {1.0f, 1.0f, 1.0f, 1.0f}; //Color of Ambient Light• float ambientbrightness = 1.0f; //Brightness of Ambient

Light

• Stream Structures//App to Vertex Shader

struct ambientA2V

{

float4 Pos: POSITION;

float2 TexCoord: TEXCOORD0;

};

Page 22: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

HLSL Code Segments (cont’d)• Semantics

– String describing the type of data being passed between shader stages• COLOR (Diffuse and specular color), NORMAL (Normal vector),

TEXCOORD (texture coordinates)

– Like variable type, gives shader ‘heads up’• ‘Use this as the normal vector!’

• Functions– Similar to regular C/C++ functions but can specify return semantic

float4 ambientPS(in ambientV2P IN) : COLOR{

//Get texturefloat4 Color = tex2D(TextureSampler, IN.TexCoord);

//Return texture * color * ambientbrightnessreturn Color * (ambientColor * ambientbrightness);

}

Page 23: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

HLSL Code Segments (cont’d)• Techniques

– Considered ‘classes’ called by the render engine– Typically contain and run vertex, pixel, and

geometry shaders using different ‘passes’ (Passes considered ‘class functions’)

– Different techniques can be used for different hardware configurations to support old/new hardware

• Intrinsic Functions– Built-in, commonly used (usually math-related)

functions; often similar to assembly– Mul(x, y) (multiplies x * y)– Abs(x) (absolute value of x)

Page 24: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

Implementing a Simple Shader• Example Setup:

– Shader: Ambient Light with Point Light• Technique PointLight

– 2 passes

– Engine: C++ and DirectX 9.0c

Page 25: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

Shader Overview• 2 lighting algorithms

– Ambient Light– Point Light

• Pass P0– Create Point Light

• Pass P1– Create Ambient Light

• Code

Page 26: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

Engine Implementation• Code

Page 27: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

Post Processing• Render to a target (texture)

• Manipulate Texture

• Display Texture as Render

• Examples– Motion Blur– Bloom– Image Perturbation (Heat waves)

Page 28: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

Conclusion• Shaders provide current/next – gen graphics by

fully utilizing the GPU using code algorithms– Vertex Shader– Pixel Shader– Geometry Shader

• Relatively new, still developing

• Questions?

Page 29: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

Web Links• HLSL MSDN

– http://msdn.microsoft.com/en-us/library/bb509561(VS.85).aspx

• DirectX SDK– http://msdn.microsoft.com/en-us/directx/aa937788.a

spx

• Cg Book– http://

developer.nvidia.com/object/cg_tutorial_home.html

• My Site– http://www.insidegamer.org/Projects.aspx– http://www.geekswithblogs.net/CodeBlog

Page 30: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

Extras• How does a shadow volume work?

– Create rays pointing from geometry to infinity• Everything within this larger geometric shape is encased

in shadow, everything outside is lit

– Determine faces aiming towards/away from lighting• ‘Fringe’ creates silhouette

– Cast rays from silhouette vertices away from light to infinity to generate shadow volume

– Optional: Place caps to optimize

Page 31: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

Shadow Volume (Doom 3)

Page 32: A Crash Course in HLSL Matt Christian. Agenda About Me What is HLSL? What is a Shader? –Vertex Shaders –Pixel Shaders –Geometry Shaders HLSL/Shader History.

Extras (Cont’d)• How does bump mapping work?

– Create a heightmap texture– Apply to a model prior to lighting (same as applying

any texture to the model)– Use trig to determine the surface normal per pixel– Any lighting algorithm will calculate the new

shadows based on surface normals