VirtuaLightJS: WebGL PBR Engine


A Physically Based Rendering engine created from scratch in WebGL2, compatible with at least Windows and Linux. (Smartphones not supported, can't test on macOS) Demo:


  • Multiple meshes loading from .ply or .off files. Plys preferred as they provide UV textures.
  • Individual control over meshes position, size and orientation through GUI.
  • Multiple point lights with control over color, intensity and position through GUI.
  • Fully Physically Based Shading of objects including albedo, metallic, ambient occlusion and roughness map.
  • Normal mapping with TBM matrix computed on the fly by the graphic card.
  • Shadow Map for 1 light generated by simulating a directionnal light (WIP) with Percentage Closer Filtering
  • Skybox transformed from equirectangular to cubemap at runtime
  • Environnement based diffuse lighting with irradiance map baked on the fly from environnement map
  • Specular IBL using split sum approximation by Epic Games (Unreal Engine 4) with precomputation at startup.

Textured Models

  • Material ball in 3D-Coat by 3d-coat is licensed under CC Attribution (Sketchfab)
  • Mask Paint Ball by Odissey Super is licensed under CC Attribution (Sketchfab)
  • Withered Blade by French Baguette is licensed under CC Attribution (Sketchfab)



IBL Environment

  • Arches Pine Tree :

Great Teachers

  • Tamy Boubekeur :
  • Joey De Vries :!About -
  • Etay Meiri :
  • Opengl-tutorials :

Special Thanks

The original name was coined by Quentin Beauvillard, on Facebook Messenger by a warm night of summer 2017

Guthmann François
Computer Graphics Student - Student