//// LightingModel.h// libraries/render-utils/src///// Created by Sam Gateau 7/1/2016.// Copyright 2016 High Fidelity, Inc.// Copyright 2024 Overte e.V.//// Distributed under the Apache License, Version 2.0.// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html// #ifndef hifi_LightingModel_h#define hifi_LightingModel_h #include <gpu/Resource.h> #include <render/Forward.h>#include <render/DrawTask.h> // LightingModel is a helper class gathering in one place the flags to enable the lighting contributionsclass LightingModel {public: using UniformBufferView = gpu::BufferView; LightingModel(); void setUnlit(bool enable); bool isUnlitEnabled() const; void setEmissive(bool enable); bool isEmissiveEnabled() const; void setLightmap(bool enable); bool isLightmapEnabled() const; void setBackground(bool enable); bool isBackgroundEnabled() const; void setHaze(bool enable); bool isHazeEnabled() const; void setBloom(bool enable); bool isBloomEnabled() const; void setObscurance(bool enable); bool isObscuranceEnabled() const; void setScattering(bool enable); bool isScatteringEnabled() const; void setDiffuse(bool enable); bool isDiffuseEnabled() const; void setSpecular(bool enable); bool isSpecularEnabled() const; void setAlbedo(bool enable); bool isAlbedoEnabled() const; void setMaterialTexturing(bool enable); bool isMaterialTexturingEnabled() const; void setAmbientLight(bool enable); bool isAmbientLightEnabled() const; void setDirectionalLight(bool enable); bool isDirectionalLightEnabled() const; void setPointLight(bool enable); bool isPointLightEnabled() const; void setSpotLight(bool enable); bool isSpotLightEnabled() const; void setShowLightContour(bool enable); bool isShowLightContourEnabled() const; void setWireframe(bool enable); bool isWireframeEnabled() const; void setSkinning(bool enable); bool isSkinningEnabled() const; void setBlendshape(bool enable); bool isBlendshapeEnabled() const; void setAmbientOcclusion(bool enable); bool isAmbientOcclusionEnabled() const; void setLocalLightingEnabled(bool enable); bool isLocalLightingEnabled() const; void setShadow(bool enable); bool isShadowEnabled() const; void setNormalMapAttenuation(float min, float max); UniformBufferView getParametersBuffer() const { return _parametersBuffer; } gpu::TexturePointer getAmbientFresnelLUT() const { return _ambientFresnelLUT; } protected: bool _enableLocalLighting { true }; // Class describing the uniform buffer with the transform info common to the AO shaders // It s changing every frame class Parameters { public: float enableUnlit { 1.0f }; float enableEmissive { 1.0f }; float enableLightmap { 1.0f }; float enableBackground { 1.0f }; float enableScattering { 1.0f }; float enableDiffuse { 1.0f }; float enableSpecular { 1.0f }; float enableAlbedo { 1.0f }; float enableAmbientLight { 1.0f }; float enableDirectionalLight { 1.0f }; float enablePointLight { 1.0f }; float enableSpotLight { 1.0f }; float showLightContour { 0.0f }; // false by default float enableObscurance { 1.0f }; float enableMaterialTexturing { 1.0f }; float enableWireframe { 0.0f }; // false by default float enableHaze { 1.0f }; float enableBloom { 1.0f }; float enableSkinning { 1.0f }; float enableBlendshape { 1.0f }; float enableAmbientOcclusion { 1.0f }; float enableShadow { 1.0f }; float normalMapAttenuationMin { 1.0f }; float normalMapAttenuationMax { 1.0f }; Parameters() {} }; UniformBufferView _parametersBuffer; static gpu::TexturePointer _ambientFresnelLUT;};using LightingModelPointer = std::shared_ptr<LightingModel>; class MakeLightingModelConfig : public render::Job::Config { Q_OBJECT Q_PROPERTY(bool enableUnlit MEMBER enableUnlit NOTIFY dirty) Q_PROPERTY(bool enableEmissive MEMBER enableEmissive NOTIFY dirty) Q_PROPERTY(bool enableLightmap MEMBER enableLightmap NOTIFY dirty) Q_PROPERTY(bool enableBackground MEMBER enableBackground NOTIFY dirty) Q_PROPERTY(bool enableHaze MEMBER enableHaze NOTIFY dirty) Q_PROPERTY(bool enableObscurance MEMBER enableObscurance NOTIFY dirty) Q_PROPERTY(bool enableScattering MEMBER enableScattering NOTIFY dirty) Q_PROPERTY(bool enableDiffuse MEMBER enableDiffuse NOTIFY dirty) Q_PROPERTY(bool enableSpecular MEMBER enableSpecular NOTIFY dirty) Q_PROPERTY(bool enableAlbedo MEMBER enableAlbedo NOTIFY dirty) Q_PROPERTY(bool enableMaterialTexturing MEMBER enableMaterialTexturing NOTIFY dirty) Q_PROPERTY(bool enableAmbientLight MEMBER enableAmbientLight NOTIFY dirty) Q_PROPERTY(bool enableDirectionalLight MEMBER enableDirectionalLight NOTIFY dirty) Q_PROPERTY(bool enablePointLight MEMBER enablePointLight NOTIFY dirty) Q_PROPERTY(bool enableSpotLight MEMBER enableSpotLight NOTIFY dirty) Q_PROPERTY(bool enableWireframe MEMBER enableWireframe NOTIFY dirty) Q_PROPERTY(bool showLightContour MEMBER showLightContour NOTIFY dirty) Q_PROPERTY(bool enableBloom MEMBER enableBloom NOTIFY dirty) Q_PROPERTY(bool enableSkinning MEMBER enableSkinning NOTIFY dirty) Q_PROPERTY(bool enableBlendshape MEMBER enableBlendshape NOTIFY dirty) Q_PROPERTY(bool enableAmbientOcclusion READ isAmbientOcclusionEnabled WRITE setAmbientOcclusion NOTIFY dirty) Q_PROPERTY(bool enableLocalLighting READ isLocalLightingEnabled WRITE setLocalLighting NOTIFY dirty) Q_PROPERTY(bool enableShadow READ isShadowEnabled WRITE setShadow NOTIFY dirty) public: MakeLightingModelConfig() : render::Job::Config() {} // Make Lighting Model is always on bool enableUnlit { true }; bool enableEmissive { true }; bool enableLightmap { true }; bool enableBackground { true }; bool enableObscurance { true }; bool enableScattering { true }; bool enableDiffuse { true }; bool enableSpecular { true }; bool enableAlbedo { true }; bool enableMaterialTexturing { true }; bool enableAmbientLight { true }; bool enableDirectionalLight { true }; bool enablePointLight { true }; bool enableSpotLight { true }; bool showLightContour { false }; // false by default bool enableWireframe { false }; // false by default bool enableHaze { true }; bool enableBloom { true }; bool enableSkinning { true }; bool enableBlendshape { true }; bool enableAmbientOcclusion { true }; bool enableLocalLighting { true }; bool enableShadow { true }; void setAmbientOcclusion(bool enable) { enableAmbientOcclusion = enable; emit dirty();} bool isAmbientOcclusionEnabled() const { return enableAmbientOcclusion; } void setLocalLighting(bool enable) { enableLocalLighting = enable; emit dirty();} bool isLocalLightingEnabled() const { return enableLocalLighting; } void setShadow(bool enable) { enableShadow = enable; emit dirty(); } bool isShadowEnabled() const { return enableShadow; } void setHaze(bool enable) { enableHaze = enable; emit dirty(); } void setBloom(bool enable) { enableBloom = enable; emit dirty(); } signals: void dirty();}; class MakeLightingModel {public: using Config = MakeLightingModelConfig; using JobModel = render::Job::ModelO<MakeLightingModel, LightingModelPointer, Config>; MakeLightingModel(); void configure(const Config& config); void run(const render::RenderContextPointer& renderContext, LightingModelPointer& lightingModel); private: LightingModelPointer _lightingModel;}; #endif // hifi_SurfaceGeometryPass_h
//
// LightingModel.h
// libraries/render-utils/src/
//
// Created by Sam Gateau 7/1/2016.
// Copyright 2016 High Fidelity, Inc.
// Copyright 2024 Overte e.V.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
#ifndef hifi_LightingModel_h
#define hifi_LightingModel_h
#include <gpu/Resource.h>
#include <render/Forward.h>
#include <render/DrawTask.h>
// LightingModel is a helper class gathering in one place the flags to enable the lighting contributions
class LightingModel {
public:
using UniformBufferView = gpu::BufferView;
LightingModel();
void setUnlit(bool enable);
bool isUnlitEnabled() const;
void setEmissive(bool enable);
bool isEmissiveEnabled() const;
void setLightmap(bool enable);
bool isLightmapEnabled() const;
void setBackground(bool enable);
bool isBackgroundEnabled() const;
void setHaze(bool enable);
bool isHazeEnabled() const;
void setBloom(bool enable);
bool isBloomEnabled() const;
void setObscurance(bool enable);
bool isObscuranceEnabled() const;
void setScattering(bool enable);
bool isScatteringEnabled() const;
void setDiffuse(bool enable);
bool isDiffuseEnabled() const;
void setSpecular(bool enable);
bool isSpecularEnabled() const;
void setAlbedo(bool enable);
bool isAlbedoEnabled() const;
void setMaterialTexturing(bool enable);
bool isMaterialTexturingEnabled() const;
void setAmbientLight(bool enable);
bool isAmbientLightEnabled() const;
void setDirectionalLight(bool enable);
bool isDirectionalLightEnabled() const;
void setPointLight(bool enable);
bool isPointLightEnabled() const;
void setSpotLight(bool enable);
bool isSpotLightEnabled() const;
void setShowLightContour(bool enable);
bool isShowLightContourEnabled() const;
void setWireframe(bool enable);
bool isWireframeEnabled() const;
void setSkinning(bool enable);
bool isSkinningEnabled() const;
void setBlendshape(bool enable);
bool isBlendshapeEnabled() const;
void setAmbientOcclusion(bool enable);
bool isAmbientOcclusionEnabled() const;
void setLocalLightingEnabled(bool enable);
bool isLocalLightingEnabled() const;
void setShadow(bool enable);
bool isShadowEnabled() const;
void setNormalMapAttenuation(float min, float max);
UniformBufferView getParametersBuffer() const { return _parametersBuffer; }
gpu::TexturePointer getAmbientFresnelLUT() const { return _ambientFresnelLUT; }
protected:
bool _enableLocalLighting { true };
// Class describing the uniform buffer with the transform info common to the AO shaders
// It s changing every frame
class Parameters {
public:
float enableUnlit { 1.0f };
float enableEmissive { 1.0f };
float enableLightmap { 1.0f };
float enableBackground { 1.0f };
float enableScattering { 1.0f };
float enableDiffuse { 1.0f };
float enableSpecular { 1.0f };
float enableAlbedo { 1.0f };
float enableAmbientLight { 1.0f };
float enableDirectionalLight { 1.0f };
float enablePointLight { 1.0f };
float enableSpotLight { 1.0f };
float showLightContour { 0.0f }; // false by default
float enableObscurance { 1.0f };
float enableMaterialTexturing { 1.0f };
float enableWireframe { 0.0f }; // false by default
float enableHaze { 1.0f };
float enableBloom { 1.0f };
float enableSkinning { 1.0f };
float enableBlendshape { 1.0f };
float enableAmbientOcclusion { 1.0f };
float enableShadow { 1.0f };
float normalMapAttenuationMin { 1.0f };
float normalMapAttenuationMax { 1.0f };
Parameters() {}
};
UniformBufferView _parametersBuffer;
static gpu::TexturePointer _ambientFresnelLUT;
};
using LightingModelPointer = std::shared_ptr<LightingModel>;
class MakeLightingModelConfig : public render::Job::Config {
Q_OBJECT
Q_PROPERTY(bool enableUnlit MEMBER enableUnlit NOTIFY dirty)
Q_PROPERTY(bool enableEmissive MEMBER enableEmissive NOTIFY dirty)
Q_PROPERTY(bool enableLightmap MEMBER enableLightmap NOTIFY dirty)
Q_PROPERTY(bool enableBackground MEMBER enableBackground NOTIFY dirty)
Q_PROPERTY(bool enableHaze MEMBER enableHaze NOTIFY dirty)
Q_PROPERTY(bool enableObscurance MEMBER enableObscurance NOTIFY dirty)
Q_PROPERTY(bool enableScattering MEMBER enableScattering NOTIFY dirty)
Q_PROPERTY(bool enableDiffuse MEMBER enableDiffuse NOTIFY dirty)
Q_PROPERTY(bool enableSpecular MEMBER enableSpecular NOTIFY dirty)
Q_PROPERTY(bool enableAlbedo MEMBER enableAlbedo NOTIFY dirty)
Q_PROPERTY(bool enableMaterialTexturing MEMBER enableMaterialTexturing NOTIFY dirty)
Q_PROPERTY(bool enableAmbientLight MEMBER enableAmbientLight NOTIFY dirty)
Q_PROPERTY(bool enableDirectionalLight MEMBER enableDirectionalLight NOTIFY dirty)
Q_PROPERTY(bool enablePointLight MEMBER enablePointLight NOTIFY dirty)
Q_PROPERTY(bool enableSpotLight MEMBER enableSpotLight NOTIFY dirty)
Q_PROPERTY(bool enableWireframe MEMBER enableWireframe NOTIFY dirty)
Q_PROPERTY(bool showLightContour MEMBER showLightContour NOTIFY dirty)
Q_PROPERTY(bool enableBloom MEMBER enableBloom NOTIFY dirty)
Q_PROPERTY(bool enableSkinning MEMBER enableSkinning NOTIFY dirty)
Q_PROPERTY(bool enableBlendshape MEMBER enableBlendshape NOTIFY dirty)
Q_PROPERTY(bool enableAmbientOcclusion READ isAmbientOcclusionEnabled WRITE setAmbientOcclusion NOTIFY dirty)
Q_PROPERTY(bool enableLocalLighting READ isLocalLightingEnabled WRITE setLocalLighting NOTIFY dirty)
Q_PROPERTY(bool enableShadow READ isShadowEnabled WRITE setShadow NOTIFY dirty)
public:
MakeLightingModelConfig() : render::Job::Config() {} // Make Lighting Model is always on
bool enableUnlit { true };
bool enableEmissive { true };
bool enableLightmap { true };
bool enableBackground { true };
bool enableObscurance { true };
bool enableScattering { true };
bool enableDiffuse { true };
bool enableSpecular { true };
bool enableAlbedo { true };
bool enableMaterialTexturing { true };
bool enableAmbientLight { true };
bool enableDirectionalLight { true };
bool enablePointLight { true };
bool enableSpotLight { true };
bool showLightContour { false }; // false by default
bool enableWireframe { false }; // false by default
bool enableHaze { true };
bool enableBloom { true };
bool enableSkinning { true };
bool enableBlendshape { true };
bool enableAmbientOcclusion { true };
bool enableLocalLighting { true };
bool enableShadow { true };
void setAmbientOcclusion(bool enable) { enableAmbientOcclusion = enable; emit dirty();}
bool isAmbientOcclusionEnabled() const { return enableAmbientOcclusion; }
void setLocalLighting(bool enable) { enableLocalLighting = enable; emit dirty();}
bool isLocalLightingEnabled() const { return enableLocalLighting; }
void setShadow(bool enable) { enableShadow = enable; emit dirty(); }
bool isShadowEnabled() const { return enableShadow; }
void setHaze(bool enable) { enableHaze = enable; emit dirty(); }
void setBloom(bool enable) { enableBloom = enable; emit dirty(); }
signals:
void dirty();
};
class MakeLightingModel {
public:
using Config = MakeLightingModelConfig;
using JobModel = render::Job::ModelO<MakeLightingModel, LightingModelPointer, Config>;
MakeLightingModel();
void configure(const Config& config);
void run(const render::RenderContextPointer& renderContext, LightingModelPointer& lightingModel);
private:
LightingModelPointer _lightingModel;
};
#endif // hifi_SurfaceGeometryPass_h