Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions interface/src/scripting/RenderScriptingInterface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@ void RenderScriptingInterface::setRenderMethod(RenderMethod renderMethod) {
}
}

// FIXME: other rendering settings like shadows and
// bloom aren't propagated through mirror views yet
void recursivelyUpdateMirrorRenderMethods(const QString& parentTaskName, int renderMethod, int depth) {
if (depth == RenderMirrorTask::MAX_MIRROR_DEPTH) {
return;
Expand All @@ -106,7 +108,7 @@ void recursivelyUpdateMirrorRenderMethods(const QString& parentTaskName, int ren
auto mirrorConfig = dynamic_cast<render::SwitchConfig*>(renderConfig->getConfig(QString::fromStdString(mirrorTaskString)));
if (mirrorConfig) {
mirrorConfig->setBranch((int)renderMethod);
recursivelyUpdateMirrorRenderMethods(QString::fromStdString(mirrorTaskString) + (renderMethod == 1 ? ".RenderForwardTask" : ".RenderShadowsAndDeferredTask.RenderDeferredTask"),
recursivelyUpdateMirrorRenderMethods(QString::fromStdString(mirrorTaskString) + (renderMethod == 1 ? ".RenderShadowsAndForwardTask.RenderForwardTask" : ".RenderShadowsAndDeferredTask.RenderDeferredTask"),
renderMethod, depth + 1);
}
}
Expand All @@ -123,7 +125,7 @@ void RenderScriptingInterface::forceRenderMethod(RenderMethod renderMethod) {
if (config) {
config->setBranch((int)renderMethod);

recursivelyUpdateMirrorRenderMethods(configName + (renderMethod == RenderMethod::FORWARD ? ".RenderForwardTask" : ".RenderShadowsAndDeferredTask.RenderDeferredTask"),
recursivelyUpdateMirrorRenderMethods(configName + (renderMethod == RenderMethod::FORWARD ? ".RenderShadowsAndForwardTask.RenderForwardTask" : ".RenderShadowsAndDeferredTask.RenderDeferredTask"),
(int)renderMethod, 0);
}

Expand Down Expand Up @@ -445,7 +447,7 @@ void RenderScriptingInterface::forceViewportResolutionScale(float scale) {
if (deferredView) {
deferredView->setProperty("resolutionScale", scale);
}
auto forwardView = renderConfig->getConfig("RenderMainView.RenderForwardTask");
auto forwardView = renderConfig->getConfig("RenderMainView.RenderShadowsAndForwardTask.RenderForwardTask");
if (forwardView) {
forwardView->setProperty("resolutionScale", scale);
}
Expand All @@ -454,7 +456,7 @@ void RenderScriptingInterface::forceViewportResolutionScale(float scale) {
if (deferredSecondView) {
deferredSecondView->setProperty("resolutionScale", scale);
}
auto forwardSecondView = renderConfig->getConfig("RenderSecondView.RenderForwardTask");
auto forwardSecondView = renderConfig->getConfig("RenderSecondView.RenderShadowsAndForwardTask.RenderForwardTask");
if (forwardSecondView) {
forwardSecondView->setProperty("resolutionScale", scale);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2530,7 +2530,7 @@ static ShapePipelinePointer polyvoxPipelineFactory(const ShapePlumber& plumber,
std::make_tuple(false, false, false, polyvox),
std::make_tuple(true, false, false, polyvox_forward),
std::make_tuple(false, true, false, polyvox_shadow),
// no such thing as forward + shadow
std::make_tuple(true, true, false, polyvox_shadow),
std::make_tuple(false, false, true, polyvox_fade),
std::make_tuple(false, true, true, polyvox_shadow_fade),
// no such thing as forward + fade/shadow
Expand Down
6 changes: 3 additions & 3 deletions libraries/entities-renderer/src/RenderableWebEntityItem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,15 +74,15 @@ static ShapePipelinePointer webPipelineFactory(const ShapePlumber& plumber, cons
std::make_tuple(false, false, false, false, web_browser),
std::make_tuple(false, true, false, false, web_browser_forward),
std::make_tuple(false, false, true, false, web_browser_shadow),
// no such thing as forward + shadow
std::make_tuple(false, true, true, false, web_browser_shadow),
std::make_tuple(false, false, false, true, web_browser_fade),
std::make_tuple(false, false, true, true, web_browser_fade),
// no such thing as forward + fade/shadow
// transparent
std::make_tuple(true, false, false, false, web_browser_forward),
std::make_tuple(true, true, false, false, web_browser_forward),
// no such thing as transparent + shadow
// no such thing as forward + shadow
std::make_tuple(true, false, true, false, web_browser_shadow),
std::make_tuple(true, true, true, false, web_browser_shadow),
std::make_tuple(true, false, false, true, web_browser_fade),
std::make_tuple(true, false, true, true, web_browser_fade),
// no such thing as forward + fade/shadow
Expand Down
7 changes: 6 additions & 1 deletion libraries/entities-renderer/src/polyvox.slf
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@
};
<@endif@>

<@if HIFI_USE_FORWARD or HIFI_USE_TRANSLUCENT@>
<@include Shadow.slh@>
<@endif@>

<@if HIFI_USE_SHADOW or HIFI_USE_FORWARD@>
OUTPUT(0, vec4, _fragColor0);
<@endif@>
Expand Down Expand Up @@ -121,6 +125,7 @@ void main(void) {
vec3 fragToEyeWS = cam._viewInverse[3].xyz - fragPositionWS;
vec3 fragToEyeDirWS = normalize(fragToEyeWS);
SurfaceData surfaceWS = initSurfaceData(DEFAULT_ROUGHNESS, fragNormalWS, fragToEyeDirWS);
vec3 worldLightDirection = getLightDirection(getKeyLight());

vec4 localLighting = vec4(0.0);
<$fetchClusterInfo(_positionWS)$>
Expand All @@ -132,7 +137,7 @@ void main(void) {

vec4 color = vec4(evalGlobalLightingAlphaBlended(
cam._viewInverse,
1.0,
evalShadowAttenuation(worldLightDirection, _positionWS, -_positionES.z, fragNormalWS),
DEFAULT_OCCLUSION,
_positionES.xyz,
fragNormalWS,
Expand Down
30 changes: 30 additions & 0 deletions libraries/render-utils/src/DeferredLightingEffect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,36 @@ void DeferredLightingEffect::unsetLocalLightsBatch(gpu::Batch& batch) {
batch.setUniformBuffer(ru::Buffer::LightClusterFrustumGrid, nullptr);
}

void DeferredLightingEffect::setupShadowsBatch(gpu::Batch &batch, const LightStage::ShadowPointer &shadowPointer) {
auto deferredLightingEffect = DependencyManager::get<DeferredLightingEffect>();
deferredLightingEffect->_shadowPointer = shadowPointer;

if (shadowPointer) {
batch.setResourceTexture(ru::Texture::Shadow, shadowPointer->map);
batch.setUniformBuffer(ru::Buffer::ShadowParams, shadowPointer->getBuffer());
} else {
unsetShadowsBatch(batch);
}
}

void DeferredLightingEffect::setupShadowsBatch(gpu::Batch &batch) {
auto deferredLightingEffect = DependencyManager::get<DeferredLightingEffect>();
auto shadowPointer = deferredLightingEffect->_shadowPointer;

if (!shadowPointer) {
unsetShadowsBatch(batch);
return;
}

batch.setResourceTexture(ru::Texture::Shadow, shadowPointer->map);
batch.setUniformBuffer(ru::Buffer::ShadowParams, shadowPointer->getBuffer());
}

void DeferredLightingEffect::unsetShadowsBatch(gpu::Batch &batch) {
batch.setResourceTexture(ru::Texture::Shadow, nullptr);
batch.setUniformBuffer(ru::Buffer::ShadowParams, nullptr);
}

static void loadLightProgram(int programId, bool lightVolume, gpu::PipelinePointer& pipeline) {

gpu::ShaderPointer program = gpu::Shader::createProgram(programId);
Expand Down
5 changes: 5 additions & 0 deletions libraries/render-utils/src/DeferredLightingEffect.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,10 @@ class DeferredLightingEffect : public Dependency {
static void setupLocalLightsBatch(gpu::Batch& batch);
static void unsetLocalLightsBatch(gpu::Batch& batch);

static void setupShadowsBatch(gpu::Batch& batch, const LightStage::ShadowPointer& shadowPointer);
static void setupShadowsBatch(gpu::Batch& batch);
static void unsetShadowsBatch(gpu::Batch& batch);

private:
DeferredLightingEffect() = default;

Expand All @@ -72,6 +76,7 @@ class DeferredLightingEffect : public Dependency {
gpu::PipelinePointer _localLightOutline;

LightClustersPointer _lightClusters;
LightStage::ShadowPointer _shadowPointer;

friend class LightClusteringPass;
friend class RenderDeferredSetup;
Expand Down
2 changes: 2 additions & 0 deletions libraries/render-utils/src/GeometryCache.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -780,6 +780,7 @@ render::ShapePipelinePointer GeometryCache::getShapePipeline(bool textured, bool
auto deferredLightingEffect = DependencyManager::get<DeferredLightingEffect>();
deferredLightingEffect->setupKeyLightBatch(args, batch);
deferredLightingEffect->setupLocalLightsBatch(batch);
deferredLightingEffect->setupShadowsBatch(batch);
}
);
}
Expand All @@ -794,6 +795,7 @@ render::ShapePipelinePointer GeometryCache::getFadingShapePipeline(bool textured
auto deferredLightingEffect = DependencyManager::get<DeferredLightingEffect>();
deferredLightingEffect->setupKeyLightBatch(args, batch);
deferredLightingEffect->setupLocalLightsBatch(batch);
deferredLightingEffect->setupShadowsBatch(batch);
fadeBatchSetter(nullptr, batch, args);
},
fadeItemSetter
Expand Down
9 changes: 8 additions & 1 deletion libraries/render-utils/src/RenderDeferredTask.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -470,7 +470,7 @@ void RenderTransparentDeferred::run(const RenderContextPointer& renderContext, c
const auto& lightFrame = inputs.get2();
const auto& lightingModel = inputs.get3();
const auto& lightClusters = inputs.get4();
// Not needed yet: const auto& shadowFrame = inputs.get5();
const auto& shadowFrame = inputs.get5();
const auto& deferredFrameTransform = inputs.get6();
auto &deferredFramebuffer = inputs.get7();
auto deferredLightingEffect = DependencyManager::get<DeferredLightingEffect>();
Expand All @@ -494,9 +494,15 @@ void RenderTransparentDeferred::run(const RenderContextPointer& renderContext, c
batch.setResourceTexture(ru::Texture::AmbientFresnel, lightingModel->getAmbientFresnelLUT());
batch.setUniformBuffer(ru::Buffer::DeferredFrameTransform, deferredFrameTransform->getFrameTransformBuffer());

LightStage::ShadowPointer globalShadow;
if (lightingModel->isShadowEnabled() && shadowFrame && !shadowFrame->_objects.empty()) {
globalShadow = shadowFrame->_objects.front();
}

// Set the light
deferredLightingEffect->setupKeyLightBatch(args, batch, *lightFrame);
deferredLightingEffect->setupLocalLightsBatch(batch, lightClusters);
deferredLightingEffect->setupShadowsBatch(batch, globalShadow);

// Setup haze if current zone has haze
const auto& hazeStage = args->_scene->getStage<HazeStage>();
Expand All @@ -521,6 +527,7 @@ void RenderTransparentDeferred::run(const RenderContextPointer& renderContext, c
args->_batch = nullptr;
args->_globalShapeKey = 0;

deferredLightingEffect->unsetShadowsBatch(batch);
deferredLightingEffect->unsetLocalLightsBatch(batch);
deferredLightingEffect->unsetKeyLightBatch(batch);
});
Expand Down
18 changes: 15 additions & 3 deletions libraries/render-utils/src/RenderForwardTask.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,9 @@ void RenderForwardTask::build(JobModel& task, const render::Varying& input, rend

const auto& zones = lightingStageInputs[1];

const auto shadowTaskOut = inputs.get3();
const auto shadowFrame = shadowTaskOut[1];

const auto setNormalMapAttenuationInputs = SetNormalMapAttenuation::Inputs(lightingModel, normalMapAttenuationFrame).asVarying();
task.addJob<SetNormalMapAttenuation>("SetNormalMapAttenuation", setNormalMapAttenuationInputs);

Expand All @@ -134,7 +137,7 @@ void RenderForwardTask::build(JobModel& task, const render::Varying& input, rend
const auto lightClusters = task.addJob<LightClusteringPass>("LightClustering", lightClusteringPassInputs);

// Prepare Forward Framebuffer pass
const auto prepareForwardInputs = PrepareForward::Inputs(scaledPrimaryFramebuffer, lightFrame).asVarying();
const auto prepareForwardInputs = PrepareForward::Inputs(scaledPrimaryFramebuffer, lightFrame, lightingModel, shadowFrame).asVarying();
task.addJob<PrepareForward>("PrepareForward", prepareForwardInputs);

if (depth == 0) {
Expand All @@ -146,7 +149,7 @@ void RenderForwardTask::build(JobModel& task, const render::Varying& input, rend
task.addJob<PrepareStencil>("PrepareStencil", scaledPrimaryFramebuffer);

// Draw opaques forward
const auto opaqueInputs = DrawForward::Inputs(opaques, lightingModel, hazeFrame, lightClusters, deferredFrameTransform).asVarying();
const auto opaqueInputs = DrawForward::Inputs(opaques, lightingModel, hazeFrame, lightClusters, deferredFrameTransform, shadowFrame).asVarying();
task.addJob<DrawForward>("DrawOpaques", opaqueInputs, shapePlumber, true, mainViewTransformSlot);

#ifndef Q_OS_ANDROID
Expand All @@ -163,7 +166,7 @@ void RenderForwardTask::build(JobModel& task, const render::Varying& input, rend
task.addJob<DrawBackgroundStage>("DrawBackgroundForward", backgroundInputs, backgroundViewTransformSlot);

// Draw transparent objects forward
const auto transparentInputs = DrawForward::Inputs(transparents, lightingModel, hazeFrame, lightClusters, deferredFrameTransform).asVarying();
const auto transparentInputs = DrawForward::Inputs(transparents, lightingModel, hazeFrame, lightClusters, deferredFrameTransform, shadowFrame).asVarying();
task.addJob<DrawForward>("DrawTransparents", transparentInputs, shapePlumber, false, mainViewTransformSlot);

// Layered
Expand Down Expand Up @@ -244,6 +247,7 @@ void PrepareForward::run(const RenderContextPointer& renderContext, const Inputs

auto primaryFramebuffer = inputs.get0();
auto lightStageFrame = inputs.get1();
auto lightingModel = inputs.get2();

gpu::doInBatch("RenderForward::Draw::run", args->_context, [&](gpu::Batch& batch) {
args->_batch = &batch;
Expand Down Expand Up @@ -290,6 +294,7 @@ void DrawForward::run(const RenderContextPointer& renderContext, const Inputs& i
const auto& hazeFrame = inputs.get2();
const auto& lightClusters = inputs.get3();
const auto& deferredFrameTransform = inputs.get4();
const auto& shadowFrame = inputs.get5();
auto deferredLightingEffect = DependencyManager::get<DeferredLightingEffect>();

graphics::HazePointer haze;
Expand All @@ -310,9 +315,15 @@ void DrawForward::run(const RenderContextPointer& renderContext, const Inputs& i
batch.setResourceTexture(ru::Texture::AmbientFresnel, lightingModel->getAmbientFresnelLUT());
batch.setUniformBuffer(ru::Buffer::DeferredFrameTransform, deferredFrameTransform->getFrameTransformBuffer());

LightStage::ShadowPointer globalShadow = nullptr;
if (lightingModel->isShadowEnabled() && shadowFrame && !shadowFrame->_objects.empty()) {
globalShadow = shadowFrame->_objects.front();
}

// Set the light
deferredLightingEffect->setupKeyLightBatch(args, batch);
deferredLightingEffect->setupLocalLightsBatch(batch, lightClusters);
deferredLightingEffect->setupShadowsBatch(batch, globalShadow);

// Setup haze if current zone has haze
if (haze) {
Expand All @@ -337,6 +348,7 @@ void DrawForward::run(const RenderContextPointer& renderContext, const Inputs& i
args->_batch = nullptr;
args->_globalShapeKey = 0;

deferredLightingEffect->unsetShadowsBatch(batch);
deferredLightingEffect->unsetLocalLightsBatch(batch);
deferredLightingEffect->unsetKeyLightBatch(batch);
});
Expand Down
9 changes: 5 additions & 4 deletions libraries/render-utils/src/RenderForwardTask.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include "DeferredFrameTransform.h"
#include "LightClusters.h"
#include "LightingModel.h"
#include "RenderShadowTask.h"

class RenderForwardTaskConfig : public render::Task::Config {
Q_OBJECT
Expand All @@ -32,7 +33,7 @@ class RenderForwardTaskConfig : public render::Task::Config {

class RenderForwardTask {
public:
using Input = render::VaryingSet3<RenderFetchCullSortTask::Output, LightingModelPointer, AssembleLightingStageTask::Output>;
using Input = render::VaryingSet4<RenderFetchCullSortTask::Output, LightingModelPointer, AssembleLightingStageTask::Output, RenderShadowTask::Output>;
using Config = RenderForwardTaskConfig;
using JobModel = render::Task::ModelI<RenderForwardTask, Input, Config>;

Expand Down Expand Up @@ -82,7 +83,7 @@ class PreparePrimaryFramebufferMSAA {

class PrepareForward {
public:
using Inputs = render::VaryingSet2 <gpu::FramebufferPointer, LightStage::FramePointer>;
using Inputs = render::VaryingSet4 <gpu::FramebufferPointer, LightStage::FramePointer, LightingModelPointer, LightStage::ShadowFramePointer>;
using JobModel = render::Job::ModelI<PrepareForward, Inputs>;

void run(const render::RenderContextPointer& renderContext,
Expand All @@ -91,9 +92,9 @@ class PrepareForward {
private:
};

class DrawForward{
class DrawForward {
public:
using Inputs = render::VaryingSet5<render::ItemBounds, LightingModelPointer, HazeStage::FramePointer, LightClustersPointer, DeferredFrameTransformPointer>;
using Inputs = render::VaryingSet6<render::ItemBounds, LightingModelPointer, HazeStage::FramePointer, LightClustersPointer, DeferredFrameTransformPointer, LightStage::ShadowFramePointer>;
using JobModel = render::Job::ModelI<DrawForward, Inputs>;

DrawForward(const render::ShapePlumberPointer& shapePlumber, bool opaquePass, uint transformSlot) :
Expand Down
Loading
Loading