-- 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('DamagedHelmet.glb')
shader = lovr.graphics.newShader([[
vec4 lovrmain() {
return DefaultPosition;
}
]], [[
uniform textureCube cubemap;
uniform sphericalHarmonics { vec3 sh[9]; };
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 = {
glow = true,
normalMap = true,
vertexTangents = false, -- DamagedHelmet doesn't have vertex tangents
tonemap = true
}
})
skybox = lovr.graphics.newTexture({
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({ 'vec3', layout = 'std140' }, {
{ 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 }
})
end
function lovr.draw(pass)
pass:setCullMode('back')
pass:setBlendMode()
pass:skybox(skybox)
pass:setShader(shader)
pass:send('cubemap', environmentMap)
pass:send('sphericalHarmonics', sphericalHarmonics)
pass:draw(model, 0, 1.5, -1.5, .5)
end