mirror of
https://github.com/celisej567/Fake-CSM-Mapbase.git
synced 2026-09-21 20:09:02 +03:00
Added Third CSM Level
-Added csm_third_intensity ConVar -Added enablethird Hammer option -Changed csm_current_distance ConVar -Added csm_third_fov ConVar -Added csm_nearz and csm_farz ConVars -Entity-helpers was renamed -Now r_farz will be 210000 all the time, so fog's one will not work
This commit is contained in:
@@ -18,23 +18,16 @@
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
#include "tier0/memdbgon.h"
|
||||
|
||||
//ConVar csm_slopescaledepthbias_shadowmap("csm_slopescaledepthbias_shadowmap", "0.00005");
|
||||
//ConVar csm_depthbias_shadowmap("csm_depthbias_shadowmap", "4");
|
||||
|
||||
static ConVar scissor("r_flashlightscissor", "0");
|
||||
ConVar csm_enable("csm_enable", "1");
|
||||
//ConVarRef csm_second_intensity("csm_second_intensity");
|
||||
ConVar csm_intensity("csm_intensity", "1000");
|
||||
|
||||
#ifdef MAPBASE
|
||||
//static ConVar csm_ortho("csm_ortho","0", 0, "Turn light into ortho. Im lazy right now to make this works fine");
|
||||
//ConVar csm_ortho_nearz("csm_ortho_nearz", "512");
|
||||
//ConVar csm_ortho_left("csm_ortho_left", "-1000");
|
||||
//ConVar csm_ortho_top("csm_ortho_top", "-1000");
|
||||
//ConVar csm_ortho_bottom("csm_ortho_bottom", "1000");
|
||||
//ConVar csm_ortho_right("csm_ortho_right", "1000");
|
||||
//ConVar csm_test_color_interpolation("csm_test_color_interpolation","0"); //<2F> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#endif
|
||||
//intensity
|
||||
ConVar csm_intensity("csm_intensity", "200");
|
||||
ConVar csm_second_intensity("csm_second_intensity", "200");
|
||||
ConVar csm_third_intensity("csm_third_intensity", "200");
|
||||
|
||||
|
||||
ConVar csm_filter("csm_filter", "1");
|
||||
ConVar csm_enable("csm_enable", "1");
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: main point for change angle of the light
|
||||
@@ -70,10 +63,9 @@ void C_LightOrigin::Simulate()
|
||||
{
|
||||
Update();
|
||||
BaseClass::Simulate();
|
||||
ConVarRef("r_farz").SetValue("210000");
|
||||
}
|
||||
|
||||
ConVar bebra("csm_filter", "1"); //if you have r_flashlightdepthres 4096 then better to change this value to 0.5
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: main csm code
|
||||
@@ -188,7 +180,7 @@ void C_EnvCascadeLight::UpdateLight( bool bForceUpdate )
|
||||
|
||||
Vector vForward, vRight, vUp, vPos = GetAbsOrigin();
|
||||
FlashlightState_t state;
|
||||
state.m_flShadowFilterSize = bebra.GetFloat();
|
||||
state.m_flShadowFilterSize = csm_filter.GetFloat();
|
||||
|
||||
|
||||
if (m_hTargetEntity != NULL)
|
||||
@@ -370,9 +362,6 @@ void C_EnvCascadeLight::UpdateLight( bool bForceUpdate )
|
||||
|
||||
g_pClientShadowMgr->UpdateProjectedTexture(m_LightHandle, true);
|
||||
|
||||
//mat_slopescaledepthbias_shadowmap.SetValue("4");
|
||||
//mat_depthbias_shadowmap.SetValue("0.00001");
|
||||
scissor.SetValue("0");
|
||||
|
||||
}
|
||||
|
||||
@@ -458,7 +447,6 @@ END_RECV_TABLE()
|
||||
|
||||
C_EnvCascadeLightSecond::C_EnvCascadeLightSecond(void)
|
||||
{
|
||||
|
||||
m_LightHandle = CLIENTSHADOW_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
@@ -498,7 +486,274 @@ void C_EnvCascadeLightSecond::UpdateLight(bool bForceUpdate)
|
||||
|
||||
Vector vForward, vRight, vUp, vPos = GetAbsOrigin();
|
||||
FlashlightState_t state;
|
||||
state.m_flShadowFilterSize = bebra.GetFloat();
|
||||
state.m_flShadowFilterSize = csm_filter.GetFloat();
|
||||
|
||||
if (m_hTargetEntity != NULL)
|
||||
{
|
||||
if (m_bCameraSpace)
|
||||
{
|
||||
const QAngle& angles = GetLocalAngles();
|
||||
|
||||
C_BasePlayer* pPlayer = C_BasePlayer::GetLocalPlayer();
|
||||
if (pPlayer)
|
||||
{
|
||||
const QAngle playerAngles = pPlayer->GetAbsAngles();
|
||||
|
||||
Vector vPlayerForward, vPlayerRight, vPlayerUp;
|
||||
AngleVectors(playerAngles, &vPlayerForward, &vPlayerRight, &vPlayerUp);
|
||||
|
||||
matrix3x4_t mRotMatrix;
|
||||
AngleMatrix(angles, mRotMatrix);
|
||||
|
||||
VectorITransform(vPlayerForward, mRotMatrix, vForward);
|
||||
VectorITransform(vPlayerRight, mRotMatrix, vRight);
|
||||
VectorITransform(vPlayerUp, mRotMatrix, vUp);
|
||||
|
||||
float dist = (m_hTargetEntity->GetAbsOrigin() - GetAbsOrigin()).Length();
|
||||
vPos = m_hTargetEntity->GetAbsOrigin() - vForward * dist;
|
||||
|
||||
VectorNormalize(vForward);
|
||||
VectorNormalize(vRight);
|
||||
VectorNormalize(vUp);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
vForward = m_hTargetEntity->GetAbsOrigin() - GetAbsOrigin();
|
||||
VectorNormalize(vForward);
|
||||
Assert(0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
AngleVectors(GetAbsAngles(), &vForward, &vRight, &vUp);
|
||||
}
|
||||
|
||||
Vector vLinearFloatLightColor(m_LightColor.r, m_LightColor.g, m_LightColor.b);
|
||||
float flLinearFloatLightAlpha = m_LightColor.a;
|
||||
|
||||
#ifdef MAPBASE
|
||||
if (m_CurrentLinearFloatLightColor != vLinearFloatLightColor || m_flCurrentLinearFloatLightAlpha != flLinearFloatLightAlpha)
|
||||
{
|
||||
if (m_flColorTransitionTime != 0.0f)
|
||||
{
|
||||
float flColorTransitionSpeed = gpGlobals->frametime * m_flColorTransitionTime * 255.0f;
|
||||
|
||||
m_CurrentLinearFloatLightColor.x = Approach(vLinearFloatLightColor.x, m_CurrentLinearFloatLightColor.x, flColorTransitionSpeed);
|
||||
m_CurrentLinearFloatLightColor.y = Approach(vLinearFloatLightColor.y, m_CurrentLinearFloatLightColor.y, flColorTransitionSpeed);
|
||||
m_CurrentLinearFloatLightColor.z = Approach(vLinearFloatLightColor.z, m_CurrentLinearFloatLightColor.z, flColorTransitionSpeed);
|
||||
m_flCurrentLinearFloatLightAlpha = Approach(flLinearFloatLightAlpha, m_flCurrentLinearFloatLightAlpha, flColorTransitionSpeed);
|
||||
//m_flCurrentBrightnessScale = Approach(m_flBrightnessScale, m_flCurrentBrightnessScale, flColorTransitionSpeed);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Just do it instantly
|
||||
m_CurrentLinearFloatLightColor.x = vLinearFloatLightColor.x;
|
||||
m_CurrentLinearFloatLightColor.y = vLinearFloatLightColor.y;
|
||||
m_CurrentLinearFloatLightColor.z = vLinearFloatLightColor.z;
|
||||
m_flCurrentLinearFloatLightAlpha = flLinearFloatLightAlpha;
|
||||
//m_flCurrentBrightnessScale = m_flBrightnessScale;
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (m_CurrentLinearFloatLightColor != vLinearFloatLightColor || m_flCurrentLinearFloatLightAlpha != flLinearFloatLightAlpha)
|
||||
{
|
||||
float flColorTransitionSpeed = gpGlobals->frametime * m_flColorTransitionTime * 255.0f;
|
||||
|
||||
m_CurrentLinearFloatLightColor.x = Approach(vLinearFloatLightColor.x, m_CurrentLinearFloatLightColor.x, flColorTransitionSpeed);
|
||||
m_CurrentLinearFloatLightColor.y = Approach(vLinearFloatLightColor.y, m_CurrentLinearFloatLightColor.y, flColorTransitionSpeed);
|
||||
m_CurrentLinearFloatLightColor.z = Approach(vLinearFloatLightColor.z, m_CurrentLinearFloatLightColor.z, flColorTransitionSpeed);
|
||||
m_flCurrentLinearFloatLightAlpha = Approach(flLinearFloatLightAlpha, m_flCurrentLinearFloatLightAlpha, flColorTransitionSpeed);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
state.m_fHorizontalFOVDegrees = m_flLightFOV;
|
||||
state.m_fVerticalFOVDegrees = m_flLightFOV;
|
||||
|
||||
state.m_vecLightOrigin = vPos;
|
||||
BasisToQuaternion(vForward, vRight, vUp, state.m_quatOrientation);
|
||||
|
||||
state.m_fQuadraticAtten = 0.0;
|
||||
state.m_fLinearAtten = 100;
|
||||
state.m_fConstantAtten = 0.0f;
|
||||
//state.m_Color[0] = m_LinearFloatLightColor.x;
|
||||
//state.m_Color[1] = m_LinearFloatLightColor.y;
|
||||
//state.m_Color[2] = m_LinearFloatLightColor.z;
|
||||
|
||||
#ifdef MAPBASE
|
||||
float flAlpha = m_flCurrentLinearFloatLightAlpha * (1.0f / 255.0f);
|
||||
state.m_Color[0] = (m_CurrentLinearFloatLightColor.x * (1.0f / 255.0f) * flAlpha) * csm_second_intensity.GetFloat();
|
||||
state.m_Color[1] = (m_CurrentLinearFloatLightColor.y * (1.0f / 255.0f) * flAlpha) * csm_second_intensity.GetFloat();
|
||||
state.m_Color[2] = (m_CurrentLinearFloatLightColor.z * (1.0f / 255.0f) * flAlpha) * csm_second_intensity.GetFloat();
|
||||
#else
|
||||
state.m_Color[0] = m_CurrentLinearFloatLightColor.x * (1.0f / 255.0f) * csm_second_intensity.GetFloat();
|
||||
state.m_Color[1] = m_CurrentLinearFloatLightColor.y * (1.0f / 255.0f) * csm_second_intensity.GetFloat();
|
||||
state.m_Color[2] = m_CurrentLinearFloatLightColor.z * (1.0f / 255.0f) * csm_second_intensity.GetFloat();
|
||||
#endif
|
||||
|
||||
state.m_Color[3] = 0.0f; // fixme: need to make ambient work m_flAmbient;
|
||||
state.m_NearZ = m_flNearZ;
|
||||
state.m_FarZ = m_flFarZ;
|
||||
state.m_flShadowSlopeScaleDepthBias = ConVarRef("mat_slopescaledepthbias_shadowmap").GetFloat();//csm_slopescaledepthbias_shadowmap.GetFloat();
|
||||
state.m_flShadowDepthBias = ConVarRef("mat_depthbias_shadowmap").GetFloat();//csm_depthbias_shadowmap.GetFloat();
|
||||
state.m_bEnableShadows = m_bEnableShadows;
|
||||
state.m_pSpotlightTexture = materials->FindTexture(m_SpotlightTextureName, TEXTURE_GROUP_OTHER, false);
|
||||
state.m_nSpotlightTextureFrame = m_nSpotlightTextureFrame;
|
||||
|
||||
state.m_nShadowQuality = m_nShadowQuality; // Allow entity to affect shadow quality
|
||||
|
||||
|
||||
if (m_LightHandle == CLIENTSHADOW_INVALID_HANDLE)
|
||||
{
|
||||
m_LightHandle = g_pClientShadowMgr->CreateFlashlight(state);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_hTargetEntity != NULL || bForceUpdate == true)
|
||||
{
|
||||
g_pClientShadowMgr->UpdateFlashlightState(m_LightHandle, state);
|
||||
}
|
||||
}
|
||||
|
||||
if (m_bLightOnlyTarget)
|
||||
{
|
||||
g_pClientShadowMgr->SetFlashlightTarget(m_LightHandle, m_hTargetEntity);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_pClientShadowMgr->SetFlashlightTarget(m_LightHandle, NULL);
|
||||
}
|
||||
|
||||
g_pClientShadowMgr->SetFlashlightLightWorld(m_LightHandle, m_bLightWorld);
|
||||
|
||||
g_pClientShadowMgr->UpdateProjectedTexture(m_LightHandle, true);
|
||||
|
||||
scissor.SetValue("0");
|
||||
}
|
||||
|
||||
|
||||
void C_EnvCascadeLightSecond::Simulate(void)
|
||||
{
|
||||
m_bState = csm_enable.GetBool();
|
||||
UpdateLight(true);
|
||||
BaseClass::Simulate();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: second csm
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
class C_EnvCascadeLightThird : public C_BaseEntity
|
||||
{
|
||||
DECLARE_CLASS(C_EnvCascadeLightThird, C_BaseEntity);
|
||||
public:
|
||||
DECLARE_CLIENTCLASS();
|
||||
|
||||
virtual void OnDataChanged(DataUpdateType_t updateType);
|
||||
void ShutDownLightHandle(void);
|
||||
|
||||
virtual void Simulate();
|
||||
|
||||
void UpdateLight(bool bForceUpdate);
|
||||
void updatePos();
|
||||
|
||||
C_EnvCascadeLightThird();
|
||||
~C_EnvCascadeLightThird();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
ClientShadowHandle_t m_LightHandle;
|
||||
|
||||
color32 m_LightColor;
|
||||
|
||||
#ifdef MAPBASE
|
||||
float m_flBrightnessScale;
|
||||
float m_flCurrentBrightnessScale;
|
||||
#endif
|
||||
Vector m_CurrentLinearFloatLightColor;
|
||||
float m_flCurrentLinearFloatLightAlpha;
|
||||
float m_flColorTransitionTime;
|
||||
|
||||
EHANDLE m_hTargetEntity;
|
||||
CBaseEntity* pEntity = NULL;
|
||||
bool firstUpdate = true;
|
||||
bool m_bState;
|
||||
float m_flLightFOV;
|
||||
bool m_bEnableShadows;
|
||||
bool m_bLightOnlyTarget;
|
||||
bool m_bLightWorld;
|
||||
bool m_bCameraSpace;
|
||||
Vector m_LinearFloatLightColor;
|
||||
float m_flAmbient;
|
||||
float m_flNearZ;
|
||||
float m_flFarZ;
|
||||
char m_SpotlightTextureName[MAX_PATH];
|
||||
int m_nSpotlightTextureFrame;
|
||||
int m_nShadowQuality;
|
||||
};
|
||||
|
||||
IMPLEMENT_CLIENTCLASS_DT(C_EnvCascadeLightThird, DT_EnvCascadeLightThird, CEnvCascadeLightThird)
|
||||
RecvPropInt(RECVINFO(m_LightColor), 0, RecvProxy_IntToColor32),
|
||||
RecvPropEHandle(RECVINFO(m_hTargetEntity)),
|
||||
RecvPropBool(RECVINFO(m_bState)),
|
||||
RecvPropFloat(RECVINFO(m_flLightFOV)),
|
||||
RecvPropBool(RECVINFO(m_bEnableShadows)),
|
||||
RecvPropBool(RECVINFO(m_bLightOnlyTarget)),
|
||||
RecvPropBool(RECVINFO(m_bLightWorld)),
|
||||
RecvPropBool(RECVINFO(m_bCameraSpace)),
|
||||
RecvPropVector(RECVINFO(m_LinearFloatLightColor)),
|
||||
RecvPropFloat(RECVINFO(m_flAmbient)),
|
||||
RecvPropString(RECVINFO(m_SpotlightTextureName)),
|
||||
RecvPropInt(RECVINFO(m_nSpotlightTextureFrame)),
|
||||
RecvPropFloat(RECVINFO(m_flNearZ)),
|
||||
RecvPropFloat(RECVINFO(m_flFarZ)),
|
||||
RecvPropInt(RECVINFO(m_nShadowQuality))
|
||||
END_RECV_TABLE()
|
||||
|
||||
C_EnvCascadeLightThird::C_EnvCascadeLightThird(void)
|
||||
{
|
||||
m_LightHandle = CLIENTSHADOW_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
|
||||
C_EnvCascadeLightThird::~C_EnvCascadeLightThird(void)
|
||||
{
|
||||
ShutDownLightHandle();
|
||||
}
|
||||
|
||||
void C_EnvCascadeLightThird::ShutDownLightHandle(void)
|
||||
{
|
||||
if (m_LightHandle != CLIENTSHADOW_INVALID_HANDLE)
|
||||
{
|
||||
g_pClientShadowMgr->DestroyFlashlight(m_LightHandle);
|
||||
m_LightHandle = CLIENTSHADOW_INVALID_HANDLE;
|
||||
}
|
||||
}
|
||||
|
||||
void C_EnvCascadeLightThird::OnDataChanged(DataUpdateType_t updateType)
|
||||
{
|
||||
UpdateLight(true);
|
||||
BaseClass::OnDataChanged(updateType);
|
||||
}
|
||||
|
||||
void C_EnvCascadeLightThird::UpdateLight(bool bForceUpdate)
|
||||
{
|
||||
|
||||
if (m_bState == false)
|
||||
{
|
||||
|
||||
if (m_LightHandle != CLIENTSHADOW_INVALID_HANDLE)
|
||||
ShutDownLightHandle();
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
Vector vForward, vRight, vUp, vPos = GetAbsOrigin();
|
||||
FlashlightState_t state;
|
||||
state.m_flShadowFilterSize = csm_filter.GetFloat();
|
||||
|
||||
if (m_hTargetEntity != NULL)
|
||||
{
|
||||
@@ -596,18 +851,16 @@ void C_EnvCascadeLightSecond::UpdateLight(bool bForceUpdate)
|
||||
|
||||
#ifdef MAPBASE
|
||||
float flAlpha = m_flCurrentLinearFloatLightAlpha * (1.0f / 255.0f);
|
||||
state.m_Color[0] = (m_CurrentLinearFloatLightColor.x * (1.0f / 255.0f) * flAlpha) * ConVarRef("csm_second_intensity").GetFloat();
|
||||
state.m_Color[1] = (m_CurrentLinearFloatLightColor.y * (1.0f / 255.0f) * flAlpha) * ConVarRef("csm_second_intensity").GetFloat();
|
||||
state.m_Color[2] = (m_CurrentLinearFloatLightColor.z * (1.0f / 255.0f) * flAlpha) * ConVarRef("csm_second_intensity").GetFloat();
|
||||
state.m_Color[0] = (m_CurrentLinearFloatLightColor.x * (1.0f / 255.0f) * flAlpha) * csm_third_intensity.GetFloat();
|
||||
state.m_Color[1] = (m_CurrentLinearFloatLightColor.y * (1.0f / 255.0f) * flAlpha) * csm_third_intensity.GetFloat();
|
||||
state.m_Color[2] = (m_CurrentLinearFloatLightColor.z * (1.0f / 255.0f) * flAlpha) * csm_third_intensity.GetFloat();
|
||||
#else
|
||||
state.m_Color[0] = m_CurrentLinearFloatLightColor.x * (1.0f / 255.0f) * ConVarRef("csm_second_intensity").GetFloat();
|
||||
state.m_Color[1] = m_CurrentLinearFloatLightColor.y * (1.0f / 255.0f) * ConVarRef("csm_second_intensity").GetFloat();
|
||||
state.m_Color[2] = m_CurrentLinearFloatLightColor.z * (1.0f / 255.0f) * ConVarRef("csm_second_intensity").GetFloat();
|
||||
state.m_Color[0] = m_CurrentLinearFloatLightColor.x * (1.0f / 255.0f) * csm_third_intensity.GetFloat();
|
||||
state.m_Color[1] = m_CurrentLinearFloatLightColor.y * (1.0f / 255.0f) * csm_third_intensity.GetFloat();
|
||||
state.m_Color[2] = m_CurrentLinearFloatLightColor.z * (1.0f / 255.0f) * csm_third_intensity.GetFloat();
|
||||
#endif
|
||||
|
||||
state.m_Color[3] = 0.0f; // fixme: need to make ambient work m_flAmbient;
|
||||
m_flNearZ = 5000;
|
||||
m_flFarZ = 16000;
|
||||
state.m_NearZ = m_flNearZ;
|
||||
state.m_FarZ = m_flFarZ;
|
||||
state.m_flShadowSlopeScaleDepthBias = ConVarRef("mat_slopescaledepthbias_shadowmap").GetFloat();//csm_slopescaledepthbias_shadowmap.GetFloat();
|
||||
@@ -617,25 +870,6 @@ void C_EnvCascadeLightSecond::UpdateLight(bool bForceUpdate)
|
||||
state.m_nSpotlightTextureFrame = m_nSpotlightTextureFrame;
|
||||
|
||||
state.m_nShadowQuality = m_nShadowQuality; // Allow entity to affect shadow quality
|
||||
|
||||
#ifdef MAPBASE
|
||||
/*
|
||||
state.m_bOrtho = csm_ortho.GetBool();
|
||||
if(state.m_bOrtho)
|
||||
{
|
||||
float flOrthoSize = 1000.0f;
|
||||
|
||||
state.m_fOrthoLeft = -flOrthoSize;
|
||||
state.m_fOrthoTop = -flOrthoSize;
|
||||
state.m_fOrthoRight = flOrthoSize;
|
||||
state.m_fOrthoBottom = flOrthoSize;
|
||||
|
||||
state.m_fLinearAtten = ConVarRef("csm_current_distance").GetInt() * 2;
|
||||
state.m_FarZAtten = ConVarRef("csm_current_distance").GetInt() * 2;
|
||||
}
|
||||
*/
|
||||
#endif
|
||||
|
||||
|
||||
if (m_LightHandle == CLIENTSHADOW_INVALID_HANDLE)
|
||||
{
|
||||
@@ -673,13 +907,11 @@ void C_EnvCascadeLightSecond::UpdateLight(bool bForceUpdate)
|
||||
|
||||
g_pClientShadowMgr->UpdateProjectedTexture(m_LightHandle, true);
|
||||
|
||||
m_flLightFOV = ConVarRef("csm_second_fov").GetFloat();
|
||||
|
||||
scissor.SetValue("0");
|
||||
}
|
||||
|
||||
|
||||
void C_EnvCascadeLightSecond::Simulate(void)
|
||||
void C_EnvCascadeLightThird::Simulate(void)
|
||||
{
|
||||
m_bState = csm_enable.GetBool();
|
||||
UpdateLight(true);
|
||||
|
||||
@@ -96,10 +96,6 @@
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
#include "tier0/memdbgon.h"
|
||||
|
||||
|
||||
const char* maxprojlights = CommandLine()->ParmValue("-ptmax", "10");
|
||||
ConVar pr_max("pr_max", maxprojlights, 0, "Changes maximum of enabled env_projectedtexture and everything related to it at one time.");
|
||||
|
||||
static ConVar r_flashlightdrawfrustum( "r_flashlightdrawfrustum", "0" );
|
||||
static ConVar r_flashlightmodels( "r_flashlightmodels", "1" );
|
||||
static ConVar r_shadowrendertotexture( "r_shadowrendertotexture", "0" );
|
||||
@@ -111,14 +107,16 @@ static ConVar r_shadow_mincastintensity( "r_shadow_mincastintensity", "0.3", FCV
|
||||
#endif
|
||||
static ConVar r_flashlight_version2( "r_flashlight_version2", "0", FCVAR_CHEAT | FCVAR_DEVELOPMENTONLY );
|
||||
|
||||
ConVar r_flashlightdepthtexture( "r_flashlightdepthtexture", "1" );
|
||||
ConVar r_flashlightdepthtexture( "r_flashlightdepthtexture", "0" );
|
||||
|
||||
#if defined( _X360 )
|
||||
ConVar r_flashlightdepthres( "r_flashlightdepthres", "512" );
|
||||
#else
|
||||
const char* projlightres = CommandLine()->ParmValue("-ptr", "2048"); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> env_projectedtexture
|
||||
|
||||
ConVar r_flashlightdepthres("r_flashlightdepthres", projlightres, 0, "Changes resolution of env_projectedtexture and everything related to it.");
|
||||
#ifdef MAPBASE
|
||||
ConVar r_flashlightdepthres( "r_flashlightdepthres", "2048" );
|
||||
#else
|
||||
ConVar r_flashlightdepthres( "r_flashlightdepthres", "1024" );
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef ASW_PROJECTED_TEXTURES
|
||||
@@ -127,6 +125,11 @@ ConVar r_threaded_client_shadow_manager( "r_threaded_client_shadow_manager", "1"
|
||||
ConVar r_threaded_client_shadow_manager( "r_threaded_client_shadow_manager", "0" );
|
||||
#endif
|
||||
|
||||
#ifdef MAPBASE
|
||||
ConVarRef mat_slopescaledepthbias_shadowmap( "mat_slopescaledepthbias_shadowmap" );
|
||||
ConVarRef mat_depthbias_shadowmap( "mat_depthbias_shadowmap" );
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma warning( disable: 4701 )
|
||||
#endif
|
||||
@@ -1396,7 +1399,14 @@ bool CClientShadowMgr::Init()
|
||||
|
||||
SetShadowBlobbyCutoffArea( 0.005 );
|
||||
|
||||
m_nMaxDepthTextureShadows = pr_max.GetInt();
|
||||
#ifndef MAPBASE
|
||||
bool bTools = CommandLine()->CheckParm( "-tools" ) != NULL;
|
||||
m_nMaxDepthTextureShadows = bTools ? 4 : 1; // Just one shadow depth texture in games, more in tools
|
||||
#else
|
||||
// 5 lets mappers use up to 4 shadow-casting projected textures, which is better than 3.
|
||||
int iNumShadows = CommandLine()->ParmValue( "-numshadowtextures", 5 );
|
||||
m_nMaxDepthTextureShadows = iNumShadows;
|
||||
#endif
|
||||
|
||||
bool bLowEnd = ( g_pMaterialSystemHardwareConfig->GetDXSupportLevel() < 80 );
|
||||
|
||||
@@ -1419,6 +1429,15 @@ bool CClientShadowMgr::Init()
|
||||
|
||||
materials->AddRestoreFunc( ShadowRestoreFunc );
|
||||
|
||||
#ifdef MAPBASE
|
||||
// These need to be referenced here since the cvars don't exist in the initial declaration
|
||||
mat_slopescaledepthbias_shadowmap = ConVarRef( "mat_slopescaledepthbias_shadowmap" );
|
||||
mat_depthbias_shadowmap = ConVarRef( "mat_depthbias_shadowmap" );
|
||||
|
||||
mat_slopescaledepthbias_shadowmap.SetValue( "16" ); // Would do something like 2 here, but it causes citizens to look weird under flashlights
|
||||
mat_depthbias_shadowmap.SetValue( "0.00005" );
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2319,25 +2338,20 @@ void CClientShadowMgr::BuildWorldToShadowMatrix( VMatrix& matWorldToShadow, cons
|
||||
matWorldToShadow[3][3] = 1.0f;
|
||||
}
|
||||
|
||||
|
||||
void CClientShadowMgr::BuildPerspectiveWorldToFlashlightMatrix( VMatrix& matWorldToShadow, const FlashlightState_t &flashlightState )
|
||||
{
|
||||
VPROF_BUDGET( "CClientShadowMgr::BuildPerspectiveWorldToFlashlightMatrix", VPROF_BUDGETGROUP_SHADOW_DEPTH_TEXTURING );
|
||||
|
||||
// Buildworld to shadow matrix, then perspective projection and concatenate
|
||||
VMatrix matWorldToShadowView, matPerspective, addW, scaleHalf;
|
||||
|
||||
BuildWorldToShadowMatrix(matWorldToShadowView, flashlightState.m_vecLightOrigin,
|
||||
flashlightState.m_quatOrientation);
|
||||
|
||||
MatrixBuildPerspective(matPerspective, flashlightState.m_fHorizontalFOVDegrees,
|
||||
flashlightState.m_fVerticalFOVDegrees,
|
||||
flashlightState.m_NearZ, flashlightState.m_FarZ);
|
||||
|
||||
|
||||
MatrixMultiply(matPerspective, matWorldToShadowView, matWorldToShadow);
|
||||
VMatrix matWorldToShadowView, matPerspective;
|
||||
BuildWorldToShadowMatrix( matWorldToShadowView, flashlightState.m_vecLightOrigin,
|
||||
flashlightState.m_quatOrientation );
|
||||
|
||||
MatrixBuildPerspective( matPerspective, flashlightState.m_fHorizontalFOVDegrees,
|
||||
flashlightState.m_fVerticalFOVDegrees,
|
||||
flashlightState.m_NearZ, flashlightState.m_FarZ );
|
||||
|
||||
MatrixMultiply( matPerspective, matWorldToShadowView, matWorldToShadow );
|
||||
}
|
||||
|
||||
#ifdef ASW_PROJECTED_TEXTURES
|
||||
@@ -4470,13 +4484,18 @@ void CClientShadowMgr::ComputeShadowDepthTextures( const CViewSetup &viewSetup )
|
||||
}
|
||||
|
||||
CViewSetup shadowView;
|
||||
#ifndef MAPBASE
|
||||
shadowView.m_flAspectRatio = 1.0f;
|
||||
#endif
|
||||
shadowView.x = shadowView.y = 0;
|
||||
shadowView.width = shadowDepthTexture->GetActualWidth();
|
||||
shadowView.height = shadowDepthTexture->GetActualHeight();
|
||||
#ifndef ASW_PROJECTED_TEXTURES
|
||||
shadowView.m_bOrtho = false;
|
||||
shadowView.m_bDoBloomAndToneMapping = false;
|
||||
#ifdef MAPBASE
|
||||
shadowView.m_flAspectRatio = (flashlightState.m_fHorizontalFOVDegrees / flashlightState.m_fVerticalFOVDegrees);
|
||||
#endif // MAPBASE
|
||||
#endif
|
||||
|
||||
// Copy flashlight parameters
|
||||
@@ -4484,6 +4503,10 @@ void CClientShadowMgr::ComputeShadowDepthTextures( const CViewSetup &viewSetup )
|
||||
if ( !flashlightState.m_bOrtho )
|
||||
{
|
||||
shadowView.m_bOrtho = false;
|
||||
|
||||
#ifdef MAPBASE
|
||||
shadowView.m_flAspectRatio = (flashlightState.m_fHorizontalFOVDegrees / flashlightState.m_fVerticalFOVDegrees);
|
||||
#endif // MAPBASE
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -4492,6 +4515,10 @@ void CClientShadowMgr::ComputeShadowDepthTextures( const CViewSetup &viewSetup )
|
||||
shadowView.m_OrthoTop = flashlightState.m_fOrthoTop;
|
||||
shadowView.m_OrthoRight = flashlightState.m_fOrthoRight;
|
||||
shadowView.m_OrthoBottom = flashlightState.m_fOrthoBottom;
|
||||
|
||||
#ifdef MAPBASE
|
||||
shadowView.m_flAspectRatio = 1.0f;
|
||||
#endif
|
||||
}
|
||||
|
||||
shadowView.m_bDoBloomAndToneMapping = false;
|
||||
|
||||
Reference in New Issue
Block a user