Skip to content

Commit

Permalink
Added bloom and fog controls to bioshock 1 version of RenoDX
Browse files Browse the repository at this point in the history
- Bloom controls default game's bloom amount. Scales from 0.0 (disabled) to 2.0 (double of the vanilla amount)
- Fog appears to control both shader based fog and "fake" mesh based fog, so it's a global scalar. Similarly to bloom, it scale from 0.0 to 2.0
  • Loading branch information
MaxG2D committed Feb 8, 2025
1 parent 2315fc3 commit 206079f
Show file tree
Hide file tree
Showing 4 changed files with 114 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/games/bioshock/Bloom_Tonemap_0x6457104F.ps_4_0.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ void main(
{
float3 bloomColor = s_bloom.Sample(s_bloom_s, w1.xy).rgb;
float4 sceneColor = s_framebuffer.Sample(s_framebuffer_s, v1.xy).rgba;
bloomColor *= bloomAlpha; // Scale down (or up) the bloom intensity
bloomColor *= bloomAlpha * injectedData.BloomAmount; // Scale down (or up) the bloom intensity
sceneColor.rgb += bloomColor; // Bloom is 100% additive here
sceneColor.rgb *= sceneBias; // Exposure?

Expand Down
85 changes: 85 additions & 0 deletions src/games/bioshock/Fog_0xDAA8E1E9.ps_4_0.hlsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
#include "./shared.h"

cbuffer _Globals : register(b0)
{
float Base_hlsl_PSMain09_4bits : packoffset(c0) = {0};
float4 fogColor : packoffset(c1);
float3 fogTransform : packoffset(c2);
float4x3 screenDataToCamera : packoffset(c3);
float globalScale : packoffset(c6);
float sceneDepthAlphaMask : packoffset(c6.y);
float globalOpacity : packoffset(c6.z);
float distortionBufferScale : packoffset(c6.w);
float2 wToZScaleAndBias : packoffset(c7);
float4 screenTransform[2] : packoffset(c8);
float4x4 worldViewProj : packoffset(c10);
float3 localEyePos : packoffset(c14);
float4 vertexClipPlane : packoffset(c15);
float3 beamColor : packoffset(c16);
float beamBrightness : packoffset(c16.w);
float backFadeDistance : packoffset(c17);
float nearClipFadeDistance : packoffset(c17.y);
float nearClipPlane : packoffset(c17.z);
float4x2 dustTexTransform : packoffset(c18);
float4 unlitColor : packoffset(c20);
row_major float4x3 localToWorld : packoffset(c21);
}

SamplerState s_sceneDepth_s : register(s0);
SamplerState mtbSampleSlot1_s : register(s1);
SamplerState mtbSampleSlot2_s : register(s2);
Texture2D<float4> s_sceneDepth : register(t0);
Texture2D<float4> mtbSampleSlot1 : register(t1);
Texture2D<float4> mtbSampleSlot2 : register(t2);


// 3Dmigoto declarations
#define cmp -


void main(
float4 v0 : TEXCOORD6,
float4 v1 : TEXCOORD7,
float4 v2 : TEXCOORD0,
float4 v3 : TEXCOORD3,
float4 v4 : TEXCOORD4,
float3 v5 : TEXCOORD5,
out float4 o0 : SV_Target0)
{
float4 r0,r1,r2;
uint4 bitmask, uiDest;
float4 fDest;

r0.xy = v0.xy / v0.ww;
r0.xyzw = s_sceneDepth.Sample(s_sceneDepth_s, r0.xy).xyzw;
r0.x = -wToZScaleAndBias.x + r0.x;
r0.x = wToZScaleAndBias.y / r0.x;
r0.x = -v0.w + r0.x;
r0.x = saturate(r0.x / backFadeDistance);
r0.y = dot(v1.xyz, v1.xyz);
r0.y = rsqrt(r0.y);
r0.yz = v1.xz * r0.yy;
r0.z = 0.699999988 * abs(r0.z);
r1.x = r0.y * -0.5 + 0.5;
r0.y = r0.z * r0.z;
r0.y = min(1, r0.y);
r0.y = 1.42857146 * r0.y;
r1.yw = v2.yz;
r2.xyzw = mtbSampleSlot1.Sample(mtbSampleSlot1_s, r1.xy).xyzw;
r1.z = v2.w + r1.x;
r1.xyzw = mtbSampleSlot2.Sample(mtbSampleSlot2_s, r1.zw).xyzw;
r2.xyz = beamColor.xyz * r2.xyz;
r2.xyz = beamBrightness * r2.xyz;
r0.yzw = r2.xyz * r0.yyy;
r0.xyz = r0.yzw * r0.xxx;
r0.w = -nearClipPlane + v0.w;
r0.w = saturate(r0.w / nearClipFadeDistance);
r0.xyz = r0.xyz * r0.www;
r0.xyz = r0.xyz * r1.xyz;
r1.xyz = unlitColor.xyz * r0.xyz;
r0.xyz = -r0.xyz * unlitColor.xyz + fogColor.xyz;
r0.xyz = v0.zzz * r0.xyz + r1.xyz;
o0.xyz = globalScale * injectedData.FogAmount * r0.xyz;
o0.w = globalOpacity * v1.w;
return;
}
26 changes: 26 additions & 0 deletions src/games/bioshock/addon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

#include <embed/0xEC834D82.h>
#include <embed/0x6457104F.h>
#include <embed/0xDAA8E1E9.h>

#include <embed/0xFFFFFFFD.h> // Custom final VS
#include <embed/0xFFFFFFFE.h> // Custom final PS
Expand All @@ -26,6 +27,7 @@ namespace {
renodx::mods::shader::CustomShaders custom_shaders = {
CustomShaderEntry(0xEC834D82),
CustomShaderEntry(0x6457104F),
CustomShaderEntry(0xDAA8E1E9),
};

ShaderInjectData shader_injection;
Expand Down Expand Up @@ -53,6 +55,30 @@ renodx::utils::settings::Settings settings = {
.min = 80.f,
.max = 500.f,
},
new renodx::utils::settings::Setting{
.key = "BloomAmount",
.binding = &shader_injection.BloomAmount,
.default_value = 1.f,
.can_reset = true,
.label = "Bloom Amount",
.section = "FX",
.tooltip = "Game's default bloom shader amount",
.min = 0.f,
.max = 2.f,
.format = "%.2f",
},
new renodx::utils::settings::Setting{
.key = "FogAmount",
.binding = &shader_injection.FogAmount,
.default_value = 1.f,
.can_reset = true,
.label = "Fog Amount",
.section = "FX",
.tooltip = "Game's default fog shader amount",
.min = 0.f,
.max = 2.f,
.format = "%.2f",
},
new renodx::utils::settings::Setting{
.value_type = renodx::utils::settings::SettingValueType::BUTTON,
.label = "Discord",
Expand Down
2 changes: 2 additions & 0 deletions src/games/bioshock/shared.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
struct ShaderInjectData {
float peakWhiteNits;
float paperWhiteNits;
float BloomAmount;
float FogAmount;
};

#ifndef __cplusplus
Expand Down

0 comments on commit 206079f

Please sign in to comment.