main.lua 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. -- Skybox is "industrial_pipe_and_valve_01" from PolyHaven (CC0)
  2. -- Assets were generated from the skybox using cmgen from filament:
  3. -- $ ./cmgen --format=png --extract=skybox -s 512 industrial_pipe_and_valve_01_4k.hdr
  4. -- $ ./cmgen --format=ktx -x out industrial_pipe_and_valve_01_4k.hdr
  5. function lovr.load()
  6. model = lovr.graphics.newModel('DamagedHelmet.glb')
  7. shader = lovr.graphics.newShader([[
  8. vec4 lovrmain() {
  9. return DefaultPosition;
  10. }
  11. ]], [[
  12. layout(set = 2, binding = 0) uniform textureCube cubemap;
  13. layout(set = 2, binding = 1) uniform sphericalHarmonics { vec3 sh[9]; };
  14. vec4 lovrmain() {
  15. Surface surface;
  16. initSurface(surface);
  17. vec3 color = vec3(0);
  18. vec3 lightDirection = vec3(-1, -1, -1);
  19. vec4 lightColorAndBrightness = vec4(1, 1, 1, 3);
  20. float visibility = 1.;
  21. color += getLighting(surface, lightDirection, lightColorAndBrightness, visibility);
  22. color += getIndirectLighting(surface, cubemap, sh);
  23. return vec4(color, 1);
  24. }
  25. ]], {
  26. flags = {
  27. glow = true,
  28. normalMap = true,
  29. vertexTangents = false, -- DamagedHelmet doesn't have vertex tangents
  30. tonemap = true
  31. }
  32. })
  33. skybox = lovr.graphics.newTexture({
  34. px = 'skybox/px.png',
  35. nx = 'skybox/nx.png',
  36. py = 'skybox/py.png',
  37. ny = 'skybox/ny.png',
  38. pz = 'skybox/pz.png',
  39. nz = 'skybox/nz.png'
  40. })
  41. environmentMap = lovr.graphics.newTexture('ibl.ktx')
  42. sphericalHarmonics = lovr.graphics.newBuffer({ 'vec3', layout = 'std140' }, {
  43. { 0.611764907836914, 0.599504590034485, 0.479980736970901 },
  44. { 0.659514904022217, 0.665349841117859, 0.567680120468140 },
  45. { 0.451633930206299, 0.450751245021820, 0.355226665735245 },
  46. { -0.044383134692907, -0.053154513239861, -0.019974749535322 },
  47. { -0.053045745939016, -0.057957146316767, -0.011247659102082 },
  48. { 0.485697060823441, 0.490428507328033, 0.397530466318130 },
  49. { -0.023690477013588, -0.024272611364722, -0.021886156871915 },
  50. { -0.179465517401695, -0.181243389844894, -0.141314014792442 },
  51. { -0.144527092576027, -0.143508568406105, -0.122757166624069 }
  52. })
  53. end
  54. function lovr.draw(pass)
  55. pass:setCullMode('back')
  56. pass:setBlendMode()
  57. pass:skybox(skybox)
  58. pass:setShader(shader)
  59. pass:send('cubemap', skybox)
  60. pass:send('sphericalHarmonics', sphericalHarmonics)
  61. pass:draw(model, 0, 1.5, -1.5, .5)
  62. end