Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Thermals V3 #776

Merged
merged 2 commits into from
Dec 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion mp/src/game/client/neo/c_neo_player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -679,7 +679,7 @@ int C_NEO_Player::DrawModel(int flags)

else if (inThermalVision && !IsCloaked())
{
IMaterial* pass = materials->FindMaterial("dev/thermal_third", TEXTURE_GROUP_MODEL);
IMaterial* pass = materials->FindMaterial("dev/thermal_model", TEXTURE_GROUP_MODEL);
modelrender->ForcedMaterialOverride(pass);
ret |= BaseClass::DrawModel(flags);
modelrender->ForcedMaterialOverride(nullptr);
Expand Down
3 changes: 2 additions & 1 deletion mp/src/game/server/neo/neo_model_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -455,7 +455,8 @@ void CNEOModelManager::Precache( void ) const
//PrecacheMaterial("water/ntwater_ivy");

PrecacheMaterial("dev/motion_third.vmt");
PrecacheMaterial("dev/thermal_third.vmt");
PrecacheMaterial("dev/thermal_model.vmt");
PrecacheMaterial("dev/thermal_view_model.vmt");
}

static inline int GetTeamArrOffset(int iTeam)
Expand Down
2 changes: 1 addition & 1 deletion mp/src/game/shared/neo/neo_predicted_viewmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,7 @@ int CNEOPredictedViewModel::DrawModel(int flags)
}
if (pPlayer->GetClass() == NEO_CLASS_SUPPORT && pPlayer->IsInVision())
{
IMaterial* pass = materials->FindMaterial("dev/thermal_third", TEXTURE_GROUP_MODEL);
IMaterial* pass = materials->FindMaterial("dev/thermal_view_model", TEXTURE_GROUP_MODEL);
Assert(pass && !pass->IsErrorMaterial());

if (pass && !pass->IsErrorMaterial())
Expand Down
4 changes: 2 additions & 2 deletions mp/src/game/shared/neo/weapons/weapon_neobasecombatweapon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1110,7 +1110,7 @@ int CNEOBaseCombatWeapon::DrawModel(int flags)

else if (inThermalVision && !pOwner->IsCloaked())
{
IMaterial* pass = materials->FindMaterial("dev/thermal_third", TEXTURE_GROUP_MODEL);
IMaterial* pass = materials->FindMaterial("dev/thermal_model", TEXTURE_GROUP_MODEL);
modelrender->ForcedMaterialOverride(pass);
ret |= BaseClass::DrawModel(flags);
modelrender->ForcedMaterialOverride(nullptr);
Expand Down Expand Up @@ -1168,7 +1168,7 @@ int CNEOBaseCombatWeapon::InternalDrawModel(int flags)

else if (inThermalVision && !pOwner->IsCloaked())
{
IMaterial* pass = materials->FindMaterial("dev/thermal_third", TEXTURE_GROUP_MODEL);
IMaterial* pass = materials->FindMaterial("dev/thermal_model", TEXTURE_GROUP_MODEL);
modelrender->ForcedMaterialOverride(pass);
ret |= BaseClass::InternalDrawModel(flags);
modelrender->ForcedMaterialOverride(nullptr);
Expand Down
34 changes: 20 additions & 14 deletions mp/src/materialsystem/stdshaders/Neo_ThermalVision.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
#include "tier0/memdbgon.h"

ConVar mat_neo_tv_brightness_scale("mat_neo_tv_brightness_scale", "1", FCVAR_CHEAT);
ConVar mat_neo_tv_xoffset("mat_neo_tv_xoffset", "0.25", FCVAR_CHEAT);
ConVar mat_neo_tv_xoffset("mat_neo_tv_xoffset", "0.125", FCVAR_CHEAT);
ConVar mat_neo_tv_xmultiplier("mat_neo_tv_xmultiplier", "0.1", FCVAR_CHEAT);

BEGIN_SHADER_FLAGS(Neo_ThermalVision, "Help for my shader.", SHADER_NOT_EDITABLE)

Expand All @@ -16,7 +17,8 @@ BEGIN_SHADER_PARAMS
SHADER_PARAM(FBTEXTURE, SHADER_PARAM_TYPE_TEXTURE, "_rt_ThermalVision", "")
//SHADER_PARAM(BLURTEXTURE, SHADER_PARAM_TYPE_TEXTURE, "_rt_SmallHDR0", "")
SHADER_PARAM(TVTEXTURE, SHADER_PARAM_TYPE_TEXTURE, "dev/tvgrad2", "")
//SHADER_PARAM(NOISETEXTURE, SHADER_PARAM_TYPE_TEXTURE, "dev/noise", "")
SHADER_PARAM(NOISETEXTURE, SHADER_PARAM_TYPE_TEXTURE, "dev/noise", "")
SHADER_PARAM(NOISETRANSFORM, SHADER_PARAM_TYPE_VEC3, "[0 0 0]", "")
#endif
END_SHADER_PARAMS

Expand Down Expand Up @@ -50,14 +52,14 @@ SHADER_INIT
Assert(false);
}

//if (params[NOISETEXTURE]->IsDefined())
//{
// LoadTexture(NOISETEXTURE);
//}
//else
//{
// Assert(false);
//}
if (params[NOISETEXTURE]->IsDefined())
{
LoadTexture(NOISETEXTURE);
}
else
{
Assert(false);
}
#endif
}

Expand All @@ -81,7 +83,7 @@ SHADER_DRAW
pShaderShadow->EnableTexture(SHADER_SAMPLER0, true);
pShaderShadow->EnableTexture(SHADER_SAMPLER1, true);
//pShaderShadow->EnableTexture(SHADER_SAMPLER2, true);
//pShaderShadow->EnableTexture(SHADER_SAMPLER3, true);
pShaderShadow->EnableTexture(SHADER_SAMPLER3, true);
#endif

const int fmt = VERTEX_POSITION;
Expand All @@ -101,7 +103,7 @@ SHADER_DRAW
pShaderShadow->EnableSRGBRead(SHADER_SAMPLER0, true);
pShaderShadow->EnableSRGBRead(SHADER_SAMPLER1, true);
//pShaderShadow->EnableSRGBRead(SHADER_SAMPLER2, true);
//pShaderShadow->EnableSRGBRead(SHADER_SAMPLER3, true);
pShaderShadow->EnableSRGBRead(SHADER_SAMPLER3, true);
#endif
pShaderShadow->EnableSRGBWrite(true);
}
Expand All @@ -117,14 +119,18 @@ SHADER_DRAW
BindTexture(SHADER_SAMPLER0, FBTEXTURE);
//BindTexture(SHADER_SAMPLER1, BLURTEXTURE);
BindTexture(SHADER_SAMPLER1, TVTEXTURE);
//BindTexture(SHADER_SAMPLER3, NOISETEXTURE);
BindTexture(SHADER_SAMPLER3, NOISETEXTURE);
#endif

const float flBrightnessScale = mat_neo_tv_brightness_scale.GetFloat();
const float flXOffset = mat_neo_tv_xoffset.GetFloat();
const float flXMultiplier = mat_neo_tv_xmultiplier.GetFloat();
const float* noiseTransformVector = params[NOISETRANSFORM]->GetVecValue();

pShaderAPI->SetPixelShaderConstant(0, &flBrightnessScale);
pShaderAPI->SetPixelShaderConstant(1, &flXOffset);
pShaderAPI->SetPixelShaderConstant(2, &flXMultiplier);
pShaderAPI->SetPixelShaderConstant(3, &noiseTransformVector[0]);
pShaderAPI->SetPixelShaderConstant(4, &noiseTransformVector[1]);

DECLARE_DYNAMIC_VERTEX_SHADER(neo_passthrough_vs30);
SET_DYNAMIC_VERTEX_SHADER(neo_passthrough_vs30);
Expand Down
35 changes: 31 additions & 4 deletions mp/src/materialsystem/stdshaders/neo_thermal_model_dx9.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,14 @@
#include "convar.h"
#include "neo_thermal_model_dx9_helper.h"

ConVar mat_neo_tv_model_offset("mat_neo_tv_model_offset", "0.4125", FCVAR_CHEAT);

DEFINE_FALLBACK_SHADER( Neo_Thermal_Model, Neo_Thermal_Model_DX9 )
BEGIN_VS_SHADER( Neo_Thermal_Model_DX9, "Help for thermal model shader" )

BEGIN_SHADER_PARAMS
SHADER_PARAM( ALPHATESTREFERENCE, SHADER_PARAM_TYPE_FLOAT, "0.0", "" )
SHADER_PARAM( ALPHATESTREFERENCE, SHADER_PARAM_TYPE_FLOAT, "0.0", "" )
SHADER_PARAM( TVMGRADTEXTURE, SHADER_PARAM_TYPE_TEXTURE, "dev/tvmgrad2", "")
END_SHADER_PARAMS

void SetupVars( NeoThermalModel_DX9_Vars_t& info )
Expand All @@ -37,21 +40,45 @@ BEGIN_VS_SHADER( Neo_Thermal_Model_DX9, "Help for thermal model shader" )
return 0;
}

SHADER_INIT
SHADER_INIT
{
NeoThermalModel_DX9_Vars_t info;
SetupVars(info);
InitNeoThermalModel_DX9(this, params, info);

if (params[TVMGRADTEXTURE]->IsDefined())
{
LoadTexture(TVMGRADTEXTURE);
}
else
{
Assert(false);
}
}

SHADER_DRAW
SHADER_DRAW
{
if (pShaderAPI)
SHADOW_STATE
{
pShaderShadow->EnableTexture(SHADER_SAMPLER1, true);

if (g_pHardwareConfig->SupportsSRGB())
{
pShaderShadow->EnableSRGBRead(SHADER_SAMPLER1, true);
}
}

DYNAMIC_STATE
{
BindTexture(SHADER_SAMPLER1, TVMGRADTEXTURE);

VMatrix mat, transpose;
s_pShaderAPI->GetMatrix(MATERIAL_VIEW, mat.m[0]);
MatrixTranspose(mat, transpose);
s_pShaderAPI->SetPixelShaderConstant(2, transpose.m[2], 3);

const float flModelOffset = mat_neo_tv_model_offset.GetFloat();
pShaderAPI->SetPixelShaderConstant(3, &flModelOffset);
}

NeoThermalModel_DX9_Vars_t info;
Expand Down
11 changes: 5 additions & 6 deletions mp/src/materialsystem/stdshaders/neo_thermal_model_ps20b.fxc
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,13 @@ PixelShaderLightInfo cLightInfo[3] : register( PSREG_LIGHT_INFO_ARRAY ); //
#define g_FlashlightPos g_FlashlightPos_RimBoost.xyz

sampler BaseTextureSampler : register( s0 ); // Base map, selfillum in alpha
sampler ModelGradientSampler : register( s1 ); // gradient correct for model / view normal dotproduct
sampler ShadowDepthSampler : register( s4 ); // Flashlight shadow depth map sampler
sampler NormalizeRandRotSampler : register( s5 ); // Normalization / RandomRotation samplers
sampler FlashlightSampler : register( s6 ); // Flashlight cookie

const float3 g_ViewDirection : register(c2);
const float g_Multiplier : register(c3);

const float g_Offset : register(c3);
struct PS_INPUT
{
float2 baseTexCoord : TEXCOORD0;
Expand All @@ -58,12 +58,11 @@ float4 main( PS_INPUT i ) : COLOR
{
float4 baseColor = tex2D( BaseTextureSampler, i.baseTexCoord );

float dotProduct = (0.41666 * dot(g_ViewDirection, i.worldNormal)) + 0.41666; //5/12
float3 result = ( 0, 0, 0 ) + dotProduct;
float dotProduct = (0.5 * dot(g_ViewDirection, i.worldNormal)) + 0.5;
baseColor = tex2D( ModelGradientSampler, float2(dotProduct, 0.5)) + g_Offset;

float fogFactor = CalcPixelFogFactor( PIXELFOGTYPE, g_FogParams, g_EyePos.z, i.worldPos.z, i.projPos.z );

bool bWriteDepthToAlpha = ( WRITE_DEPTH_TO_DESTALPHA != 0 ) && ( WRITEWATERFOGTODESTALPHA == 0 );

return FinalOutput( float4( result, baseColor.a ), fogFactor, PIXELFOGTYPE, TONEMAP_SCALE_LINEAR, bWriteDepthToAlpha, i.projPos.z );
return FinalOutput( baseColor, fogFactor, PIXELFOGTYPE, TONEMAP_SCALE_LINEAR, bWriteDepthToAlpha, i.projPos.z );
}
10 changes: 7 additions & 3 deletions mp/src/materialsystem/stdshaders/neo_thermalvision_ps30.fxc
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,13 @@
sampler FrameBuffer : register(s0);
sampler TvTexture : register(s1);
//sampler BlurBuffer : register(s2);
//sampler NoiseTexture : register(s3);
sampler NoiseTexture : register(s3);

const float g_BrightnessScale : register(c0);
const float g_XOffset : register(c1);
const float g_XMultiplier : register(c2);
const float g_XNoiseOffset : register(c3);
const float g_YNoiseOffset : register(c4);

struct PS_INPUT
{
Expand All @@ -16,6 +19,7 @@ struct PS_INPUT
float4 main( const PS_INPUT i ) : COLOR
{
const float4 fbColor = tex2D(FrameBuffer, i.texCoord);
const float avgBright = (fbColor.r + fbColor.g + fbColor.b) * 0.3333;
return tex2D(TvTexture, float2(min(1.0, avgBright + g_XOffset), 0.5)) * g_BrightnessScale;
const float noise = 0.9 + (tex2D(NoiseTexture, i.texCoord + float2(g_XNoiseOffset, g_YNoiseOffset)) / 10);
const float avgBright = (fbColor.r * 0.3 + fbColor.g * 0.59 + fbColor.b * 0.11) * noise;
return tex2D(TvTexture, float2(min(1.0, (avgBright + g_XOffset) + ((avgBright - g_XOffset) * g_XMultiplier)), 0.5)) * g_BrightnessScale;
}
Loading