Skip to content

Commit

Permalink
ibl
Browse files Browse the repository at this point in the history
  • Loading branch information
roeas committed Mar 12, 2024
1 parent da7efb0 commit 304498d
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 7 deletions.
4 changes: 4 additions & 0 deletions Engine/BuiltInShaders/common/Envirnoment.sh
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ SAMPLERCUBE(s_texCubeIrr, IBL_IRRADIANCE_SLOT);
SAMPLERCUBE(s_texCubeRad, IBL_RADIANCE_SLOT);
SAMPLER2D(s_texLUT, BRDF_LUT_SLOT);

uniform vec4 u_iblStrength;

vec3 SampleEnvIrradiance(vec3 normal, float mip) {
// We use the HDR texture which in linear space.
vec3 cubeNormalDir = normalize(fixCubeLookup(normal, mip, 256.0));
Expand Down Expand Up @@ -74,6 +76,8 @@ vec3 GetIBL(Material material, vec3 vertexNormal, vec3 viewDir) {

// Specular
envColor += (envSpecularBRDF * envRadiance * finalSpecularOcclusion);

envColor *= vec3_splat(u_iblStrength.x);
#endif

return envColor;
Expand Down
22 changes: 18 additions & 4 deletions Engine/Source/Editor/UILayers/Inspector.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -306,11 +306,25 @@ void UpdateComponentWidget<engine::MaterialComponent>(engine::SceneWorld* pScene
ImGui::PopStyleVar();
}

// Shaders
// Ambient
{
bool isOpen = ImGui::CollapsingHeader("Ambient", ImGuiTreeNodeFlags_AllowItemOverlap | ImGuiTreeNodeFlags_DefaultOpen);
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2, 2));
ImGui::Separator();
if (isOpen)
{
bool isOpen = ImGui::CollapsingHeader("Shader", ImGuiTreeNodeFlags_AllowItemOverlap | ImGuiTreeNodeFlags_DefaultOpen);
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2, 2));
ImGui::Separator();
ImGuiUtils::ImGuiFloatProperty("iblStrength", pMaterialComponent->GetIblStrengeth(), cd::Unit::None, 0.01f, 10.0f, false, 0.02f);
}

ImGui::Separator();
ImGui::PopStyleVar();
}

// Shaders
{
bool isOpen = ImGui::CollapsingHeader("Shader", ImGuiTreeNodeFlags_AllowItemOverlap | ImGuiTreeNodeFlags_DefaultOpen);
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2, 2));
ImGui::Separator();

if (isOpen)
{
Expand Down
8 changes: 7 additions & 1 deletion Engine/Source/Runtime/ECWorld/MaterialComponent.h
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,11 @@ class MaterialComponent final
void SetToonParameters(ToonParameters toonParameters) { m_toonParameters = toonParameters; }
ToonParameters& GetToonParameters() { return m_toonParameters; }
ToonParameters GetToonParameters() const { return m_toonParameters; }

void SetIblStrengeth(float strength) { m_iblStrength = strength; }
float& GetIblStrengeth() { return m_iblStrength; }
float GetIblStrengeth() const { return m_iblStrength; }

private:
// Input
const cd::Material* m_pMaterialData = nullptr;
Expand Down Expand Up @@ -205,8 +210,9 @@ class MaterialComponent final
std::vector<TextureBlob> m_cacheTextureBlobs;

// Output
std::map<cd::MaterialTextureType, PropertyGroup> m_propertyGroups;
float m_iblStrength = 0.5f;
ToonParameters m_toonParameters;
std::map<cd::MaterialTextureType, PropertyGroup> m_propertyGroups;
};

}
9 changes: 7 additions & 2 deletions Engine/Source/Runtime/Rendering/WorldRenderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ constexpr const char* cubeRadianceSampler = "s_texCubeRad";
constexpr const char* lutTexture = "Textures/lut/ibl_brdf_lut.dds";

constexpr const char* cameraPos = "u_cameraPos";
constexpr const char* iblStrength = "u_iblStrength";
constexpr const char* albedoColor = "u_albedoColor";
constexpr const char* emissiveColorAndFactor = "u_emissiveColorAndFactor";
constexpr const char* metallicRoughnessFactor = "u_metallicRoughnessFactor";
Expand Down Expand Up @@ -78,6 +79,7 @@ void WorldRenderer::Warmup()
GetRenderContext()->CreateTexture(pSkyComponent->GetRadianceTexturePath().c_str(), samplerFlags);

GetRenderContext()->CreateUniform(cameraPos, bgfx::UniformType::Vec4, 1);
GetRenderContext()->CreateUniform(iblStrength, bgfx::UniformType::Vec4, 1);
GetRenderContext()->CreateUniform(albedoColor, bgfx::UniformType::Vec4, 1);
GetRenderContext()->CreateUniform(emissiveColorAndFactor, bgfx::UniformType::Vec4, 1);
GetRenderContext()->CreateUniform(metallicRoughnessFactor, bgfx::UniformType::Vec4, 1);
Expand Down Expand Up @@ -265,8 +267,11 @@ void WorldRenderer::Render(float deltaTime)
GetRenderContext()->GetUniform(radSamplerCrc),
GetRenderContext()->GetTexture(StringCrc(pSkyComponent->GetRadianceTexturePath())));

constexpr StringCrc lutsamplerCrc(lutSampler);
constexpr StringCrc luttextureCrc(lutTexture);
constexpr StringCrc iblStrengthCrc{ iblStrength };
GetRenderContext()->FillUniform(iblStrengthCrc, &(pMaterialComponent->GetIblStrengeth()));

constexpr StringCrc lutsamplerCrc{ lutSampler };
constexpr StringCrc luttextureCrc{ lutTexture };
bgfx::setTexture(BRDF_LUT_SLOT, GetRenderContext()->GetUniform(lutsamplerCrc), GetRenderContext()->GetTexture(luttextureCrc));
}
else if (SkyType::AtmosphericScattering == crtSkyType)
Expand Down

0 comments on commit 304498d

Please sign in to comment.