env probes rendering WIP
This commit is contained in:
parent
e2640a0485
commit
1327a4ece8
3 changed files with 11 additions and 5 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in a new issue