relief map support, small refactoring, shadow bias now based on geometry normal

This commit is contained in:
2023-03-02 11:46:52 +03:00
parent adf8c4d7f0
commit 64eee9e607
26 changed files with 465 additions and 174 deletions

View File

@@ -30,7 +30,7 @@
using namespace QGLEngineShaders;
RendererMaterial::RendererMaterial(Renderer * r_): r(r_), fbo_mat_thumb(r->view, 6, true, GL_RGBA16F) {
RendererMaterial::RendererMaterial(Renderer * r_): r(r_), fbo_mat_thumb(r->view, 7, true, GL_RGBA16F) {
mat_sphere = Primitive::ellipsoid(16, 16);
mat_camera = new Camera();
mat_camera->setPos(QVector3D(2, 2, 2));
@@ -38,6 +38,7 @@ RendererMaterial::RendererMaterial(Renderer * r_): r(r_), fbo_mat_thumb(r->view,
mat_camera->setFOV(45.);
mat_light = new Light();
mat_light->setPos(QVector3D(50, 100, 25));
mat_light->setCastShadows(false);
last_thumb_material = 0;
}
@@ -74,6 +75,8 @@ void RendererMaterial::renderMaterial(Material * m) {
if (r->bindShader(role, &prog)) {
r->setUniformMaps(prog);
r->setUniformCamera(prog, mat_camera, true, fbo_mat_thumb.size());
prog->setUniformValue("out_index_normal", Renderer::dbrNormalZ);
prog->setUniformValue("out_index_metal", Renderer::dbrMetalRoughReflectFlags);
// qDebug() << mat_camera->viewMatrix();
r->textures_empty.bind(f, tarEmpty);
r->textures_maps.bind(f, tarMaps);
@@ -83,15 +86,18 @@ void RendererMaterial::renderMaterial(Material * m) {
mat_sphere->loadObject(f, o);
mat_sphere->draw(f, 1);
}
fbo_mat_thumb.bindColorTextures();
fbo_mat_thumb.bindDepthTexture(5);
fbo_mat_thumb.setWriteBuffer(5);
fbo_mat_thumb.bindColorTextures({Renderer::dbrDiffuse,
Renderer::dbrNormalZ,
Renderer::dbrMetalRoughReflectFlags,
Renderer::dbrEmission,
Renderer::dbrSpeedBitangXY,
Renderer::dbrGeoNormal});
fbo_mat_thumb.setWriteBuffer(6);
if (r->bindShader(Renderer::srLightOmniPass, &prog)) {
r->setUniformCamera(prog, mat_camera, true, fbo_mat_thumb.size());
r->setUniformViewCorners(prog, mat_camera, fbo_mat_thumb.size());
for (int i = 0; i < 5; ++i)
for (int i = 0; i <= 5; ++i)
prog->setUniformValue(QString("tex_%1").arg(i).toLatin1().constData(), i);
prog->setUniformValue("tex_d", 5);
prog->setUniformValue("lights_start", 0);
prog->setUniformValue("lights_count", 1);
QMap<int, QList<Light *>> mat_l;
@@ -102,7 +108,7 @@ void RendererMaterial::renderMaterial(Material * m) {
r->renderQuad(prog, r->quad, mat_camera);
r->view->scene()->setLightsChanged();
}
fbo_mat_thumb.queryImage(5);
fbo_mat_thumb.queryImage(6);
fbo_mat_thumb.release();
}