From 57037080b26be3045dacaceeffa30869553bb4da Mon Sep 17 00:00:00 2001 From: AzaezelX Date: Tue, 14 Feb 2023 20:57:44 -0600 Subject: [PATCH] add an ignoreLighting entry to materials by request:, flag to utterly ignore lighting in favor of the base texture --- .../source/materials/materialDefinition.cpp | 4 ++++ Engine/source/materials/materialDefinition.h | 1 + .../materials/processedShaderMaterial.cpp | 4 +++- .../core/rendering/shaders/gl/lighting.glsl | 4 ++++ .../game/core/rendering/shaders/lighting.hlsl | 5 +++- .../lighting/advanced/gl/pointLightP.glsl | 5 ++++ .../advanced/gl/reflectionProbeArrayP.glsl | 6 ++++- .../lighting/advanced/gl/spotLightP.glsl | 6 ++++- .../lighting/advanced/gl/vectorLightP.glsl | 6 ++++- .../lighting/advanced/pointLightP.hlsl | 5 +++- .../advanced/reflectionProbeArrayP.hlsl | 7 +++++- .../shaders/lighting/advanced/spotLightP.hlsl | 5 +++- .../lighting/advanced/vectorLightP.hlsl | 5 +++- .../gui/guiMaterialPropertiesWindow.ed.gui | 23 +++++++++++++++++++ .../scripts/materialEditor.ed.tscript | 1 + 15 files changed, 78 insertions(+), 9 deletions(-) diff --git a/Engine/source/materials/materialDefinition.cpp b/Engine/source/materials/materialDefinition.cpp index 06e4907f4..a31f504f1 100644 --- a/Engine/source/materials/materialDefinition.cpp +++ b/Engine/source/materials/materialDefinition.cpp @@ -162,6 +162,7 @@ Material::Material() mGlow[i] = false; mReceiveShadows[i] = true; + mIgnoreLighting[i] = false; mDetailScale[i].set(2.0f, 2.0f); @@ -347,6 +348,9 @@ void Material::initPersistFields() "The 0 to 1 rolloff factor used in the subsurface scattering approximation."); addField("receiveShadows", TypeBool, Offset(mReceiveShadows, Material), MAX_STAGES, + "Shadows being cast onto the material."); + + addField("ignoreLighting", TypeBool, Offset(mIgnoreLighting, Material), MAX_STAGES, "Enables emissive lighting for the material."); addField("doubleSided", TypeBool, Offset(mDoubleSided, Material), diff --git a/Engine/source/materials/materialDefinition.h b/Engine/source/materials/materialDefinition.h index 076063872..afb68564d 100644 --- a/Engine/source/materials/materialDefinition.h +++ b/Engine/source/materials/materialDefinition.h @@ -306,6 +306,7 @@ public: bool mGlow[MAX_STAGES]; // entire stage glows bool mReceiveShadows[MAX_STAGES]; + bool mIgnoreLighting[MAX_STAGES]; Point2I mCellIndex[MAX_STAGES]; Point2I mCellLayout[MAX_STAGES]; diff --git a/Engine/source/materials/processedShaderMaterial.cpp b/Engine/source/materials/processedShaderMaterial.cpp index 96c172517..781c5d2e2 100644 --- a/Engine/source/materials/processedShaderMaterial.cpp +++ b/Engine/source/materials/processedShaderMaterial.cpp @@ -1200,7 +1200,9 @@ void ProcessedShaderMaterial::_setShaderConstants(SceneRenderState * state, cons // Deferred Shading: Determine Material Info Flags S32 matInfoFlags = (mMaterial->mReceiveShadows[stageNum] ? 1 : 0) | //ReceiveShadows - (mMaterial->mSubSurface[stageNum] ? 1 << 2 : 0); //subsurface + (mMaterial->mSubSurface[stageNum] ? 1 << 2 : 0)| //subsurface + (mMaterial->mIgnoreLighting[stageNum] ? 1 << 3 : 0); //IgnoreLighting + mMaterial->mMatInfoFlags[stageNum] = matInfoFlags / 255.0f; shaderConsts->setSafe(handles->mMatInfoFlagsSC, mMaterial->mMatInfoFlags[stageNum]); if( handles->mAccuScaleSC->isValid() ) diff --git a/Templates/BaseGame/game/core/rendering/shaders/gl/lighting.glsl b/Templates/BaseGame/game/core/rendering/shaders/gl/lighting.glsl index fd159cf4e..a903c0896 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/gl/lighting.glsl +++ b/Templates/BaseGame/game/core/rendering/shaders/gl/lighting.glsl @@ -276,6 +276,10 @@ vec4 compute4Lights( Surface surface, vec4 vectorLightingColor, float vectorLightBrightness ) { + if (getFlag(surface.matFlag, 2)) + { + return surface.baseColor; + } vec3 finalLighting = vec3(0.0f); int i; diff --git a/Templates/BaseGame/game/core/rendering/shaders/lighting.hlsl b/Templates/BaseGame/game/core/rendering/shaders/lighting.hlsl index 3ddb51982..0a0f1b967 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/lighting.hlsl +++ b/Templates/BaseGame/game/core/rendering/shaders/lighting.hlsl @@ -277,8 +277,11 @@ float4 compute4Lights( Surface surface, float4 vectorLightingColor, float vectorLightBrightness ) { + if (getFlag(surface.matFlag, 2)) + { + return surface.baseColor; + } float3 finalLighting = 0.0.xxx; - int i; for(i = 0; i < MAX_FORWARD_LIGHT; i++) { diff --git a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/pointLightP.glsl b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/pointLightP.glsl index 099f21cb4..81a8c7e23 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/pointLightP.glsl +++ b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/pointLightP.glsl @@ -147,6 +147,11 @@ void main() Surface surface = createSurface( normDepth, colorBuffer, matInfoBuffer, uvScene, eyePosWorld, wsEyeRay, cameraToWorld); + if (getFlag(surface.matFlag, 2)) + { + OUT_col = surface.baseColor; + return; + } vec3 L = lightPosition - surface.P; float dist = length(L); vec3 lighting = vec3(0.0); diff --git a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/reflectionProbeArrayP.glsl b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/reflectionProbeArrayP.glsl index e9e5b1410..65ef21a22 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/reflectionProbeArrayP.glsl +++ b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/reflectionProbeArrayP.glsl @@ -55,7 +55,11 @@ void main() //create surface Surface surface = createSurface(normDepth, colorBuffer, matInfoBuffer, IN_uv0.xy, eyePosWorld, IN_wsEyeRay, cameraToWorld); - + if (getFlag(surface.matFlag, 2)) + { + OUT_col = surface.baseColor; + return; + } #ifdef USE_SSAO_MASK float ssao = 1.0 - texture( ssaoMask, viewportCoordToRenderTarget( IN_uv0.xy, rtParams7 ) ).r; surface.ao = min(surface.ao, ssao); diff --git a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/spotLightP.glsl b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/spotLightP.glsl index afe263c9a..1a7c42822 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/spotLightP.glsl +++ b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/spotLightP.glsl @@ -80,7 +80,11 @@ void main() //create surface Surface surface = createSurface( normDepth, colorBuffer,matInfoBuffer, uvScene, eyePosWorld, wsEyeRay, cameraToWorld); - + if (getFlag(surface.matFlag, 2)) + { + OUT_col = surface.baseColor; + return; + } vec3 L = lightPosition - surface.P; float dist = length(L); vec3 lighting = vec3(0.0); diff --git a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/vectorLightP.glsl b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/vectorLightP.glsl index fd86f7b16..944d07367 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/vectorLightP.glsl +++ b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/gl/vectorLightP.glsl @@ -186,7 +186,11 @@ void main() //create surface Surface surface = createSurface( normDepth, colorBuffer, matInfoBuffer, uv0, eyePosWorld, wsEyeRay, cameraToWorld); - + if (getFlag(surface.matFlag, 2)) + { + OUT_col = surface.baseColor; + return; + } //create surface to light SurfaceToLight surfaceToLight = createSurfaceToLight(surface, -lightDirection); diff --git a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/pointLightP.hlsl b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/pointLightP.hlsl index 3541cd31a..339bc6619 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/pointLightP.hlsl +++ b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/pointLightP.hlsl @@ -146,7 +146,10 @@ float4 main( ConvexConnectP IN ) : SV_TARGET //create surface Surface surface = createSurface( normDepth, TORQUE_SAMPLER2D_MAKEARG(colorBuffer),TORQUE_SAMPLER2D_MAKEARG(matInfoBuffer), uvScene, eyePosWorld, wsEyeRay, cameraToWorld); - + if (getFlag(surface.matFlag, 2)) + { + return surface.baseColor; + } float3 L = lightPosition - surface.P; float dist = length(L); float3 lighting = 0.0.xxx; diff --git a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/reflectionProbeArrayP.hlsl b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/reflectionProbeArrayP.hlsl index e061d4471..4ec3df65d 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/reflectionProbeArrayP.hlsl +++ b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/reflectionProbeArrayP.hlsl @@ -50,7 +50,12 @@ float4 main(PFXVertToPix IN) : SV_TARGET //create surface Surface surface = createSurface(normDepth, TORQUE_SAMPLER2D_MAKEARG(colorBuffer),TORQUE_SAMPLER2D_MAKEARG(matInfoBuffer), IN.uv0.xy, eyePosWorld, IN.wsEyeRay, cameraToWorld); - + + if (getFlag(surface.matFlag, 2)) + { + return surface.baseColor; + } + #ifdef USE_SSAO_MASK float ssao = 1.0 - TORQUE_TEX2D( ssaoMask, viewportCoordToRenderTarget( IN.uv0.xy, rtParams7 ) ).r; surface.ao = min(surface.ao, ssao); diff --git a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/spotLightP.hlsl b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/spotLightP.hlsl index c5f262a99..a78ed019b 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/spotLightP.hlsl +++ b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/spotLightP.hlsl @@ -85,7 +85,10 @@ float4 main( ConvexConnectP IN ) : SV_TARGET //create surface Surface surface = createSurface( normDepth, TORQUE_SAMPLER2D_MAKEARG(colorBuffer),TORQUE_SAMPLER2D_MAKEARG(matInfoBuffer), uvScene, eyePosWorld, wsEyeRay, cameraToWorld); - + if (getFlag(surface.matFlag, 2)) + { + return surface.baseColor; + } float3 L = lightPosition - surface.P; float dist = length(L); float3 lighting = 0.0.xxx; diff --git a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/vectorLightP.hlsl b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/vectorLightP.hlsl index d3c31cb7e..77414a81a 100644 --- a/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/vectorLightP.hlsl +++ b/Templates/BaseGame/game/core/rendering/shaders/lighting/advanced/vectorLightP.hlsl @@ -176,7 +176,10 @@ float4 main(FarFrustumQuadConnectP IN) : SV_TARGET //create surface Surface surface = createSurface( normDepth, TORQUE_SAMPLER2D_MAKEARG(colorBuffer),TORQUE_SAMPLER2D_MAKEARG(matInfoBuffer), IN.uv0, eyePosWorld, IN.wsEyeRay, cameraToWorld); - + if (getFlag(surface.matFlag, 2)) + { + return surface.baseColor; + } //create surface to light SurfaceToLight surfaceToLight = createSurfaceToLight(surface, -lightDirection); diff --git a/Templates/BaseGame/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui b/Templates/BaseGame/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui index cadf58ad7..35acf46cd 100644 --- a/Templates/BaseGame/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui +++ b/Templates/BaseGame/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui @@ -3177,6 +3177,29 @@ $guiContent = new GuiControl(MaterialEditorGui,EditorGuiGroup) { useMouseEvents = "0"; useInactiveState = "0"; }; + new GuiCheckBoxCtrl() { + canSaveDynamicFields = "0"; + internalName = "ignoreLightingCheckbox"; + Enabled = "1"; + isContainer = "0"; + Profile = "ToolsGuiCheckBoxProfile"; + HorizSizing = "right"; + VertSizing = "bottom"; + position = "116 4"; + Extent = "60 16"; + MinExtent = "8 2"; + canSave = "1"; + Visible = "1"; + Command = "MaterialEditorGui.updateActiveMaterial(\"ignoreLighting[\" @ MaterialEditorGui.currentLayer @ \"]\",$ThisControl.getValue());"; + tooltipprofile = "ToolsGuiDefaultProfile"; + ToolTip = "Are we at all influenced by light?"; + hovertime = "1000"; + text = "ignoreLight"; + groupNum = "-1"; + buttonType = "ToggleButton"; + useMouseEvents = "0"; + useInactiveState = "0"; + }; }; new GuiContainer(){ // parallax profile = "ToolsGuiTransparentProfile"; diff --git a/Templates/BaseGame/game/tools/materialEditor/scripts/materialEditor.ed.tscript b/Templates/BaseGame/game/tools/materialEditor/scripts/materialEditor.ed.tscript index 4f073f7cf..50d404242 100644 --- a/Templates/BaseGame/game/tools/materialEditor/scripts/materialEditor.ed.tscript +++ b/Templates/BaseGame/game/tools/materialEditor/scripts/materialEditor.ed.tscript @@ -936,6 +936,7 @@ function MaterialEditorGui::guiSync( %this, %material ) MaterialEditorPropertiesWindow-->glowMulSlider.setValue((%material).glowMul[%layer]); MaterialEditorPropertiesWindow-->glowCheckbox.setValue((%material).glow[%layer]); MaterialEditorPropertiesWindow-->receiveShadowsCheckbox.setValue((%material).receiveShadows[%layer]); + MaterialEditorPropertiesWindow-->ignoreLightingCheckbox.setValue((%material).ignoreLighting[%layer]); MaterialEditorPropertiesWindow-->parallaxTextEdit.setText((%material).parallaxScale[%layer]); MaterialEditorPropertiesWindow-->parallaxSlider.setValue((%material).parallaxScale[%layer]);