Disable self-shadowing for now, as it's causing visual glitches

This commit is contained in:
Lwmte 2024-12-24 08:47:33 +01:00
parent 32f94c2f2a
commit 1118b2fb22
7 changed files with 19 additions and 9 deletions

View file

@ -256,11 +256,13 @@ namespace TEN::Renderer
_stInstancedStaticMeshBuffer.StaticMeshes[instanceID].NumLights = (int)lights.size() | lightTypeMask;
}
void Renderer::BindMoveableLights(std::vector<RendererLight*>& lights, int roomNumber, int prevRoomNumber, float fade)
void Renderer::BindMoveableLights(std::vector<RendererLight*>& lights, int roomNumber, int prevRoomNumber, float fade, bool shadow)
{
int lightTypeMask = 0;
constexpr int SHADOWABLE_MASK = (1 << 16);
int lightTypeMask = 0;
int numLights = 0;
for (int i = 0; i < lights.size(); i++)
{
float fadedCoeff = 1.0f;
@ -284,7 +286,7 @@ namespace TEN::Renderer
numLights++;
}
_stItem.NumLights = numLights | lightTypeMask;
_stItem.NumLights = numLights | lightTypeMask | (shadow ? SHADOWABLE_MASK : 0);
}
void Renderer::BindConstantBufferVS(ConstantBufferRegister constantBufferType, ID3D11Buffer** buffer)

View file

@ -410,7 +410,7 @@ namespace TEN::Renderer
void BindRoomLights(std::vector<RendererLight*>& lights);
void BindStaticLights(std::vector<RendererLight*>& lights);
void BindInstancedStaticLights(std::vector<RendererLight*>& lights, int instanceID);
void BindMoveableLights(std::vector<RendererLight*>& lights, int roomNumber, int prevRoomNumber, float fade);
void BindMoveableLights(std::vector<RendererLight*>& lights, int roomNumber, int prevRoomNumber, float fade, bool shadow);
void BindRenderTargetAsTexture(TextureRegister registerType, RenderTarget2D* target, SamplerStateRegister samplerType);
void BindConstantBufferVS(ConstantBufferRegister constantBufferType, ID3D11Buffer** buffer);
void BindConstantBufferPS(ConstantBufferRegister constantBufferType, ID3D11Buffer** buffer);

View file

@ -2390,7 +2390,8 @@ namespace TEN::Renderer
for (int k = 0; k < moveableObj.ObjectMeshes.size(); k++)
_stItem.BoneLightModes[k] = (int)moveableObj.ObjectMeshes[k]->LightMode;
BindMoveableLights(item->LightsToDraw, item->RoomNumber, item->PrevRoomNumber, item->LightFade);
bool acceptsShadows = moveableObj.ShadowType == ShadowMode::None;
BindMoveableLights(item->LightsToDraw, item->RoomNumber, item->PrevRoomNumber, item->LightFade, acceptsShadows);
_cbItem.UpdateData(_stItem, _context.Get());
for (int k = 0; k < moveableObj.ObjectMeshes.size(); k++)
@ -3606,7 +3607,8 @@ namespace TEN::Renderer
for (int k = 0; k < moveableObj.ObjectMeshes.size(); k++)
_stItem.BoneLightModes[k] = (int)moveableObj.ObjectMeshes[k]->LightMode;
BindMoveableLights(objectInfo->Item->LightsToDraw, objectInfo->Item->RoomNumber, objectInfo->Item->PrevRoomNumber, objectInfo->Item->LightFade);
bool acceptsShadows = moveableObj.ShadowType == ShadowMode::None;
BindMoveableLights(objectInfo->Item->LightsToDraw, objectInfo->Item->RoomNumber, objectInfo->Item->PrevRoomNumber, objectInfo->Item->LightFade, acceptsShadows);
_cbItem.UpdateData(_stItem, _context.Get());
BindTexture(

View file

@ -319,7 +319,9 @@ void TEN::Renderer::Renderer::DrawLara(RenderView& view, RendererPass rendererPa
{
_stItem.BoneLightModes[k] = (int)GetMesh(nativeItem->Model.MeshIndex[k])->LightMode;
}
BindMoveableLights(item->LightsToDraw, item->RoomNumber, item->PrevRoomNumber, item->LightFade);
bool acceptsShadows = laraObj.ShadowType == ShadowMode::None;
BindMoveableLights(item->LightsToDraw, item->RoomNumber, item->PrevRoomNumber, item->LightFade, acceptsShadows);
_cbItem.UpdateData(_stItem, _context.Get());
for (int k = 0; k < laraSkin.ObjectMeshes.size(); k++)

View file

@ -155,7 +155,9 @@ PixelShaderOutput PS(PixelShaderInput input)
input.FogBulbs.w) :
StaticLight(input.Color.xyz, tex.xyz, input.FogBulbs.w);
color = DoShadow(input.WorldPosition, normal, color, -0.5f);
float shadowable = step(0.5f, float((NumItemLights & SHADOWABLE_MASK) == SHADOWABLE_MASK));
float3 shadow = DoShadow(input.WorldPosition, normal, color, -0.5f);
color = lerp(color, shadow, shadowable);
output.Color = saturate(float4(color * occlusion, tex.w));
output.Color = DoFogBulbsForPixel(output.Color, float4(input.FogBulbs.xyz, 1.0f));

View file

@ -17,6 +17,8 @@
#define LT_MASK_SPOT (1 << (31 - LT_SPOT))
#define LT_MASK_SHADOW (1 << (31 - LT_SHADOW))
#define SHADOWABLE_MASK (1 << 16)
#define MAX_LIGHTS_PER_ROOM 48
#define MAX_LIGHTS_PER_ITEM 8
#define MAX_FOG_BULBS 32

View file

@ -2,7 +2,7 @@
#include "./Math.hlsli"
#include "./ShaderLight.hlsli"
#define SHADOW_INTENSITY (0.5f)
#define SHADOW_INTENSITY (0.6f)
#define SHADOW_BLUR_MIN (2.0f)
#define SHADOW_BLUR_MAX (8.0f)