env probes rendering WIP

This commit is contained in:
Mikulas Florek 2019-06-23 23:55:03 +02:00
parent e2640a0485
commit 1327a4ece8
3 changed files with 11 additions and 5 deletions

View file

@ -37,7 +37,7 @@ fragment_shader [[
float depth = texture(u_gbuffer_depth, screen_uv).x;
vec3 albedo = gb0.rgb;
vec3 normal = gb1.rgb;
vec3 normal = gb1.rgb * 2 - 1;
float roughness = gb0.w;
float metallic = gb1.w;
float emission = unpackEmission(gb2.x);
@ -49,7 +49,8 @@ fragment_shader [[
vec3 indirect = PBR_ComputeIndirectLight(albedo, roughness, metallic, normal, V);
float alpha = 1 - saturate(length(wpos - u_pos_radius.xyz) / u_pos_radius.w);
//alpha *= alpha;
o_color = vec4(indirect * alpha, alpha);
o_color = vec4(indirect * alpha * u_light_indirect_intensity, alpha);
//o_color = vec4(1, 0, 0, 1);
//o_color = vec4(abs(u_camera_pos), 1);
//o_color = vec4(1, 0, 0, 1);
}

View file

@ -598,10 +598,14 @@ struct ModelPlugin final : AssetBrowser::IPlugin, AssetCompiler::IPlugin
PipelineResource* pres = engine.getResourceManager().load<PipelineResource>(Path("pipelines/main.pln"));
m_tile.pipeline = Pipeline::create(*renderer, pres, "", engine.getAllocator());
RenderScene* render_scene = (RenderScene*)m_tile.universe->getScene(MODEL_INSTANCE_TYPE);
const EntityRef env_probe = m_tile.universe->createEntity({0, 0, 0}, Quat::IDENTITY);
m_tile.universe->createComponent(ENVIRONMENT_PROBE_TYPE, env_probe);
render_scene->setEnvironmentProbeRadius(env_probe, 1e3);
Matrix mtx;
mtx.lookAt({10, 10, 10}, Vec3::ZERO, {0, 1, 0});
const EntityRef light_entity = m_tile.universe->createEntity({10, 10, 10}, mtx.getRotation());
RenderScene* render_scene = (RenderScene*)m_tile.universe->getScene(MODEL_INSTANCE_TYPE);
m_tile.universe->createComponent(ENVIRONMENT_TYPE, light_entity);
render_scene->getEnvironment(light_entity).m_diffuse_intensity = 1;
render_scene->getEnvironment(light_entity).m_indirect_intensity = 1;

View file

@ -1275,7 +1275,8 @@ struct PipelineImpl final : Pipeline
void setup() override
{
m_pipeline->getScene()->getEnvironmentProbes(m_probes);
RenderScene* scene = m_pipeline->getScene();
scene->getEnvironmentProbes(m_probes);
}
@ -1300,7 +1301,7 @@ struct PipelineImpl final : Pipeline
const DVec3 cam_pos = m_camera_params.pos;
for (const EnvProbeInfo& probe : m_probes) {
const Vec4 pos_radius((probe.position - cam_pos).toFloat(), probe.radius);
ffr::TextureHandle handles[2] = { probe.radiance, probe.irradiance };
ffr::TextureHandle handles[2] = { probe.irradiance, probe.radiance };
ffr::bindTextures(handles, 14, 2);
ffr::applyUniform4f(pos_radius_uniform_loc, &pos_radius.x);