Out now!
2D SHADER DEVELOPMENT
ILLUMINATION AND SHADOWS

Make your games unique in a world full of lookalikes by leveraging the power of shaders.

Illumination and Shadows is the second book in the series. It covers four illumination techniques, from static lights to fully dynamic lights. You'll learn about how to leverage blending modes to create the illusion of lights and shadows, how to create a simple and cheap way of adding some depth to your game with localized ambient light, then you'll learn how to add rim lights to assets with a full-screen effect and finally you'll learn how to create a normal map for a character to be used with any existing lighting model like Unity's own.

I want it!
Join us on Discord

Table of Contents

  • Introduction to the series
    • Motivation for the series
    • I use Unity, why should I bother learning shader programming at all?
    • Who are these books for?
    • I need help! What can I do?
    • Series Overview
      • 1. Foundations
      • 2. Illumination & Shadows
      • 3. Procedural Texture Manipulation
      • 4. Full-Screen Effects
    • Downloading the source code for the exercises
  • Introduction to 2D Illumination
    • Why illumination?
  • Static Illumination
    • Using Additive blend to light things up
      • Particles
      • Refreshing how to implement Additive
    • Using Multiply blend to create shadows
      • Refreshing how to implement Multiply
    • Limits of static illumination
    • Exercise 1
    • Conclusion
  • Kinda Dynamic Local Ambient Lights
    • Creating our own 2D Light Sources
      • Ambient
      • Directional
      • Point
      • Creating the Lights prefabs
    • Object coloring
      • A note on Culling
      • Full code for the shader
    • Ambient Lights
      • Using the TextureWithAmbientLight shader in our character
      • Controlling the gradient shape with _Threshold and _Smoothness
    • Exercise 2: Directional Lights
    • Point Lights
      • Using the TextureWithPointLight shader in our character
      • Adding Point light logic
    • Interpolating between lights
    • Conclusion
  • Screen-Space Automatic Rim Lights
    • Rendering Alpha Only
      • Scene Setup
      • Rendering to a RenderTexture
      • Rendering only the Alpha channel
    • Calculating Normals
      • Blurring the image
      • Generating the Normal map
    • Exercise 3: Lighting
    • Conclusion
  • Dynamic Lights using Normal Mapping
    • Asset Requirement
    • Math derivation
    • Generating the Normal Map in a Shader
    • Exercise 2: Normal Map Generation
    • Using Unity’s native lights
    • Conclusion
  • Where to go now?
    • Continue with the other books in the series
      • Procedural Texture Manipulation
      • Full-Screen Effects
    • The internet
    • Books
  • Acknowledgements
  • Credits
  • Acknowledgements
  • Exercise 1 Solution
    • Lights
    • Shadows
    • Conclusion
  • Exercise 2 Solution
    • Using the TextureWithDirectionalLight shader in our character
    • Adding an angle to the shader
    • 2D Vector Rotation
  • Exercise 3 Solution
    • The RimLights Shader
    • Final touches to ScreenSpaceRimLights.cs
  • Exercise 4 Solution
  • Appendix I: Vector Rotation
    • Rotating with the origin as the pivot
    • Rotating with an arbitrary pivot
    • Rotation matrix in Cg
  • Appending II: Normal Mapping
  • Appendix III: Coordinate Systems
    • Transforming a vertex between spaces
  • Appendix IV: Lambertian Diffuse Shading
  • Appendix V: Convolution
I want it!