curriculum and concepts



curriculum and concepts


Shader Lab

Shader Lab

NYU, Tisch School of the Arts, Game Center, Fall 2018


Shader Lab is an introductory course in shader design and development for game engines.  The course covers rendering pipelines, light behavior, development tools, and use cases. Shader Lab differentiates itself in that it was intended for students that do not already possess as Computer Science or Computer Graphics background.

The need:

Shaders are a power tool in allowing game designers to craft the visual aesthetics for their games.  Within a game engine, shaders are the final point of interdiction an artists have before their work is drawn to the screen.

Unfortunately, shaders have traditionally been difficult to learn.  Code written for a graphics processor is fundamentally different than code written for a CPU, which has the luxury of persistent memory and common debugging tools.  Learning shaders also demands that one has a background in a wide range of areas spanning optical and material interaction behavior, graphical rendering, programming, meshes, linear algebra, and trigonometry.  Finally, many of the resources on the internet are intended for a very different audience than fledgling solo developers, with some presuming a higher degree of technical expertise while others start from the ground up and require a challenging amount of commitment before they present any tangible pay off.

This course was made and intended for undergraduate Bachelor of Fine Arts students at NYU’s Game Center.  As the program emphasizes design and critical literacy, this course was made with that context in mind, and aims to empower students to learn by doing.

Features of the course:

Operationalized Information:

Each lecture prominently features a real world use case or design space, and teaches complex and nested topics as they are necessary for the comprehension, design, and development of shaders for each goal.

Tangible and Useful Skills:

Each lecture is designed to cover the necessary sub skills and areas of knowledge to support the broader lecture goals.  Each of these areas are covered in such a way as to be independently useful skills within and external to shaders.

Considered Pace:

The majority of the mathematically and conceptually demanding material is front loaded.  The course aggressively introduces the fundamental technical skills up front before the natural ramp up from studio and studies courses, and eases into a less demanding pace to emphasizing experimentation and creativity.  The inverted intensity curve naturally compliments the dynamics of the program and encourage students to adapt course material to their work external to the class.

Embrace Math:

Shaders by their nature require a strong conceptual understanding of the underlying mathematical operations.  The course teaches the math that students need, as they need it to promote engagement, and tackles the concepts from multiple angles.  By having mathematical concepts presented as equations, practical dynamics, self-programmed calculators, and second order effects on visual effects, students gain a multifaceted understanding of the concepts, and have grounded examples that they can reference as they tackle more complex applications.

Syllabus topics:

Lecture 1: Particle Systems

Intro to shaders, Unity rendering components, algebraic color operations, light vs. pigments

Lecture 2: Coded 3D Shapes

Mesh primitives, Unity mesh systems, calculation of derived properties

Lecture 3: Algorithms and Noise

Perlin noise, generative terrain, generative textures, intro to linear algebra and trigonometry

Lecture 4: Making 3D Assets

Modeler insights, mapping and projections, exporting/importing assets, primitives recontextualized

Lecture 5: Opaque Materials

Physical light behavior, light and material interaction, lighting models, and basic shader construction, rasterization

Lecture 6: Vertex Manipulation

Vertex operations, object and world space, real vs rendered geometry, trigonometric manipulation

Lecture 7: Opacity Cutout

Classic rendering paths, masking, runtime manipulation of materials

Lecture 8: Transparent Materials

Forward rendering affordances, transparent material design, rendering costs, aesthetic considerations

Lecture 9: Screen Space Effects

Render targets, sampling, screen space, post-processing

Lecture 10: Surface Shader Decoding

Syntax, organization, Shaderlab and Cg and HLSL, translation of concepts to code

Lecture 11: Surface Shader Construction

Surface shader documentation, coded shader affordances, rendering paths in code, debugging tools and concepts

Lecture 12: Vert/Frag Shaders

OpenGL, ray marching, build target concepts

Lecture 13: Course Recap