Browse Source

Update PBR Materials example for v0.16.0;

bjorn 2 years ago
parent
commit
9131653c44
71 changed files with 63 additions and 52 deletions
  1. 0 0
      examples/Lighting/PBR_Materials/DamagedHelmet.glb
  2. 0 3
      examples/Lighting/PBR_Materials/conf.lua
  3. BIN
      examples/Lighting/PBR_Materials/env/m0_nx.png
  4. BIN
      examples/Lighting/PBR_Materials/env/m0_ny.png
  5. BIN
      examples/Lighting/PBR_Materials/env/m0_nz.png
  6. BIN
      examples/Lighting/PBR_Materials/env/m0_px.png
  7. BIN
      examples/Lighting/PBR_Materials/env/m0_py.png
  8. BIN
      examples/Lighting/PBR_Materials/env/m0_pz.png
  9. BIN
      examples/Lighting/PBR_Materials/env/m1_nx.png
  10. BIN
      examples/Lighting/PBR_Materials/env/m1_ny.png
  11. BIN
      examples/Lighting/PBR_Materials/env/m1_nz.png
  12. BIN
      examples/Lighting/PBR_Materials/env/m1_px.png
  13. BIN
      examples/Lighting/PBR_Materials/env/m1_py.png
  14. BIN
      examples/Lighting/PBR_Materials/env/m1_pz.png
  15. BIN
      examples/Lighting/PBR_Materials/env/m2_nx.png
  16. BIN
      examples/Lighting/PBR_Materials/env/m2_ny.png
  17. BIN
      examples/Lighting/PBR_Materials/env/m2_nz.png
  18. BIN
      examples/Lighting/PBR_Materials/env/m2_px.png
  19. BIN
      examples/Lighting/PBR_Materials/env/m2_py.png
  20. BIN
      examples/Lighting/PBR_Materials/env/m2_pz.png
  21. BIN
      examples/Lighting/PBR_Materials/env/m3_nx.png
  22. BIN
      examples/Lighting/PBR_Materials/env/m3_ny.png
  23. BIN
      examples/Lighting/PBR_Materials/env/m3_nz.png
  24. BIN
      examples/Lighting/PBR_Materials/env/m3_px.png
  25. BIN
      examples/Lighting/PBR_Materials/env/m3_py.png
  26. BIN
      examples/Lighting/PBR_Materials/env/m3_pz.png
  27. BIN
      examples/Lighting/PBR_Materials/env/m4_nx.png
  28. BIN
      examples/Lighting/PBR_Materials/env/m4_ny.png
  29. BIN
      examples/Lighting/PBR_Materials/env/m4_nz.png
  30. BIN
      examples/Lighting/PBR_Materials/env/m4_px.png
  31. BIN
      examples/Lighting/PBR_Materials/env/m4_py.png
  32. BIN
      examples/Lighting/PBR_Materials/env/m4_pz.png
  33. BIN
      examples/Lighting/PBR_Materials/env/m5_nx.png
  34. BIN
      examples/Lighting/PBR_Materials/env/m5_ny.png
  35. BIN
      examples/Lighting/PBR_Materials/env/m5_nz.png
  36. BIN
      examples/Lighting/PBR_Materials/env/m5_px.png
  37. BIN
      examples/Lighting/PBR_Materials/env/m5_py.png
  38. BIN
      examples/Lighting/PBR_Materials/env/m5_pz.png
  39. BIN
      examples/Lighting/PBR_Materials/env/m6_nx.png
  40. BIN
      examples/Lighting/PBR_Materials/env/m6_ny.png
  41. BIN
      examples/Lighting/PBR_Materials/env/m6_nz.png
  42. BIN
      examples/Lighting/PBR_Materials/env/m6_px.png
  43. BIN
      examples/Lighting/PBR_Materials/env/m6_py.png
  44. BIN
      examples/Lighting/PBR_Materials/env/m6_pz.png
  45. BIN
      examples/Lighting/PBR_Materials/env/m7_nx.png
  46. BIN
      examples/Lighting/PBR_Materials/env/m7_ny.png
  47. BIN
      examples/Lighting/PBR_Materials/env/m7_nz.png
  48. BIN
      examples/Lighting/PBR_Materials/env/m7_px.png
  49. BIN
      examples/Lighting/PBR_Materials/env/m7_py.png
  50. BIN
      examples/Lighting/PBR_Materials/env/m7_pz.png
  51. BIN
      examples/Lighting/PBR_Materials/env/m8_nx.png
  52. BIN
      examples/Lighting/PBR_Materials/env/m8_ny.png
  53. BIN
      examples/Lighting/PBR_Materials/env/m8_nz.png
  54. BIN
      examples/Lighting/PBR_Materials/env/m8_px.png
  55. BIN
      examples/Lighting/PBR_Materials/env/m8_py.png
  56. BIN
      examples/Lighting/PBR_Materials/env/m8_pz.png
  57. BIN
      examples/Lighting/PBR_Materials/env/nx.png
  58. BIN
      examples/Lighting/PBR_Materials/env/ny.png
  59. BIN
      examples/Lighting/PBR_Materials/env/nz.png
  60. BIN
      examples/Lighting/PBR_Materials/env/px.png
  61. BIN
      examples/Lighting/PBR_Materials/env/py.png
  62. BIN
      examples/Lighting/PBR_Materials/env/pz.png
  63. 0 11
      examples/Lighting/PBR_Materials/env/sphericalHarmonics.lua
  64. BIN
      examples/Lighting/PBR_Materials/ibl.ktx
  65. 63 38
      examples/Lighting/PBR_Materials/main.lua
  66. BIN
      examples/Lighting/PBR_Materials/skybox/nx.png
  67. BIN
      examples/Lighting/PBR_Materials/skybox/ny.png
  68. BIN
      examples/Lighting/PBR_Materials/skybox/nz.png
  69. BIN
      examples/Lighting/PBR_Materials/skybox/px.png
  70. BIN
      examples/Lighting/PBR_Materials/skybox/py.png
  71. BIN
      examples/Lighting/PBR_Materials/skybox/pz.png

+ 0 - 0
examples/Lighting/PBR_Materials/helmet/DamagedHelmet.glb → examples/Lighting/PBR_Materials/DamagedHelmet.glb


+ 0 - 3
examples/Lighting/PBR_Materials/conf.lua

@@ -1,3 +0,0 @@
-function lovr.conf(t)
-  t.window.msaa = 4
-end

BIN
examples/Lighting/PBR_Materials/env/m0_nx.png


BIN
examples/Lighting/PBR_Materials/env/m0_ny.png


BIN
examples/Lighting/PBR_Materials/env/m0_nz.png


BIN
examples/Lighting/PBR_Materials/env/m0_px.png


BIN
examples/Lighting/PBR_Materials/env/m0_py.png


BIN
examples/Lighting/PBR_Materials/env/m0_pz.png


BIN
examples/Lighting/PBR_Materials/env/m1_nx.png


BIN
examples/Lighting/PBR_Materials/env/m1_ny.png


BIN
examples/Lighting/PBR_Materials/env/m1_nz.png


BIN
examples/Lighting/PBR_Materials/env/m1_px.png


BIN
examples/Lighting/PBR_Materials/env/m1_py.png


BIN
examples/Lighting/PBR_Materials/env/m1_pz.png


BIN
examples/Lighting/PBR_Materials/env/m2_nx.png


BIN
examples/Lighting/PBR_Materials/env/m2_ny.png


BIN
examples/Lighting/PBR_Materials/env/m2_nz.png


BIN
examples/Lighting/PBR_Materials/env/m2_px.png


BIN
examples/Lighting/PBR_Materials/env/m2_py.png


BIN
examples/Lighting/PBR_Materials/env/m2_pz.png


BIN
examples/Lighting/PBR_Materials/env/m3_nx.png


BIN
examples/Lighting/PBR_Materials/env/m3_ny.png


BIN
examples/Lighting/PBR_Materials/env/m3_nz.png


BIN
examples/Lighting/PBR_Materials/env/m3_px.png


BIN
examples/Lighting/PBR_Materials/env/m3_py.png


BIN
examples/Lighting/PBR_Materials/env/m3_pz.png


BIN
examples/Lighting/PBR_Materials/env/m4_nx.png


BIN
examples/Lighting/PBR_Materials/env/m4_ny.png


BIN
examples/Lighting/PBR_Materials/env/m4_nz.png


BIN
examples/Lighting/PBR_Materials/env/m4_px.png


BIN
examples/Lighting/PBR_Materials/env/m4_py.png


BIN
examples/Lighting/PBR_Materials/env/m4_pz.png


BIN
examples/Lighting/PBR_Materials/env/m5_nx.png


BIN
examples/Lighting/PBR_Materials/env/m5_ny.png


BIN
examples/Lighting/PBR_Materials/env/m5_nz.png


BIN
examples/Lighting/PBR_Materials/env/m5_px.png


BIN
examples/Lighting/PBR_Materials/env/m5_py.png


BIN
examples/Lighting/PBR_Materials/env/m5_pz.png


BIN
examples/Lighting/PBR_Materials/env/m6_nx.png


BIN
examples/Lighting/PBR_Materials/env/m6_ny.png


BIN
examples/Lighting/PBR_Materials/env/m6_nz.png


BIN
examples/Lighting/PBR_Materials/env/m6_px.png


BIN
examples/Lighting/PBR_Materials/env/m6_py.png


BIN
examples/Lighting/PBR_Materials/env/m6_pz.png


BIN
examples/Lighting/PBR_Materials/env/m7_nx.png


BIN
examples/Lighting/PBR_Materials/env/m7_ny.png


BIN
examples/Lighting/PBR_Materials/env/m7_nz.png


BIN
examples/Lighting/PBR_Materials/env/m7_px.png


BIN
examples/Lighting/PBR_Materials/env/m7_py.png


BIN
examples/Lighting/PBR_Materials/env/m7_pz.png


BIN
examples/Lighting/PBR_Materials/env/m8_nx.png


BIN
examples/Lighting/PBR_Materials/env/m8_ny.png


BIN
examples/Lighting/PBR_Materials/env/m8_nz.png


BIN
examples/Lighting/PBR_Materials/env/m8_px.png


BIN
examples/Lighting/PBR_Materials/env/m8_py.png


BIN
examples/Lighting/PBR_Materials/env/m8_pz.png


BIN
examples/Lighting/PBR_Materials/env/nx.png


BIN
examples/Lighting/PBR_Materials/env/ny.png


BIN
examples/Lighting/PBR_Materials/env/nz.png


BIN
examples/Lighting/PBR_Materials/env/px.png


BIN
examples/Lighting/PBR_Materials/env/py.png


BIN
examples/Lighting/PBR_Materials/env/pz.png


+ 0 - 11
examples/Lighting/PBR_Materials/env/sphericalHarmonics.lua

@@ -1,11 +0,0 @@
-return {
-  { 0.375931705762083,  0.358656319030575,  0.308453761543167},
-  { 0.354636762547562,  0.351933427534857,  0.346643193593808},
-  { 0.213680467209818,  0.208764154253828,  0.185992646424045},
-  { 0.094452764555327,  0.087423796528460,  0.078299527458197},
-  { 0.129722100892800,  0.126512402478568,  0.121503396241859},
-  { 0.236712791137010,  0.233931621210715,  0.222236168254197},
-  {-0.020735133497873, -0.020241604203896, -0.018707677741929},
-  {-0.073279787762454, -0.073091939150411, -0.068554941014884},
-  {-0.102740171078351, -0.099605437423063, -0.094746265045717}
-}

BIN
examples/Lighting/PBR_Materials/ibl.ktx


+ 63 - 38
examples/Lighting/PBR_Materials/main.lua

@@ -1,48 +1,73 @@
+-- Skybox is "industrial_pipe_and_valve_01" from PolyHaven (CC0)
+-- Assets were generated from the skybox using cmgen from filament:
+-- $ ./cmgen --format=png --extract=skybox -s 512 industrial_pipe_and_valve_01_4k.hdr
+-- $ ./cmgen --format=ktx -x out industrial_pipe_and_valve_01_4k.hdr
+
 function lovr.load()
-  model = lovr.graphics.newModel('helmet/DamagedHelmet.glb')
+  model = lovr.graphics.newModel('DamagedHelmet.glb')
+
+  shader = lovr.graphics.newShader([[
+    vec4 lovrmain() {
+      return DefaultPosition;
+    }
+  ]], [[
+    var(0) uniform textureCube cubemap;
+    var(1) uniform sphericalHarmonics { vec3 sh[9]; };
 
-  shader = lovr.graphics.newShader('standard', {
+    vec4 lovrmain() {
+      Surface surface;
+      initSurface(surface);
+
+      vec3 color = vec3(0);
+      vec3 lightDirection = vec3(-1, -1, -1);
+      vec4 lightColorAndBrightness = vec4(1, 1, 1, 3);
+      float visibility = 1.;
+      color += getLighting(surface, lightDirection, lightColorAndBrightness, visibility);
+      color += getIndirectLighting(surface, cubemap, sh);
+
+      return vec4(color, 1);
+    }
+  ]], {
     flags = {
-      normalMap = false,
-      indirectLighting = true,
-      occlusion = true,
-      emissive = true,
-      skipTonemap = false
+      glow = true,
+      normalMap = true,
+      vertexTangents = false, -- DamagedHelmet doesn't have vertex tangents
+      tonemap = true
     }
   })
 
   skybox = lovr.graphics.newTexture({
-    left = 'env/nx.png',
-    right = 'env/px.png',
-    top = 'env/py.png',
-    bottom = 'env/ny.png',
-    back = 'env/pz.png',
-    front = 'env/nz.png'
-  }, { linear = true })
-
-  environmentMap = lovr.graphics.newTexture(256, 256, { type = 'cube' })
-  for mipmap = 1, environmentMap:getMipmapCount() do
-    for face, dir in ipairs({ 'px', 'nx', 'py', 'ny', 'pz', 'nz' }) do
-      local filename = ('env/m%d_%s.png'):format(mipmap - 1, dir)
-      local image = lovr.data.newImage(filename, false)
-      environmentMap:replacePixels(image, 0, 0, face, mipmap)
-    end
-  end
-
-  shader:send('lovrLightDirection', { -1, -1, -1 })
-  shader:send('lovrLightColor', { .9, .9, .8, 1.0 })
-  shader:send('lovrExposure', 2)
-  shader:send('lovrSphericalHarmonics', require('env/sphericalHarmonics'))
-  shader:send('lovrEnvironmentMap', environmentMap)
-
-  lovr.graphics.setBackgroundColor(.18, .18, .20)
-  lovr.graphics.setCullingEnabled(true)
-  lovr.graphics.setBlendMode()
+    px = 'skybox/px.png',
+    nx = 'skybox/nx.png',
+    py = 'skybox/py.png',
+    ny = 'skybox/ny.png',
+    pz = 'skybox/pz.png',
+    nz = 'skybox/nz.png'
+  })
+
+  environmentMap = lovr.graphics.newTexture('ibl.ktx')
+
+  sphericalHarmonics = lovr.graphics.newBuffer({
+    {  0.611764907836914,  0.599504590034485,  0.479980736970901 },
+    {  0.659514904022217,  0.665349841117859,  0.567680120468140 },
+    {  0.451633930206299,  0.450751245021820,  0.355226665735245 },
+    { -0.044383134692907, -0.053154513239861, -0.019974749535322 },
+    { -0.053045745939016, -0.057957146316767, -0.011247659102082 },
+    {  0.485697060823441,  0.490428507328033,  0.397530466318130 },
+    { -0.023690477013588, -0.024272611364722, -0.021886156871915 },
+    { -0.179465517401695, -0.181243389844894, -0.141314014792442 },
+    { -0.144527092576027, -0.143508568406105, -0.122757166624069 }
+  }, { 'vec3', layout = 'std140' })
 end
 
-function lovr.draw()
-  lovr.graphics.skybox(skybox)
-  lovr.graphics.setShader(shader)
-  model:draw(0, 1.5, -3, 1, lovr.timer.getTime() * .15 - 1)
-  lovr.graphics.setShader()
+function lovr.draw(pass)
+  pass:setCullMode('back')
+  pass:setBlendMode()
+
+  pass:skybox(skybox)
+
+  pass:setShader(shader)
+  pass:send('cubemap', skybox)
+  pass:send('sphericalHarmonics', sphericalHarmonics)
+  pass:draw(model, 0, 1.5, -1.5, .5)
 end

BIN
examples/Lighting/PBR_Materials/skybox/nx.png


BIN
examples/Lighting/PBR_Materials/skybox/ny.png


BIN
examples/Lighting/PBR_Materials/skybox/nz.png


BIN
examples/Lighting/PBR_Materials/skybox/px.png


BIN
examples/Lighting/PBR_Materials/skybox/py.png


BIN
examples/Lighting/PBR_Materials/skybox/pz.png