mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-04-28 15:57:59 +03:00
Disable self-shadowing for now, as it's causing visual glitches
This commit is contained in:
parent
32f94c2f2a
commit
1118b2fb22
7 changed files with 19 additions and 9 deletions
|
@ -256,11 +256,13 @@ namespace TEN::Renderer
|
||||||
_stInstancedStaticMeshBuffer.StaticMeshes[instanceID].NumLights = (int)lights.size() | lightTypeMask;
|
_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;
|
int numLights = 0;
|
||||||
|
|
||||||
for (int i = 0; i < lights.size(); i++)
|
for (int i = 0; i < lights.size(); i++)
|
||||||
{
|
{
|
||||||
float fadedCoeff = 1.0f;
|
float fadedCoeff = 1.0f;
|
||||||
|
@ -284,7 +286,7 @@ namespace TEN::Renderer
|
||||||
numLights++;
|
numLights++;
|
||||||
}
|
}
|
||||||
|
|
||||||
_stItem.NumLights = numLights | lightTypeMask;
|
_stItem.NumLights = numLights | lightTypeMask | (shadow ? SHADOWABLE_MASK : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::BindConstantBufferVS(ConstantBufferRegister constantBufferType, ID3D11Buffer** buffer)
|
void Renderer::BindConstantBufferVS(ConstantBufferRegister constantBufferType, ID3D11Buffer** buffer)
|
||||||
|
|
|
@ -410,7 +410,7 @@ namespace TEN::Renderer
|
||||||
void BindRoomLights(std::vector<RendererLight*>& lights);
|
void BindRoomLights(std::vector<RendererLight*>& lights);
|
||||||
void BindStaticLights(std::vector<RendererLight*>& lights);
|
void BindStaticLights(std::vector<RendererLight*>& lights);
|
||||||
void BindInstancedStaticLights(std::vector<RendererLight*>& lights, int instanceID);
|
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 BindRenderTargetAsTexture(TextureRegister registerType, RenderTarget2D* target, SamplerStateRegister samplerType);
|
||||||
void BindConstantBufferVS(ConstantBufferRegister constantBufferType, ID3D11Buffer** buffer);
|
void BindConstantBufferVS(ConstantBufferRegister constantBufferType, ID3D11Buffer** buffer);
|
||||||
void BindConstantBufferPS(ConstantBufferRegister constantBufferType, ID3D11Buffer** buffer);
|
void BindConstantBufferPS(ConstantBufferRegister constantBufferType, ID3D11Buffer** buffer);
|
||||||
|
|
|
@ -2390,7 +2390,8 @@ namespace TEN::Renderer
|
||||||
for (int k = 0; k < moveableObj.ObjectMeshes.size(); k++)
|
for (int k = 0; k < moveableObj.ObjectMeshes.size(); k++)
|
||||||
_stItem.BoneLightModes[k] = (int)moveableObj.ObjectMeshes[k]->LightMode;
|
_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());
|
_cbItem.UpdateData(_stItem, _context.Get());
|
||||||
|
|
||||||
for (int k = 0; k < moveableObj.ObjectMeshes.size(); k++)
|
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++)
|
for (int k = 0; k < moveableObj.ObjectMeshes.size(); k++)
|
||||||
_stItem.BoneLightModes[k] = (int)moveableObj.ObjectMeshes[k]->LightMode;
|
_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());
|
_cbItem.UpdateData(_stItem, _context.Get());
|
||||||
|
|
||||||
BindTexture(
|
BindTexture(
|
||||||
|
|
|
@ -319,7 +319,9 @@ void TEN::Renderer::Renderer::DrawLara(RenderView& view, RendererPass rendererPa
|
||||||
{
|
{
|
||||||
_stItem.BoneLightModes[k] = (int)GetMesh(nativeItem->Model.MeshIndex[k])->LightMode;
|
_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());
|
_cbItem.UpdateData(_stItem, _context.Get());
|
||||||
|
|
||||||
for (int k = 0; k < laraSkin.ObjectMeshes.size(); k++)
|
for (int k = 0; k < laraSkin.ObjectMeshes.size(); k++)
|
||||||
|
|
|
@ -155,7 +155,9 @@ PixelShaderOutput PS(PixelShaderInput input)
|
||||||
input.FogBulbs.w) :
|
input.FogBulbs.w) :
|
||||||
StaticLight(input.Color.xyz, tex.xyz, 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 = saturate(float4(color * occlusion, tex.w));
|
||||||
output.Color = DoFogBulbsForPixel(output.Color, float4(input.FogBulbs.xyz, 1.0f));
|
output.Color = DoFogBulbsForPixel(output.Color, float4(input.FogBulbs.xyz, 1.0f));
|
||||||
|
|
|
@ -17,6 +17,8 @@
|
||||||
#define LT_MASK_SPOT (1 << (31 - LT_SPOT))
|
#define LT_MASK_SPOT (1 << (31 - LT_SPOT))
|
||||||
#define LT_MASK_SHADOW (1 << (31 - LT_SHADOW))
|
#define LT_MASK_SHADOW (1 << (31 - LT_SHADOW))
|
||||||
|
|
||||||
|
#define SHADOWABLE_MASK (1 << 16)
|
||||||
|
|
||||||
#define MAX_LIGHTS_PER_ROOM 48
|
#define MAX_LIGHTS_PER_ROOM 48
|
||||||
#define MAX_LIGHTS_PER_ITEM 8
|
#define MAX_LIGHTS_PER_ITEM 8
|
||||||
#define MAX_FOG_BULBS 32
|
#define MAX_FOG_BULBS 32
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#include "./Math.hlsli"
|
#include "./Math.hlsli"
|
||||||
#include "./ShaderLight.hlsli"
|
#include "./ShaderLight.hlsli"
|
||||||
|
|
||||||
#define SHADOW_INTENSITY (0.5f)
|
#define SHADOW_INTENSITY (0.6f)
|
||||||
#define SHADOW_BLUR_MIN (2.0f)
|
#define SHADOW_BLUR_MIN (2.0f)
|
||||||
#define SHADOW_BLUR_MAX (8.0f)
|
#define SHADOW_BLUR_MAX (8.0f)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue