Skip to content

Commit

Permalink
FXAA из OpenXRay
Browse files Browse the repository at this point in the history
  • Loading branch information
xrSimpodin committed Jun 6, 2019
1 parent 1d4e52f commit 927662b
Show file tree
Hide file tree
Showing 31 changed files with 209 additions and 16 deletions.
3 changes: 0 additions & 3 deletions .gitattributes
@@ -1,6 +1,3 @@
# Custom
*.script text=crlf linguist-language=Lua
*.ltx text=crlf linguist-language=INI
*.ps text=crlf linguist-language=HLSL
*.vs text=crlf linguist-language=HLSL
*.s text=crlf linguist-language=Lua
Expand Up @@ -369,7 +369,7 @@
<text>Ëóæè</text>
</string>
<string id="ui_mm_r3_dynamic_wet_surfaces">
<text>Íàìîêàíèå ïëîñêîñòåé</text>
<text>Íàìîêàíèå ïîâåðõíîñòåé</text>
</string>
<string id="ui_mm_volumetric_light">
<text>Îáú¸ìíûé ñâåò</text>
Expand Down Expand Up @@ -416,6 +416,9 @@
<string id="ui_mm_msaa">
<text>MSAA</text>
</string>
<string id="ui_mm_fxaa">
<text>FXAA</text>
</string>
<string id="ui_mm_switch_torch">
<text>Èñïîëüçîâàíèå ôîíàðèêîâ AI</text>
</string>
Expand Down
7 changes: 7 additions & 0 deletions Game/Resources_SoC_1.0006/gamedata/config/ui/ui_mm_opt.xml
Expand Up @@ -337,6 +337,13 @@
<list_font r="216" g="186" b="140" font="letterica16"/>
</list_msaa>

<cap_fxaa x="5" y="5" width="143" height="21">
<text font="letterica16" r="215" g="195" b="170">ui_mm_fxaa</text>
</cap_fxaa>
<check_fxaa x="249" y="0" width="30" height="21">
<options_item entry="r2_fxaa" group="mm_opt_video"/>
</check_fxaa>

<cap_ssample x="5" y="5" width="143" height="21">
<text font="letterica16" r="215" g="195" b="170">ui_mm_ssample</text>
</cap_ssample>
Expand Down
Expand Up @@ -26,19 +26,24 @@ local function only_3_and_more_mode_invisible() return not only_3_and_more_mode(
local function only_4_and_more_mode() return get_current_renderer() >= 5 end

local adv_vid_opt_params = {
--Настройки ЗП--
{ "vis_dist", "track", 0, hint_colors.yellow, "video_settings_name_2" , "video_settings_desc_2" },
{ "geometry_lod", "track", 0, hint_colors.green , "video_settings_name_3" , "video_settings_desc_3" },
{ "texture_lod", "track", 1, hint_colors.green , "video_settings_name_7" , "video_settings_desc_7" },
{ "aniso", "track", 0, hint_colors.green , "video_settings_name_8" , "video_settings_desc_8" },
{ "geometry_lod", "track", 0, hint_colors.red , "video_settings_name_3" , "video_settings_desc_3" },
{ "texture_lod", "track", 1, hint_colors.red , "video_settings_name_7" , "video_settings_desc_7" },
{ "aniso", "track", 0, hint_colors.yellow, "video_settings_name_8" , "video_settings_desc_8" },
--
{ "msaa", "list", 1, hint_colors.red , "", "" , only_3_and_more_mode },
{ "fxaa", "check", 0, hint_colors.green , "", "" , only_2a_and_more_mode },
{ "ssample", "track", 0, hint_colors.green , "", "" , only_1_mode },
--
{ "detail_density", "track", 0, hint_colors.red , "video_settings_name_4" , "video_settings_desc_4" },
{ "detail_distance", "track", 0, hint_colors.red , "video_settings_name_5" , "video_settings_desc_5" },
{ "r2_sun_details", "check", 0, hint_colors.red , "video_settings_name_12", "video_settings_desc_12" },
{ "r2_sun", "check", 0, hint_colors.yellow, "video_settings_name_11", "video_settings_desc_11", only_2_and_more_mode },
{ "light_distance", "track", 0, hint_colors.red , "video_settings_name_13", "video_settings_desc_13", only_2a_and_more_mode },
{ "particles_distance", "track", 0, hint_colors.red , "video_settings_name_15", "video_settings_desc_15", only_2a_and_more_mode },
{ "r__smap_size", "list", 1, hint_colors.red , "video_settings_name_59", "video_settings_desc_59", only_2_and_more_mode },
{ "r2_sun_near", "track", 0, hint_colors.red , "video_settings_name_22", "video_settings_desc_22", only_2_and_more_mode },
{ "r2_sun_far", "track", 0, hint_colors.yellow, "video_settings_name_58", "video_settings_desc_58", only_2_and_more_mode },
{ "npc_torch", "check", 0, hint_colors.green , "video_settings_name_14", "video_settings_desc_14" },
{ "r1_detail_textures", "check", 0, hint_colors.green , "", "" , only_1_mode },
{ "r2_detail_bump", "check", 0, hint_colors.yellow, "video_settings_name_44", "video_settings_desc_44", only_2_and_more_mode },
Expand All @@ -61,12 +66,7 @@ local adv_vid_opt_params = {
{ "60hz", "check", 0, hint_colors.green , "video_settings_name_17", "video_settings_desc_17" },
{ "fov", "track", 0, hint_colors.green , "video_settings_name_61", "video_settings_desc_61" },
{ "hud_fov", "track", 0, hint_colors.green , "video_settings_name_62", "video_settings_desc_62" },
{ "r__smap_size", "list", 1, hint_colors.red , "video_settings_name_59", "video_settings_desc_59", only_2_and_more_mode },
{ "r2_sun_near", "track", 0, hint_colors.red , "video_settings_name_22", "video_settings_desc_22", only_2_and_more_mode },
{ "r2_sun_far", "track", 0, hint_colors.yellow, "video_settings_name_58", "video_settings_desc_58", only_2_and_more_mode },
{ "cam_inert", "track", 0, hint_colors.green , "video_settings_name_1" , "video_settings_desc_1" },
{ "detail_distance", "track", 0, hint_colors.red , "video_settings_name_5" , "video_settings_desc_5" },
{ "r2_sun_details", "check", 0, hint_colors.red , "video_settings_name_12", "video_settings_desc_12" },
-- { "r2_sun_lumscale", "track", 0, hint_colors.green , "video_settings_name_27", "video_settings_desc_27" }, --В огсе настройка была отключена. Устанавливалась в биндере принудительно в 1
{ "r2_sun_lumscale_amb", "track", 0, hint_colors.green , "video_settings_name_28", "video_settings_desc_28", only_2_and_more_mode },
{ "r2_sun_lumscale_hemi", "track", 0, hint_colors.green , "video_settings_name_63", "video_settings_desc_63", only_2_and_more_mode },
Expand Down
9 changes: 8 additions & 1 deletion Game/Resources_SoC_1.0006/gamedata/shaders/.gitattributes
@@ -1 +1,8 @@
*.h text=crlf linguist-language=HLSL
*.s text=crlf linguist-language=Lua
*.h text=crlf linguist-language=HLSL diff=HLSL
*.ps text=crlf linguist-language=HLSL diff=HLSL
*.vs text=crlf linguist-language=HLSL diff=HLSL
*.ds text=crlf linguist-language=HLSL diff=HLSL
*.hs text=crlf linguist-language=HLSL diff=HLSL
*.cs text=crlf linguist-language=HLSL diff=HLSL
*.gs text=crlf linguist-language=HLSL diff=HLSL
Binary file not shown.
6 changes: 6 additions & 0 deletions Game/Resources_SoC_1.0006/gamedata/shaders/r2/fxaa.s
@@ -0,0 +1,6 @@
function element_0(shader, t_base, t_second, t_detail)
shader:begin("fxaa_main", "fxaa_main")
:fog(false)
:zb(false, false)
shader:sampler("s_base0"):texture("$user$generic0")
end
Binary file not shown.
26 changes: 26 additions & 0 deletions Game/Resources_SoC_1.0006/gamedata/shaders/r2/fxaa_main.vs
@@ -0,0 +1,26 @@
#include "common.h"

uniform float4 screen_res; // Screen resolution (x-Width,y-Height, zw - 1/resolution)

struct v
{
float3 P : POSITION;
float2 tc0 : TEXCOORD0;
};

struct v2p
{
float2 tc0 : TEXCOORD0;
float4 HPos : POSITION;
};

//////////////////////////////////////////////////////////////////////////////////////////
// Vertex
v2p main ( v I )
{
v2p O;
O.HPos = float4 (I.P.x * screen_res.z * 2 - 1, (I.P.y * screen_res.w * 2 - 1)* -1, 0, 1);
O.tc0 = I.tc0;

return O;
}
Binary file not shown.
7 changes: 7 additions & 0 deletions Game/Resources_SoC_1.0006/gamedata/shaders/r3/fxaa.s
@@ -0,0 +1,7 @@
function element_0(shader, t_base, t_second, t_detail)
shader:begin("fxaa_main", "fxaa_main")
:fog(false)
:zb(false, false)
shader:dx10texture("s_base0", "$user$generic0")
shader:dx10sampler("smp_rtlinear")
end
Binary file not shown.
26 changes: 26 additions & 0 deletions Game/Resources_SoC_1.0006/gamedata/shaders/r3/fxaa_main.vs
@@ -0,0 +1,26 @@
#include "common.h"

uniform float4 screen_res; // Screen resolution (x-Width,y-Height, zw - 1/resolution)

struct v
{
float3 P : POSITION;
float2 Tex0 : TEXCOORD0;
};

struct v2p
{
float2 Tex0 : TEXCOORD0;
float4 HPos : SV_Position;
};

//////////////////////////////////////////////////////////////////////////////////////////
// Vertex
v2p main ( v I )
{
v2p O;
O.HPos = float4 (I.P.x * screen_res.z * 2 - 1, (I.P.y * screen_res.w * 2 - 1)* -1, 0, 1);
O.Tex0 = I.Tex0;

return O;
}
47 changes: 47 additions & 0 deletions ogsr_engine/Layers/xrRender/RenderTargetPhaseFXAA.cpp
@@ -0,0 +1,47 @@
#include "stdafx.h"

void CRenderTarget::phase_fxaa()
{
u32 Offset = 0;
const float _w = float(Device.dwWidth);
const float _h = float(Device.dwHeight);
const float du = ps_r1_pps_u, dv = ps_r1_pps_v;

#if defined(USE_DX10) || defined(USE_DX11)
ref_rt dest_rt = RImplementation.o.dx10_msaa ? rt_Generic : rt_Color;
u_setrt(dest_rt, nullptr, nullptr, HW.pBaseZB);

FVF::V* pv = (FVF::V*)RCache.Vertex.Lock(4, g_fxaa->vb_stride, Offset);
pv->set(du + 0, dv + float(_h), 0, 0, 1);
pv++;
pv->set(du + 0, dv + 0, 0, 0, 0);
pv++;
pv->set(du + float(_w), dv + float(_h), 0, 1, 1);
pv++;
pv->set(du + float(_w), dv + 0, 0, 1, 0);
pv++;
#else
u_setrt(rt_Generic_0, nullptr, nullptr, HW.pBaseZB);
RCache.set_CullMode(CULL_NONE);
RCache.set_Stencil(FALSE);

FVF::V* pv = (FVF::V*)RCache.Vertex.Lock(4, g_fxaa->vb_stride, Offset);
pv->set(du - 0.5, dv + float(_h) - 0.5, 0, 0, 1);
pv++;
pv->set(du - 0.5, dv - 0.5, 0, 0, 0);
pv++;
pv->set(du + float(_w) - 0.5, dv + float(_h) - 0.5, 0, 1, 1);
pv++;
pv->set(du + float(_w) - 0.5, dv - 0.5, 0, 1, 0);
pv++;
#endif
RCache.Vertex.Unlock(4, g_fxaa->vb_stride);

RCache.set_Element(s_fxaa->E[0]);
RCache.set_Geometry(g_fxaa);
RCache.Render(D3DPT_TRIANGLELIST, Offset, 0, 4, 0, 2);

#if defined(USE_DX10) || defined(USE_DX11)
HW.pContext->CopyResource(rt_Generic_0->pTexture->surface_get(), dest_rt->pTexture->surface_get());
#endif
}
2 changes: 2 additions & 0 deletions ogsr_engine/Layers/xrRender/xrRender_console.cpp
Expand Up @@ -932,6 +932,8 @@ void xrRender_initconsole ()
CMD3(CCC_Token, "r3_msaa_alphatest", &ps_r3_msaa_atest, qmsaa__atest_token);
CMD3(CCC_Token, "r3_minmax_sm", &ps_r3_minmax_sm, qminmax_sm_token);

CMD3(CCC_Mask, "r2_fxaa", &ps_r2_ls_flags, R2FLAG_FXAA);

CMD4(CCC_detail_radius, "r__detail_radius", &ps_r__detail_radius, 49, 300);
CMD4(CCC_Integer, "r__no_scale_on_fade", &ps_no_scale_on_fade, 0, 1); //Alundaio

Expand Down
2 changes: 1 addition & 1 deletion ogsr_engine/Layers/xrRender/xrRender_console.h
Expand Up @@ -146,7 +146,7 @@ enum
R2FLAG_SUN_TSM = (1<<2),
R2FLAG_SUN_DETAILS = (1<<3),
R2FLAG_TONEMAP = (1<<4),
// = (1<<5),
R2FLAG_FXAA = (1<<5),
R2FLAG_GI = (1<<6),
R2FLAG_FASTBLOOM = (1<<7),
R2FLAG_GLOBALMATERIAL = (1<<8),
Expand Down
4 changes: 4 additions & 0 deletions ogsr_engine/Layers/xrRenderPC_R2/r2_rendertarget.cpp
Expand Up @@ -440,6 +440,10 @@ CRenderTarget::CRenderTarget ()

s_rain_drops.create("ogsr_rain_drops");
g_rain_drops.create(fvf_aa_AA, RCache.Vertex.Buffer(), RCache.QuadIB);

//FXAA
s_fxaa.create("fxaa");
g_fxaa.create(FVF::F_V, RCache.Vertex.Buffer(), RCache.QuadIB);
}

// Build textures
Expand Down
5 changes: 5 additions & 0 deletions ogsr_engine/Layers/xrRenderPC_R2/r2_rendertarget.h
Expand Up @@ -149,6 +149,10 @@ class CRenderTarget : public IRender_Target
ref_geom g_rain_drops;
ref_shader s_rain_drops;

//FXAA
ref_shader s_fxaa;
ref_geom g_fxaa;

public:
ref_shader s_postprocess;
ref_geom g_postprocess;
Expand Down Expand Up @@ -244,6 +248,7 @@ class CRenderTarget : public IRender_Target
void phase_combine_volumetric();
void phase_pp ();
void PhaseRainDrops();
void phase_fxaa();

virtual void set_blur (float f) { param_blur=f; }
virtual void set_gray (float f) { param_gray=f; }
Expand Down
@@ -1,8 +1,8 @@
#include "stdafx.h"
#include "../../xr_3da/igame_persistent.h"
#include "../../xr_3da/environment.h"

#include "../xrRender/dxEnvironmentRender.h"
#include "../xrRender/Debug/dxPixEventWrapper.h"

#define STENCIL_CULL 0

Expand Down Expand Up @@ -233,6 +233,14 @@ void CRenderTarget::phase_combine ()
}
}

//FXAA
if (ps_r2_ls_flags.test(R2FLAG_FXAA))
{
PIX_EVENT(FXAA);
phase_fxaa();
RCache.set_Stencil(FALSE);
}

// PP enabled ?
// Render to RT texture to be able to copy RT even in windowed mode.
BOOL PP_Complex = u_need_PP () | (BOOL)RImplementation.m_bMakeAsyncSS;
Expand Down
1 change: 1 addition & 0 deletions ogsr_engine/Layers/xrRenderPC_R2/xrRender_R2.vcxproj
Expand Up @@ -493,6 +493,7 @@
<ClCompile Include="..\xrRender\ParticleEffectDef.cpp" />
<ClCompile Include="..\xrRender\ParticleGroup.cpp" />
<ClCompile Include="..\xrRender\PSLibrary.cpp" />
<ClCompile Include="..\xrRender\RenderTargetPhaseFXAA.cpp" />
<ClCompile Include="..\xrRender\RenderTargetPhaseRainDrops.cpp" />
<ClCompile Include="..\xrRender\ResourceManager.cpp" />
<ClCompile Include="..\xrRender\ResourceManager_Loader.cpp" />
Expand Down
3 changes: 3 additions & 0 deletions ogsr_engine/Layers/xrRenderPC_R2/xrRender_R2.vcxproj.filters
Expand Up @@ -1118,6 +1118,9 @@
<ClCompile Include="..\xrRender\RenderTargetPhaseRainDrops.cpp">
<Filter>Core_Target</Filter>
</ClCompile>
<ClCompile Include="..\xrRender\RenderTargetPhaseFXAA.cpp">
<Filter>Core_Target</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<Text Include="todo.txt" />
Expand Down
4 changes: 4 additions & 0 deletions ogsr_engine/Layers/xrRenderPC_R3/r3_rendertarget.cpp
Expand Up @@ -703,6 +703,10 @@ CRenderTarget::CRenderTarget ()

s_rain_drops.create("ogsr_rain_drops");
g_rain_drops.create(fvf_aa_AA, RCache.Vertex.Buffer(), RCache.QuadIB);

//FXAA
s_fxaa.create("fxaa");
g_fxaa.create(FVF::F_V, RCache.Vertex.Buffer(), RCache.QuadIB);
}

// Build textures
Expand Down
5 changes: 5 additions & 0 deletions ogsr_engine/Layers/xrRenderPC_R3/r3_rendertarget.h
Expand Up @@ -194,6 +194,10 @@ class CRenderTarget : public IRender_Target
ref_geom g_rain_drops;
ref_shader s_rain_drops;

//FXAA
ref_shader s_fxaa;
ref_geom g_fxaa;

public:
ref_shader s_postprocess;
ref_shader s_postprocess_msaa;
Expand Down Expand Up @@ -299,6 +303,7 @@ class CRenderTarget : public IRender_Target
void phase_combine_volumetric();
void phase_pp ();
void PhaseRainDrops();
void phase_fxaa();

virtual void set_blur (float f) { param_blur=f; }
virtual void set_gray (float f) { param_gray=f; }
Expand Down
Expand Up @@ -338,6 +338,14 @@ void CRenderTarget::phase_combine ()
}
*/

//FXAA
if (ps_r2_ls_flags.test(R2FLAG_FXAA))
{
PIX_EVENT(FXAA);
phase_fxaa();
RCache.set_Stencil(FALSE);
}

// PP enabled ?
// Render to RT texture to be able to copy RT even in windowed mode.
BOOL PP_Complex = u_need_PP () | (BOOL)RImplementation.m_bMakeAsyncSS;
Expand Down
1 change: 1 addition & 0 deletions ogsr_engine/Layers/xrRenderPC_R3/xrRender_R3.vcxproj
Expand Up @@ -498,6 +498,7 @@
<ClCompile Include="..\xrRender\ParticleEffectDef.cpp" />
<ClCompile Include="..\xrRender\ParticleGroup.cpp" />
<ClCompile Include="..\xrRender\PSLibrary.cpp" />
<ClCompile Include="..\xrRender\RenderTargetPhaseFXAA.cpp" />
<ClCompile Include="..\xrRender\RenderTargetPhaseRainDrops.cpp" />
<ClCompile Include="..\xrRender\ResourceManager.cpp" />
<ClCompile Include="..\xrRender\ResourceManager_Loader.cpp" />
Expand Down
3 changes: 3 additions & 0 deletions ogsr_engine/Layers/xrRenderPC_R3/xrRender_R3.vcxproj.filters
Expand Up @@ -1295,5 +1295,8 @@
<ClCompile Include="..\xrRender\RenderTargetPhaseRainDrops.cpp">
<Filter>Core_Target</Filter>
</ClCompile>
<ClCompile Include="..\xrRender\RenderTargetPhaseFXAA.cpp">
<Filter>Core_Target</Filter>
</ClCompile>
</ItemGroup>
</Project>
4 changes: 4 additions & 0 deletions ogsr_engine/Layers/xrRenderPC_R4/r4_rendertarget.cpp
Expand Up @@ -725,6 +725,10 @@ CRenderTarget::CRenderTarget ()

s_rain_drops.create("ogsr_rain_drops");
g_rain_drops.create(fvf_aa_AA, RCache.Vertex.Buffer(), RCache.QuadIB);

//FXAA
s_fxaa.create("fxaa");
g_fxaa.create(FVF::F_V, RCache.Vertex.Buffer(), RCache.QuadIB);
}

// Build textures
Expand Down
5 changes: 5 additions & 0 deletions ogsr_engine/Layers/xrRenderPC_R4/r4_rendertarget.h
Expand Up @@ -201,6 +201,10 @@ class CRenderTarget : public IRender_Target
ref_geom g_rain_drops;
ref_shader s_rain_drops;

//FXAA
ref_shader s_fxaa;
ref_geom g_fxaa;

public:
ref_shader s_postprocess;
ref_shader s_postprocess_msaa;
Expand Down Expand Up @@ -307,6 +311,7 @@ class CRenderTarget : public IRender_Target
void phase_combine_volumetric();
void phase_pp ();
void PhaseRainDrops();
void phase_fxaa();

virtual void set_blur (float f) { param_blur=f; }
virtual void set_gray (float f) { param_gray=f; }
Expand Down

3 comments on commit 927662b

@ForserX
Copy link
Contributor

@ForserX ForserX commented on 927662b Jun 6, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А ты в курсе, что он без люмпаса толком ничего не делает?

@xrSimpodin
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Хм, ну я вижу разницу.

без люмпаса

Это шо?

@Xottab-DUTY
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Если что, вдруг, на всякий случай: автор FXAA – @avbaula. Коммит я брал из репозитория @avoitishin =)
А в Окси улучшенная версия от @RainbowZerg.

Please sign in to comment.