Compare commits
79 Commits
87d2ba38ea
...
REM-SP
| Author | SHA1 | Date | |
|---|---|---|---|
| 967787faff | |||
| 99cf90f9c7 | |||
| 686e6fad26 | |||
| ea3bd49d3a | |||
| c461c3a642 | |||
| 39aec06623 | |||
| 1df810e20c | |||
| 181917c7f2 | |||
| e0f7918f3c | |||
| 8b71d62270 | |||
| e03c154200 | |||
| b8547656b5 | |||
| e413290c44 | |||
| 5ff7deebd4 | |||
| cb8bc1f3d3 | |||
| ab66c99c32 | |||
| 294d22719c | |||
| 854552c979 | |||
| cab452e737 | |||
| c6ae7dae62 | |||
| 587a5c49b8 | |||
| 016f2fcf30 | |||
| b2f64b18dc | |||
| a7144670e6 | |||
| ab396bf4fe | |||
| 0a7400811f | |||
| 387db719f3 | |||
| 102cc2479c | |||
| 592d2ffbd0 | |||
| 1e93fa13ea | |||
| d0d84018f0 | |||
| 959e4f3a60 | |||
| 370c39a32e | |||
| 1f695308bd | |||
| e3de8aa8ef | |||
| a79b606d99 | |||
| c53f1902bd | |||
| eb71e60c36 | |||
| 94eea6bc41 | |||
| 5037492722 | |||
| 25e3284493 | |||
| 44dfd0bea9 | |||
| cc4836cbe2 | |||
| 057e5c2fb3 | |||
| 324350ee9e | |||
| 602a3b1d06 | |||
| 0b995e3829 | |||
| c4ccf4f28a | |||
| 52150aba9f | |||
| 0b10f8800a | |||
| 786198d14c | |||
| da805fece2 | |||
| cffe07850a | |||
| cce56a7198 | |||
| 69c0e1449d | |||
| 6fb6a79849 | |||
| b0c80ed91a | |||
| c913bc677b | |||
| 5b8fceb848 | |||
| 3323b2ba40 | |||
| ac3a2d0353 | |||
| e78f34c228 | |||
| 6719f711f8 | |||
| 94bdee39fc | |||
| 898874b3b1 | |||
| 8feddc3d7e | |||
| d0cf157010 | |||
| 74347d77c1 | |||
| 21089c15d3 | |||
| 603b1e25d5 | |||
| a5fed8bd7e | |||
| d1c2077316 | |||
| c605342cfa | |||
| 76bf4171f2 | |||
| 8c8d2d2bcd | |||
| 7c542d9753 | |||
| 32e459eaa1 | |||
| 0052304608 | |||
| 4a1e346a51 |
Binary file not shown.
Binary file not shown.
+18
-10
@@ -886,8 +886,6 @@ is_2d = true
|
||||
attenuation = 0
|
||||
file = Audio\Rem_Audio\Jacobi\dx_exp_0204_jacobi.wav
|
||||
|
||||
|
||||
|
||||
; Lane Hacker
|
||||
|
||||
[Sound]
|
||||
@@ -946,16 +944,26 @@ is_2d = true
|
||||
attenuation = 0
|
||||
file = Audio\Rem_Audio\RVP140_BETA\dx_GCS_F10aR02_RVP140.wav
|
||||
|
||||
[Sound]
|
||||
nickname = dx_lanehacker_0204_rvp140
|
||||
type = voice
|
||||
is_2d = true
|
||||
attenuation = 0
|
||||
file = Audio\Rem_Audio\RVP140_BETA\dx_GCS_F10aR02_RVP140.wav
|
||||
|
||||
[Sound]
|
||||
nickname = dx_lanehacker_0205_rvp140
|
||||
type = voice
|
||||
is_2d = true
|
||||
attenuation = 0
|
||||
file = Audio\Rem_Audio\RVP140_BETA\dx_GCS_V06aV04_RVP140.wav
|
||||
file = Audio\Rem_Audio\RVP140_BETA\dx_GCS_V06aV04_RVP140.wav
|
||||
|
||||
; Trent + 5 Db
|
||||
[Sound]
|
||||
nickname = dx_lanehacker_0201_Trent
|
||||
type = voice
|
||||
is_2d = true
|
||||
attenuation = 0
|
||||
file = Audio\Rem_Audio\Trent\dx_lanehacker_0201_trent.wav
|
||||
|
||||
; Marcus Walker Viginette
|
||||
|
||||
[Sound]
|
||||
nickname = dx_exp_vignette_walker_sp
|
||||
type = voice
|
||||
is_2d = true
|
||||
attenuation = 0
|
||||
file = Audio\Rem_Audio\viginettes\DX_EXP_VIGNETTE_WALKER_SP.wav
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,151 @@
|
||||
[Voice]
|
||||
nickname = harrison_voice_m14
|
||||
;extend = harrison_voice_m14
|
||||
script = SC_MLHEAD_MOTION_WALLA_CASL_000LV_XA_%
|
||||
script = SC_MLBODY_CHRB_IDLE_SMALL_000LV_XA_07
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0000_HARRISON
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0001_HARRISON
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0002_HARRISON
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0003_HARRISON
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0004_HARRISON
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0005_HARRISON
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0006_HARRISON
|
||||
attenuation = -6
|
||||
|
||||
[Voice]
|
||||
nickname = rebus_voice_m14
|
||||
;extend = rebus_voice_m14
|
||||
script = SC_FMHEAD_MOTION_WALLA_CASL_000LV_XA_%
|
||||
script = SC_FMBODY_CHRB_IDLE_SMALL_000LV_XA_05
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0000_REBUS
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0001_REBUS
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0100_REBUS
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0101_REBUS
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0102_REBUS
|
||||
attenuation = -6
|
||||
|
||||
[Voice]
|
||||
nickname = trent_voice_m14
|
||||
;extend = trent_voice_m14
|
||||
script = SC_MLHEAD_MOTION_WALLA_CASL_000LV_XA_%
|
||||
script = SC_MLBODY_CHRB_IDLE_SMALL_000LV_XA_07
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0010_TRENT
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0011_TRENT
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0012_TRENT
|
||||
attenuation = -6
|
||||
|
||||
|
||||
|
||||
[Voice]
|
||||
nickname = rochester_voice_m14
|
||||
;extend = rochester_voice_m14
|
||||
script = SC_MLHEAD_MOTION_WALLA_CASL_000LV_XA_%
|
||||
script = SC_MLBODY_CHRB_IDLE_SMALL_000LV_XA_07
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0000_Junkers
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0001_Junkers
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0002_Junkers
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0003_Junkers
|
||||
attenuation = -6
|
||||
|
||||
[Voice]
|
||||
nickname = jacobi_voice_m14
|
||||
;extend = jacobi_voice_m14
|
||||
script = SC_FMHEAD_MOTION_WALLA_CASL_000LV_XA_%
|
||||
script = SC_FMBODY_CHRB_IDLE_SMALL_000LV_XA_05
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0000_JACOBI
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0001_JACOBI
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0002_JACOBI
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0003_JACOBI
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0004_JACOBI
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0005_JACOBI
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0006_JACOBI
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0007_JACOBI
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0008_JACOBI
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0009_JACOBI
|
||||
attenuation = -6
|
||||
|
||||
[Sound]
|
||||
msg = DX_M14_0010_JACOBI
|
||||
attenuation = -6
|
||||
@@ -1554,6 +1554,12 @@ textures = fx\planetflare.txm
|
||||
textures = fx\sarma.txm
|
||||
textures = fx\hexagon.txm
|
||||
|
||||
[VisEffect]
|
||||
nickname = rem_sphere_neb01
|
||||
alchemy = fx\rem_misc\rem_neb01.ale
|
||||
effect_crc = 313485249
|
||||
textures = fx\nebuale.txm
|
||||
|
||||
[VisEffect]
|
||||
nickname = rtc_helium
|
||||
alchemy = fx\rem_misc\rtc_helium.ale
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -3044,6 +3044,11 @@ nickname = rtc_helium
|
||||
effect_type = EFT_EQUIP_ATTACHED_LARGE
|
||||
vis_effect = rtc_helium
|
||||
|
||||
[Effect]
|
||||
nickname = rem_sphere_neb01
|
||||
effect_type = EFT_EQUIP_ATTACHED_LARGE
|
||||
vis_effect = rem_sphere_neb01
|
||||
|
||||
[Effect]
|
||||
nickname = gf_blhazard_01
|
||||
effect_type = EFT_EQUIP_ATTACHED_LARGE
|
||||
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -160,3 +160,14 @@ pilot = MSN13_Osirus
|
||||
state_graph = CRUISER
|
||||
npc_class = lawful, CRUISER
|
||||
|
||||
; REM NPCs
|
||||
|
||||
[NPCShipArch]
|
||||
nickname = MSN14_xenos
|
||||
loadout = fc_x_ge_fighter4_loadout01
|
||||
level = d11
|
||||
ship_archetype = ge_fighter4
|
||||
pilot = pilot_xenos_ace
|
||||
state_graph = FIGHTER
|
||||
npc_class = unlawful, elite_fighter
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
[CharacterEncounter]
|
||||
Location = Li01_09_base, Deck
|
||||
start_room = Deck
|
||||
action = scripts\rem_arcs\westpoint_exploration_start.thn
|
||||
autoplay
|
||||
|
||||
[Char]
|
||||
npc = Jacobi
|
||||
actor = jacobi
|
||||
fidget = scripts\extras\fidget_stand_male_NULL.thn
|
||||
@@ -0,0 +1,10 @@
|
||||
[CharacterEncounter]
|
||||
Location = Li01_09_base, Deck
|
||||
start_room = Deck
|
||||
action = scripts\rem_arcs\westpoint_exploration_end.thn
|
||||
autoplay
|
||||
|
||||
[Char]
|
||||
npc = Jacobi
|
||||
actor = jacobi
|
||||
fidget = scripts\extras\fidget_stand_male_NULL.thn
|
||||
@@ -0,0 +1,10 @@
|
||||
[CharacterEncounter]
|
||||
Location = Li01_01_base, Cityscape
|
||||
start_room = Cityscape
|
||||
action = scripts\rem_arcs\manhattan_story_start01.thn
|
||||
autoplay
|
||||
|
||||
[Char]
|
||||
npc = King
|
||||
actor = king
|
||||
fidget = scripts\extras\fidget_stand_male_NULL.thn
|
||||
@@ -0,0 +1,10 @@
|
||||
[CharacterEncounter]
|
||||
Location = Li01_13_base, Deck
|
||||
start_room = Deck
|
||||
action = scripts\rem_arcs\rochester_story_end01.thn
|
||||
autoplay
|
||||
|
||||
[Char]
|
||||
npc = King
|
||||
actor = king
|
||||
fidget = scripts\extras\fidget_stand_male_NULL.thn
|
||||
@@ -0,0 +1,10 @@
|
||||
[CharacterEncounter]
|
||||
Location = Li01_12_base, Deck
|
||||
start_room = Deck
|
||||
action = scripts\rem_arcs\buffalo_story_start.thn
|
||||
autoplay
|
||||
|
||||
[Char]
|
||||
npc = sh_female2_rebus
|
||||
actor = juni
|
||||
fidget = scripts\extras\fidget_stand_female_NULL.thn
|
||||
@@ -2859,3 +2859,5 @@ permutation_count = gcs_combat_inflicting_damage_worst, 6
|
||||
permutation_count = gcs_combat_comingin_p, 3
|
||||
permutation_count = gcs_combat_fleereason_noweapons, 3
|
||||
|
||||
[mVoiceProp]
|
||||
voice = trent_voice_m14
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -109,6 +109,10 @@ equip = rtc_mis5view_effect, HpFX01
|
||||
nickname = dmkv_sphere_shield_load
|
||||
equip = rtc_helium_effect, HpFX01
|
||||
|
||||
[Loadout]
|
||||
nickname = dmkv_sphere_nebula_load
|
||||
equip = rem_neb01_effect, HpFX01
|
||||
|
||||
[Loadout]
|
||||
nickname = track_ring
|
||||
equip = TrackGreen, HpRunningLight01
|
||||
@@ -13331,7 +13335,7 @@ cargo = emergency_action_documents_liberty, 1
|
||||
|
||||
[Loadout]
|
||||
nickname = navy_satellite_sm_load
|
||||
archetype = navy_satellite_relay_sm
|
||||
archetype = navy_satellite
|
||||
cargo = emergency_action_documents_liberty, 1
|
||||
|
||||
; pirate_transmitter_liberty_sm_load
|
||||
|
||||
@@ -2266,6 +2266,17 @@ mass = 10000
|
||||
loadout = dmkv_sphere_shield_load
|
||||
hit_pts = 1e36
|
||||
|
||||
[Solar]
|
||||
nickname = dmkv_nebula
|
||||
ids_name = 60239
|
||||
ids_info = 60240
|
||||
LODranges = 0, 999999
|
||||
type = NON_TARGETABLE
|
||||
DA_archetype = solar\REM_MISC\dmkv_sphere.3db
|
||||
mass = 10000
|
||||
loadout = dmkv_sphere_nebula_load
|
||||
hit_pts = 1e36
|
||||
|
||||
[Solar]
|
||||
nickname = gravity_buoy
|
||||
type = SATELLITE
|
||||
@@ -9533,7 +9544,7 @@ fuse = intermed_damage_transport01, 0, 750
|
||||
fuse = intermed_damage_transport02, 0, 375
|
||||
|
||||
[Solar]
|
||||
nickname = navy_satellite
|
||||
nickname = navy_satellite_test
|
||||
ids_name = 217116
|
||||
type = MISSION_SATELLITE
|
||||
DA_archetype = solar\misc\gas_collector.cmp
|
||||
@@ -9542,7 +9553,7 @@ material_library = fx\envmapbasic.mat
|
||||
envmap_material = envmapbasic
|
||||
LODranges = 0, 999999
|
||||
mass = 10000
|
||||
loadout = gas_collector
|
||||
;loadout = navy_satellite_sm_load
|
||||
solar_radius = 300
|
||||
shape_name = NNM_SM_MINING
|
||||
hit_pts = 15000
|
||||
@@ -9551,6 +9562,24 @@ fuse = fuse_gas_collector_burning, 0, 30000
|
||||
explosion_arch = explosion_docking_ring
|
||||
destructible = true
|
||||
|
||||
[Solar]
|
||||
nickname = navy_satellite
|
||||
type = MISSION_SATELLITE
|
||||
;ids_name = 237031
|
||||
;ids_info = 300101
|
||||
DA_archetype = solar\misc\gas_collector.cmp
|
||||
material_library = solar\Solar_mat_misc01.mat
|
||||
material_library = fx\envmapbasic.mat
|
||||
envmap_material = envmapbasic
|
||||
LODranges = 0, 999999
|
||||
mass = 10000
|
||||
;loadout = li_cruiser_debris_front_wal_sm_load
|
||||
solar_radius = 1000
|
||||
destructible = true
|
||||
shape_name = NNM_SM_MINING
|
||||
explosion_arch = explosion_wplatform
|
||||
hit_pts = 2000
|
||||
|
||||
; Gravity Buoy Big
|
||||
|
||||
[Solar]
|
||||
|
||||
@@ -471,3 +471,50 @@ rem.AddInfoCard(500005, "Hokkaido->Chugoku")
|
||||
rem.AddInfoCard(500010, "Chugoku->Hokkaido")
|
||||
|
||||
|
||||
-- Single Player
|
||||
|
||||
rem.AddInfoCard(600000, "Launch your Ship")
|
||||
rem.AddInfoCard(600001, "Dock on Tradelane")
|
||||
rem.AddInfoCard(600002, "Fly to Westpoint Military Academy")
|
||||
rem.AddInfoCard(600003, "Dock on Westpoint Military Academy")
|
||||
rem.AddInfoCard(600004, "Dock on Tradelane")
|
||||
rem.AddInfoCard(600005, "Fly to the Destination Point")
|
||||
rem.AddInfoCard(600006, "Dock on Alaska Jumpgate")
|
||||
rem.AddInfoCard(600007, "Fly to the Destination Point")
|
||||
|
||||
rem.AddInfoCard(600017, "Junkers")
|
||||
rem.AddInfoCard(600018, "President Jacobi")
|
||||
rem.AddInfoCard(600019, "The Rebus")
|
||||
-- Exploration Arc I - West Point (West Point - Li01_09_Base)
|
||||
rem.AddInfoCard(600020, "Exploration Arc - West Point ")
|
||||
rem.AddInfoCard(600021, [[<?xml version="1.0" encoding="UTF-16"?><RDL><PUSH/><JUST loc="left"/><TEXT>Mission 01: Walker's Remembrence</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>Marcus Walker died when the Liberty Cruiser LNS Utah breaks a blockade at Zone 21. He sacrificed himself to help Jun'ko Zane and Edison Trent escape from the Alaska System.</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>President Jacobi says that she has a reliable source saying that an audio-log from Markus Walker exists. The task is to find the cruiser debris on Zone 21 and extract the audio-log and transmit it to West Point academy.</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT></TEXT><PARA/><JUST loc="left"/><TEXT>Objectives:</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>- Inverstigate the LNS Utah wreckage.</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>- Find and transmit the audio log to West Point.</TEXT><PARA/><JUST loc="left"/><POP/></RDL>]])
|
||||
rem.AddInfoCard(600022, "Find Walker’s Audio Log")
|
||||
rem.AddInfoCard(600023, "Fly to Zone 21 in the Alaska System")
|
||||
rem.AddInfoCard(600024, "Destroy the Cruiser's debris")
|
||||
rem.AddInfoCard(600025, "Tractor in the Audio Log")
|
||||
rem.AddInfoCard(600026, "Deliver the log to West Point Academy")
|
||||
rem.AddInfoCard(600027, [[<?xml version="1.0" encoding="UTF-16"?><RDL><PUSH/><JUST loc="left"/><TEXT>Mission 01: Walker's Remembrence</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>Status: Mission accomplished</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT></TEXT><PARA/><JUST loc="left"/><TEXT>The success of this mission and the sourcing of informations, was probably more important than it appeared. It's an unusal behaviour that the Liberty Rogues engaged on that mission because of this insignificant audio-log.</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>An investigation with the Neural-Net found some encrypted files hidden in some trace loops. There's no way to get on these informations, unless you have the key to unlock the files.</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>The current situation is a dead-end, so let's get into space for another mission.</TEXT><PARA/><JUST loc="left"/><POP/></RDL>]])
|
||||
rem.AddInfoCard(600028, "Enter the West Point Academy Bar")
|
||||
rem.AddInfoCard(600029, "Launch into Space")
|
||||
|
||||
|
||||
-- Story Arc I - Tour of Duty (Planet Manhattan - Li01_01_Base)
|
||||
rem.AddInfoCard(600030, "Story Arc I - Manhattan")
|
||||
rem.AddInfoCard(600031, [[<?xml version="1.0" encoding="UTF-16"?><RDL><PUSH/><JUST loc="left"/><TEXT>Mission 02: Tour of Duty</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>Harrison explains that the nomad incident changed the initial situation of the colonies. Political and military permissions are in transition, but also new conflicts arise. Only the highest government authorities know more about the reasons for these structural changes.</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>Liberty's government was considering a new taxation scheme aimed at the Junkers, that would impos tariffs on their scrap businesses in exchange for protection and infrastructure support. Many in the Junker community saw this as another attempt to restrict their hard fought independence.</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>Harrison is asking giving him an escort to Rochester Base in sector D3 in the New York System. As a new diplomat he needs to arrange an agreement between Liberty and the Junkers..</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT></TEXT><PARA/><JUST loc="left"/><TEXT>Objectives:</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>- Fly to Rochester Base.</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>- Negotiate an agreement with the Junkers.</TEXT><PARA/><JUST loc="left"/><POP/></RDL>]])
|
||||
rem.AddInfoCard(600032, "Negotiate an agreement with the Junkers")
|
||||
rem.AddInfoCard(600033, "Fly to Rochester Base")
|
||||
rem.AddInfoCard(600034, "Eliminate all Xenos")
|
||||
rem.AddInfoCard(600035, "Land on Rochester Base")
|
||||
rem.AddInfoCard(600036, [[<?xml version="1.0" encoding="UTF-16"?><RDL><PUSH/><JUST loc="left"/><TEXT>When we arrived sector D3 a few Xenos attacked Rochester Base. We joined the fight to support the Junkers. After the threat has been eliminated, we landed on Rochster Base to start the negotiations.</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>Harrison seems to have a good knack for it. The negotiations seems to went well.</TEXT><PARA/><JUST loc="left"/><POP/></RDL>]])
|
||||
|
||||
-- Story Arc Buffalo - Inner Corruption (Buffalo Station - Li01_12_Base)
|
||||
|
||||
rem.AddInfoCard(600040, "Story Arc - Buffalo")
|
||||
rem.AddInfoCard(600041, [[<?xml version="1.0" encoding="UTF-16"?><RDL><PUSH/><JUST loc="left"/><TEXT>Mission 01: Inner Corruption</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>After arriving at Buffalo Station, a female artificial intelligence unit linked with an underground news channel called the Rebus has been introduced: Revealing the truth about Liberty's intention, it's inner corruption and the lie to cover-up of the impacts of the nomad incident.</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>Through the complex security communication structure of the Rebus, independent freelancers are always required to gain information. Liberty transmitted their planned emergency action documents to their intel Navy Satellite near Maine. Based on our intelligence, this Navy Satellite near the icy moon Maine functions as a connection hub for communication networks used in covert operations and discreet messaging. Getting these documents will certainly have an impact to the further political events and the revelation of Liberty's political agendas.</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>Objectives:</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>- Destroy the Navy Satellite</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>- Obtain the latest emergency action documents from Liberty</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>- Deliver the files to the Rebus on Buffalo Base</TEXT><PARA/><JUST loc="left"/><POP/></RDL>]])
|
||||
rem.AddInfoCard(600042, "Obtain the Emergency Action Documents")
|
||||
rem.AddInfoCard(600043, "Destroy the Navy Satellite")
|
||||
rem.AddInfoCard(600044, "Tractor in the Emergency Action Documents")
|
||||
rem.AddInfoCard(600045, "Deliver the Documents to Buffalo")
|
||||
rem.AddInfoCard(600046, [[<?xml version="1.0" encoding="UTF-16"?><RDL><PUSH/><JUST loc="left"/><TEXT>>Mission 01: Inner Corruption</TEXT><PARA/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>Status: Mission accomplished</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT></TEXT><PARA/><JUST loc="left"/><TEXT>The Rebus was right. By obtaining the latest emergency action documents, there are some delicate information what hardliners of the Liberty authorities have planned as a reaction for the destruction of Freeport 7 and the Nomad incident.</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>These actions are primarely focussing to restrict the scope in what the The Rebus is acting. The political pressure is forcing President Jacobi to take action accordingly.</TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT></TEXT><PARA/><JUST loc="left"/><JUST loc="left"/><TEXT>It will take some time to evalute all captured documents. In the meantime the Lane Hackers are requesting some assistance with one of their patrols. Fly to Mactan Base in the Magellan System to start the mission.</TEXT><PARA/><JUST loc="left"/><POP/></RDL>]])
|
||||
rem.AddInfoCard(600047, "Fly to Mactan Base")
|
||||
rem.AddInfoCard(600048, "Land on Mactan Base")
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 869 KiB After Width: | Height: | Size: 1.0 MiB |
Binary file not shown.
|
Before Width: | Height: | Size: 526 KiB After Width: | Height: | Size: 869 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 526 KiB |
@@ -110,6 +110,7 @@ DLL = remres.dll ; Dynamic Infocards
|
||||
voices = audio\voices_mission11.ini ;dialogue specific to mission 11 (story & special supporting characters only - no reusable dialogue)
|
||||
voices = audio\voices_mission12.ini ;dialogue specific to mission 12 (story & special supporting characters only - no reusable dialogue)
|
||||
voices = audio\voices_mission13.ini ;dialogue specific to mission 13 (story & special supporting characters only - no reusable dialogue)
|
||||
voices = audio\voices_mission14.ini ;dialogue specific to mission 14 (story & special supporting characters only - no reusable dialogue)
|
||||
; voices = audio\voices_tutorial.ini ;dialogue specific to tutorial CUT on 20021211 MG
|
||||
|
||||
explosions = fx\explosions.ini
|
||||
|
||||
@@ -0,0 +1,182 @@
|
||||
// LICENSE
|
||||
// =======
|
||||
// Copyright (c) 2017-2019 Advanced Micro Devices, Inc. All rights reserved.
|
||||
// -------
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation
|
||||
// files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy,
|
||||
// modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
|
||||
// Software is furnished to do so, subject to the following conditions:
|
||||
// -------
|
||||
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
|
||||
// Software.
|
||||
// -------
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
||||
// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
|
||||
|
||||
//Initial port to ReShade: SLSNe https://gist.github.com/SLSNe/bbaf2d77db0b2a2a0755df581b3cf00c
|
||||
|
||||
//Optimizations by Marty McFly:
|
||||
// vectorized math, even with scalar gcn hardware this should work
|
||||
// out the same, order of operations has not changed
|
||||
// For some reason, it went from 64 to 48 instructions, a lot of MOV gone
|
||||
// Also modified the way the final window is calculated
|
||||
//
|
||||
// reordered min() and max() operations, from 11 down to 9 registers
|
||||
//
|
||||
// restructured final weighting, 49 -> 48 instructions
|
||||
//
|
||||
// delayed RCP to replace SQRT with RSQRT
|
||||
//
|
||||
// removed the saturate() from the control var as it is clamped
|
||||
// by UI manager already, 48 -> 47 instructions
|
||||
//
|
||||
// replaced tex2D with tex2Doffset intrinsic (address offset by immediate integer)
|
||||
// 47 -> 43 instructions
|
||||
// 9 -> 8 registers
|
||||
|
||||
//Further modified by OopyDoopy and Lord of Lunacy:
|
||||
// Changed wording in the UI for the existing variable and added a new variable and relevant code to adjust sharpening strength.
|
||||
|
||||
//Fix by Lord of Lunacy:
|
||||
// Made the shader use a linear colorspace rather than sRGB, as recommended by the original AMD documentation from FidelityFX.
|
||||
|
||||
//Modified by CeeJay.dk:
|
||||
// Included a label and tooltip description. I followed AMDs official naming guidelines for FidelityFX.
|
||||
//
|
||||
// Used gather trick to reduce the number of texture operations by one (9 -> 8). It's now 42 -> 51 instructions but still faster
|
||||
// because of the texture operation that was optimized away.
|
||||
|
||||
//Fix by CeeJay.dk
|
||||
// Fixed precision issues with the gather at super high resolutions
|
||||
// Also tried to refactor the samples so more work can be done while they are being sampled, but it's not so easy and the gains
|
||||
// I'm seeing are so small they might be statistical noise. So it MIGHT be faster - no promises.
|
||||
|
||||
//Fix by BC46
|
||||
// Removed the "0.5 * pixel" expressions in the DX10 or higher check.
|
||||
// With the use of dgVoodoo at least, the previous code caused the entire image to be blurry and slightly mispositioned.
|
||||
|
||||
uniform float Contrast <
|
||||
ui_type = "drag";
|
||||
ui_label = "Contrast Adaptation";
|
||||
ui_tooltip = "Adjusts the range the shader adapts to high contrast (0 is not all the way off). Higher values = more high contrast sharpening.";
|
||||
ui_min = 0.0; ui_max = 1.0;
|
||||
> = 0.0;
|
||||
|
||||
uniform float Sharpening <
|
||||
ui_type = "drag";
|
||||
ui_label = "Sharpening intensity";
|
||||
ui_tooltip = "Adjusts sharpening intensity by averaging the original pixels to the sharpened result. 1.0 is the unmodified default.";
|
||||
ui_min = 0.0; ui_max = 1.0;
|
||||
> = 1.0;
|
||||
|
||||
#include "ReShade.fxh"
|
||||
#define pixel float2(BUFFER_RCP_WIDTH, BUFFER_RCP_HEIGHT)
|
||||
|
||||
texture TexColor : COLOR;
|
||||
sampler sTexColor {Texture = TexColor; SRGBTexture = true;};
|
||||
|
||||
float3 CASPass(float4 vpos : SV_Position, float2 texcoord : TexCoord) : SV_Target
|
||||
{
|
||||
// fetch a 3x3 neighborhood around the pixel 'e',
|
||||
// a b c
|
||||
// d(e)f
|
||||
// g h i
|
||||
|
||||
|
||||
float3 b = tex2Doffset(sTexColor, texcoord, int2(0, -1)).rgb;
|
||||
float3 d = tex2Doffset(sTexColor, texcoord, int2(-1, 0)).rgb;
|
||||
|
||||
|
||||
#if __RENDERER__ >= 0xa000 // If DX10 or higher
|
||||
float4 red_efhi = tex2DgatherR(sTexColor, texcoord);
|
||||
|
||||
float3 e = float3( red_efhi.w, red_efhi.w, red_efhi.w);
|
||||
float3 f = float3( red_efhi.z, red_efhi.z, red_efhi.z);
|
||||
float3 h = float3( red_efhi.x, red_efhi.x, red_efhi.x);
|
||||
float3 i = float3( red_efhi.y, red_efhi.y, red_efhi.y);
|
||||
|
||||
float4 green_efhi = tex2DgatherG(sTexColor, texcoord);
|
||||
|
||||
e.g = green_efhi.w;
|
||||
f.g = green_efhi.z;
|
||||
h.g = green_efhi.x;
|
||||
i.g = green_efhi.y;
|
||||
|
||||
float4 blue_efhi = tex2DgatherB(sTexColor, texcoord);
|
||||
|
||||
e.b = blue_efhi.w;
|
||||
f.b = blue_efhi.z;
|
||||
h.b = blue_efhi.x;
|
||||
i.b = blue_efhi.y;
|
||||
|
||||
|
||||
#else // If DX9
|
||||
float3 e = tex2D(sTexColor, texcoord).rgb;
|
||||
float3 f = tex2Doffset(sTexColor, texcoord, int2(1, 0)).rgb;
|
||||
|
||||
float3 h = tex2Doffset(sTexColor, texcoord, int2(0, 1)).rgb;
|
||||
float3 i = tex2Doffset(sTexColor, texcoord, int2(1, 1)).rgb;
|
||||
|
||||
#endif
|
||||
|
||||
float3 g = tex2Doffset(sTexColor, texcoord, int2(-1, 1)).rgb;
|
||||
float3 a = tex2Doffset(sTexColor, texcoord, int2(-1, -1)).rgb;
|
||||
float3 c = tex2Doffset(sTexColor, texcoord, int2(1, -1)).rgb;
|
||||
|
||||
|
||||
// Soft min and max.
|
||||
// a b c b
|
||||
// d e f * 0.5 + d e f * 0.5
|
||||
// g h i h
|
||||
// These are 2.0x bigger (factored out the extra multiply).
|
||||
float3 mnRGB = min(min(min(d, e), min(f, b)), h);
|
||||
float3 mnRGB2 = min(mnRGB, min(min(a, c), min(g, i)));
|
||||
mnRGB += mnRGB2;
|
||||
|
||||
float3 mxRGB = max(max(max(d, e), max(f, b)), h);
|
||||
float3 mxRGB2 = max(mxRGB, max(max(a, c), max(g, i)));
|
||||
mxRGB += mxRGB2;
|
||||
|
||||
// Smooth minimum distance to signal limit divided by smooth max.
|
||||
float3 rcpMRGB = rcp(mxRGB);
|
||||
float3 ampRGB = saturate(min(mnRGB, 2.0 - mxRGB) * rcpMRGB);
|
||||
|
||||
// Shaping amount of sharpening.
|
||||
ampRGB = rsqrt(ampRGB);
|
||||
|
||||
float peak = -3.0 * Contrast + 8.0;
|
||||
float3 wRGB = -rcp(ampRGB * peak);
|
||||
|
||||
float3 rcpWeightRGB = rcp(4.0 * wRGB + 1.0);
|
||||
|
||||
// 0 w 0
|
||||
// Filter shape: w 1 w
|
||||
// 0 w 0
|
||||
float3 window = (b + d) + (f + h);
|
||||
float3 outColor = saturate((window * wRGB + e) * rcpWeightRGB);
|
||||
|
||||
return lerp(e, outColor, Sharpening);
|
||||
}
|
||||
|
||||
technique ContrastAdaptiveSharpen
|
||||
<
|
||||
ui_label = "AMD FidelityFX Contrast Adaptive Sharpening";
|
||||
ui_tooltip =
|
||||
"CAS is a low overhead adaptive sharpening algorithm that AMD includes with their drivers.\n"
|
||||
"This port to ReShade works with all cards from all vendors,\n"
|
||||
"but cannot do the optional scaling that CAS is normally also capable of when activated in the AMD drivers.\n"
|
||||
"\n"
|
||||
"The algorithm adjusts the amount of sharpening per pixel to target an even level of sharpness across the image.\n"
|
||||
"Areas of the input image that are already sharp are sharpened less, while areas that lack detail are sharpened more.\n"
|
||||
"This allows for higher overall natural visual sharpness with fewer artifacts.";
|
||||
>
|
||||
{
|
||||
pass
|
||||
{
|
||||
VertexShader = PostProcessVS;
|
||||
PixelShader = CASPass;
|
||||
SRGBWriteEnable = true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,140 @@
|
||||
// Copyright (c) 2016-2018, bacondither
|
||||
// All rights reserved.
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions
|
||||
// are met:
|
||||
// 1. Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer
|
||||
// in this position and unchanged.
|
||||
// 2. Redistributions in binary form must reproduce the above copyright
|
||||
// notice, this list of conditions and the following disclaimer in the
|
||||
// documentation and/or other materials provided with the distribution.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
|
||||
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
// Colourfulness - version 2018-11-12
|
||||
// EXPECTS FULL RANGE GAMMA LIGHT
|
||||
|
||||
#include "ReShadeUI.fxh"
|
||||
|
||||
uniform float colourfulness < __UNIFORM_SLIDER_FLOAT1
|
||||
ui_min = -1.0; ui_max = 2.0;
|
||||
ui_tooltip = "Degree of colourfulness, 0 = neutral";
|
||||
ui_step = 0.01;
|
||||
> = 0.4;
|
||||
|
||||
uniform float lim_luma < __UNIFORM_SLIDER_FLOAT1
|
||||
ui_min = 0.1; ui_max = 1.0;
|
||||
ui_tooltip = "Lower values allows for more change near clipping";
|
||||
ui_step = 0.01;
|
||||
> = 0.7;
|
||||
|
||||
uniform bool enable_dither <
|
||||
ui_tooltip = "Enables dithering, avoids introducing banding in gradients";
|
||||
ui_category = "Dither";
|
||||
> = false;
|
||||
|
||||
uniform bool col_noise <
|
||||
ui_tooltip = "Coloured dither noise, lower subjective noise level";
|
||||
ui_category = "Dither";
|
||||
> = true;
|
||||
|
||||
uniform float backbuffer_bits <
|
||||
ui_min = 1.0; ui_max = 32.0;
|
||||
ui_tooltip = "Backbuffer bith depth, most likely 8 or 10 bits";
|
||||
ui_category = "Dither";
|
||||
> = 8.0;
|
||||
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
#ifndef fast_luma
|
||||
#define fast_luma 1 // Rapid approx of sRGB gamma, small difference in quality
|
||||
#endif
|
||||
|
||||
#ifndef temporal_dither
|
||||
#define temporal_dither 0 // Dither changes with every frame
|
||||
#endif
|
||||
//-------------------------------------------------------------------------------------------------
|
||||
|
||||
#include "ReShade.fxh"
|
||||
|
||||
#if (temporal_dither == 1)
|
||||
uniform int rnd < source = "random"; min = 0; max = 1000; >;
|
||||
#endif
|
||||
|
||||
// Sigmoid function, sign(v)*pow(pow(abs(v), -2) + pow(s, -2), 1.0/-2)
|
||||
#define soft_lim(v,s) ( (v*s)*rcp(sqrt(s*s + v*v)) )
|
||||
|
||||
// Weighted power mean, p = 0.5
|
||||
#define wpmean(a,b,w) ( pow(abs(w)*sqrt(abs(a)) + abs(1-w)*sqrt(abs(b)), 2) )
|
||||
|
||||
// Max/Min RGB components
|
||||
#define maxRGB(c) ( max((c).r, max((c).g, (c).b)) )
|
||||
#define minRGB(c) ( min((c).r, min((c).g, (c).b)) )
|
||||
|
||||
// Mean of Rec. 709 & 601 luma coefficients
|
||||
#define lumacoeff float3(0.2558, 0.6511, 0.0931)
|
||||
|
||||
float3 Colourfulness(float4 vpos : SV_Position, float2 tex : TEXCOORD) : SV_Target
|
||||
{
|
||||
#if (fast_luma == 1)
|
||||
float3 c0 = tex2D(ReShade::BackBuffer, tex).rgb;
|
||||
float luma = sqrt(dot(saturate(c0*abs(c0)), lumacoeff));
|
||||
c0 = saturate(c0);
|
||||
#else // Better approx of sRGB gamma
|
||||
float3 c0 = saturate(tex2D(ReShade::BackBuffer, tex).rgb);
|
||||
float luma = pow(dot(pow(c0 + 0.06, 2.4), lumacoeff), 1.0/2.4) - 0.06;
|
||||
#endif
|
||||
|
||||
// Calc colour saturation change
|
||||
float3 diff_luma = c0 - luma;
|
||||
float3 c_diff = diff_luma*(colourfulness + 1) - diff_luma;
|
||||
|
||||
if (colourfulness > 0.0)
|
||||
{
|
||||
// 120% of c_diff clamped to max visible range + overshoot
|
||||
float3 rlc_diff = clamp((c_diff*1.2) + c0, -0.0001, 1.0001) - c0;
|
||||
|
||||
// Calc max saturation-increase without altering RGB ratios
|
||||
float poslim = (1.0002 - luma)/(abs(maxRGB(diff_luma)) + 0.0001);
|
||||
float neglim = (luma + 0.0002)/(abs(minRGB(diff_luma)) + 0.0001);
|
||||
|
||||
float3 diffmax = diff_luma*min(min(poslim, neglim), 32) - diff_luma;
|
||||
|
||||
// Soft limit diff
|
||||
c_diff = soft_lim( c_diff, max(wpmean(diffmax, rlc_diff, lim_luma), 1e-7) );
|
||||
}
|
||||
|
||||
if (enable_dither == true)
|
||||
{
|
||||
// Interleaved gradient noise by Jorge Jimenez
|
||||
const float3 magic = float3(0.06711056, 0.00583715, 52.9829189);
|
||||
#if (temporal_dither == 1)
|
||||
float xy_magic = (vpos.x + rnd)*magic.x + (vpos.y + rnd)*magic.y;
|
||||
#else
|
||||
float xy_magic = vpos.x*magic.x + vpos.y*magic.y;
|
||||
#endif
|
||||
float noise = (frac(magic.z*frac(xy_magic)) - 0.5)/(exp2(backbuffer_bits) - 1);
|
||||
c_diff += col_noise == true ? float3(-noise, noise, -noise) : noise;
|
||||
}
|
||||
|
||||
return saturate(c0 + c_diff);
|
||||
}
|
||||
|
||||
technique Colourfulness
|
||||
{
|
||||
pass
|
||||
{
|
||||
VertexShader = PostProcessVS;
|
||||
PixelShader = Colourfulness;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
/**
|
||||
* HDR
|
||||
* by Christian Cann Schuldt Jensen ~ CeeJay.dk
|
||||
*
|
||||
* Not actual HDR - It just tries to mimic an HDR look (relatively high performance cost)
|
||||
*/
|
||||
|
||||
#include "ReShadeUI.fxh"
|
||||
|
||||
uniform float HDRPower < __UNIFORM_SLIDER_FLOAT1
|
||||
ui_min = 0.0; ui_max = 8.0;
|
||||
ui_label = "Power";
|
||||
> = 1.30;
|
||||
uniform float radius1 < __UNIFORM_SLIDER_FLOAT1
|
||||
ui_min = 0.0; ui_max = 8.0;
|
||||
ui_label = "Radius 1";
|
||||
> = 0.793;
|
||||
uniform float radius2 < __UNIFORM_SLIDER_FLOAT1
|
||||
ui_min = 0.0; ui_max = 8.0;
|
||||
ui_label = "Radius 2";
|
||||
ui_tooltip = "Raising this seems to make the effect stronger and also brighter.";
|
||||
> = 0.87;
|
||||
|
||||
#include "ReShade.fxh"
|
||||
|
||||
float3 HDRPass(float4 vpos : SV_Position, float2 texcoord : TexCoord) : SV_Target
|
||||
{
|
||||
float3 color = tex2D(ReShade::BackBuffer, texcoord).rgb;
|
||||
|
||||
float3 bloom_sum1 = tex2D(ReShade::BackBuffer, texcoord + float2(1.5, -1.5) * radius1 * BUFFER_PIXEL_SIZE).rgb;
|
||||
bloom_sum1 += tex2D(ReShade::BackBuffer, texcoord + float2(-1.5, -1.5) * radius1 * BUFFER_PIXEL_SIZE).rgb;
|
||||
bloom_sum1 += tex2D(ReShade::BackBuffer, texcoord + float2( 1.5, 1.5) * radius1 * BUFFER_PIXEL_SIZE).rgb;
|
||||
bloom_sum1 += tex2D(ReShade::BackBuffer, texcoord + float2(-1.5, 1.5) * radius1 * BUFFER_PIXEL_SIZE).rgb;
|
||||
bloom_sum1 += tex2D(ReShade::BackBuffer, texcoord + float2( 0.0, -2.5) * radius1 * BUFFER_PIXEL_SIZE).rgb;
|
||||
bloom_sum1 += tex2D(ReShade::BackBuffer, texcoord + float2( 0.0, 2.5) * radius1 * BUFFER_PIXEL_SIZE).rgb;
|
||||
bloom_sum1 += tex2D(ReShade::BackBuffer, texcoord + float2(-2.5, 0.0) * radius1 * BUFFER_PIXEL_SIZE).rgb;
|
||||
bloom_sum1 += tex2D(ReShade::BackBuffer, texcoord + float2( 2.5, 0.0) * radius1 * BUFFER_PIXEL_SIZE).rgb;
|
||||
|
||||
bloom_sum1 *= 0.005;
|
||||
|
||||
float3 bloom_sum2 = tex2D(ReShade::BackBuffer, texcoord + float2(1.5, -1.5) * radius2 * BUFFER_PIXEL_SIZE).rgb;
|
||||
bloom_sum2 += tex2D(ReShade::BackBuffer, texcoord + float2(-1.5, -1.5) * radius2 * BUFFER_PIXEL_SIZE).rgb;
|
||||
bloom_sum2 += tex2D(ReShade::BackBuffer, texcoord + float2( 1.5, 1.5) * radius2 * BUFFER_PIXEL_SIZE).rgb;
|
||||
bloom_sum2 += tex2D(ReShade::BackBuffer, texcoord + float2(-1.5, 1.5) * radius2 * BUFFER_PIXEL_SIZE).rgb;
|
||||
bloom_sum2 += tex2D(ReShade::BackBuffer, texcoord + float2( 0.0, -2.5) * radius2 * BUFFER_PIXEL_SIZE).rgb;
|
||||
bloom_sum2 += tex2D(ReShade::BackBuffer, texcoord + float2( 0.0, 2.5) * radius2 * BUFFER_PIXEL_SIZE).rgb;
|
||||
bloom_sum2 += tex2D(ReShade::BackBuffer, texcoord + float2(-2.5, 0.0) * radius2 * BUFFER_PIXEL_SIZE).rgb;
|
||||
bloom_sum2 += tex2D(ReShade::BackBuffer, texcoord + float2( 2.5, 0.0) * radius2 * BUFFER_PIXEL_SIZE).rgb;
|
||||
|
||||
bloom_sum2 *= 0.010;
|
||||
|
||||
float dist = radius2 - radius1;
|
||||
float3 HDR = (color + (bloom_sum2 - bloom_sum1)) * dist;
|
||||
float3 blend = HDR + color;
|
||||
color = pow(abs(blend), abs(HDRPower)) + HDR; // pow - don't use fractions for HDRpower
|
||||
|
||||
return saturate(color);
|
||||
}
|
||||
|
||||
technique HDR
|
||||
{
|
||||
pass
|
||||
{
|
||||
VertexShader = PostProcessVS;
|
||||
PixelShader = HDRPass;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,492 @@
|
||||
/*
|
||||
Magic Bloom by luluco250
|
||||
Attempts to simulate a natural-looking bloom.
|
||||
|
||||
Features:
|
||||
|
||||
--Wide bloom blurring, derived from the gaussian function
|
||||
defined here: https://en.wikipedia.org/wiki/Gaussian_blur#Mathematics
|
||||
|
||||
--Eye adaptation, decreases or increases the brightness
|
||||
of bloom according to the overall image luminance.
|
||||
|
||||
--Lens dirt, as standard I suppose. Really not much here.
|
||||
It uses an image named "MagicBloom_Dirt.png" so make
|
||||
sure you have one in your textures directory.
|
||||
|
||||
--Unwanted features can be disabled through
|
||||
preprocessor definitions, saving performance.
|
||||
|
||||
Preprocessor definitions:
|
||||
|
||||
--MAGICBLOOM_ADAPT_RESOLUTION:
|
||||
Determines the width/height of the texture used for adaptation.
|
||||
It is recommended to use 256, but you can use as far as 1024 without issues.
|
||||
Too low resolutions will make adaptation seem "unstable".
|
||||
Must be a power of two value: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 etc.
|
||||
|
||||
--MAGICBLOOM_BLUR_PRECALCULATED:
|
||||
If set to 0 the gaussian blur will be calculated inside the shader.
|
||||
Otherwise, it uses a pre-calculated kernel (array).
|
||||
|
||||
--MAGICBLOOM_NODIRT:
|
||||
If set to 1 all lens dirt related features are disabled.
|
||||
Beneficial for performance if you don't wish to use lens dirt.
|
||||
|
||||
--MAGICBLOOM_NOADAPT:
|
||||
If set to 1 all adaptation related features are disabled.
|
||||
Beneficial for performance if you don't wish to use adaptation.
|
||||
|
||||
MIT Licensed:
|
||||
|
||||
Copyright (c) 2017 luluco250
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "ReShade.fxh"
|
||||
|
||||
//Statics
|
||||
|
||||
#ifndef MAGICBLOOM_ADAPT_RESOLUTION
|
||||
#define MAGICBLOOM_ADAPT_RESOLUTION 256
|
||||
#endif
|
||||
|
||||
#ifndef MAGICBLOOM_BLUR_PRECALCULATED
|
||||
#define MAGICBLOOM_BLUR_PRECALCULATED 1
|
||||
#endif
|
||||
|
||||
#ifndef MAGICBLOOM_NODIRT
|
||||
#define MAGICBLOOM_NODIRT 0
|
||||
#endif
|
||||
|
||||
#ifndef MAGICBLOOM_NOADAPT
|
||||
#define MAGICBLOOM_NOADAPT 0
|
||||
#endif
|
||||
|
||||
static const int iBlurSamples = 4;
|
||||
static const int iAdaptResolution = MAGICBLOOM_ADAPT_RESOLUTION;
|
||||
|
||||
#define CONST_LOG2(v) (((v) & 0xAAAAAAAA) != 0) | ((((v) & 0xFFFF0000) != 0) << 4) | ((((v) & 0xFF00FF00) != 0) << 3) | ((((v) & 0xF0F0F0F0) != 0) << 2) | ((((v) & 0xCCCCCCCC) != 0) << 1)
|
||||
|
||||
static const float sigma = float(iBlurSamples) / 2.0;
|
||||
static const float double_pi = 6.283185307179586476925286766559;
|
||||
static const int lowest_mip = CONST_LOG2(iAdaptResolution) + 1;
|
||||
static const float3 luma_value = float3(0.2126, 0.7152, 0.0722);
|
||||
|
||||
//Uniforms
|
||||
|
||||
#include "ReShadeUI.fxh"
|
||||
|
||||
uniform float fBloom_Intensity < __UNIFORM_SLIDER_FLOAT1
|
||||
ui_label = "Bloom Intensity";
|
||||
ui_tooltip = "Amount of bloom applied to the image.";
|
||||
ui_min = 0.0;
|
||||
ui_max = 10.0;
|
||||
ui_step = 0.001;
|
||||
> = 1.0;
|
||||
|
||||
uniform float fBloom_Threshold <
|
||||
ui_label = "Bloom Threshold";
|
||||
ui_tooltip =
|
||||
"Thresholds (limits) dark pixels from being accounted for bloom.\n"
|
||||
"Essentially, it increases the contrast in bloom and blackens darker pixels.\n"
|
||||
"At 1.0 all pixels are used in bloom.\n"
|
||||
"This value is not normalized, it is exponential, therefore changes in lower values are more noticeable than at higher values.";
|
||||
ui_type = "drag";
|
||||
ui_min = 1.0;
|
||||
ui_max = 10.0;
|
||||
ui_step = 0.1;
|
||||
> = 2.0;
|
||||
|
||||
#if !MAGICBLOOM_NODIRT
|
||||
uniform float fDirt_Intensity < __UNIFORM_SLIDER_FLOAT1
|
||||
ui_label = "Dirt Intensity";
|
||||
ui_tooltip =
|
||||
"Amount of lens dirt applied to bloom.\n"
|
||||
"Uses a texture called \"MagicBloom_Dirt.png\" from your textures directory(ies).";
|
||||
ui_min = 0.0;
|
||||
ui_max = 1.0;
|
||||
ui_step = 0.001;
|
||||
> = 0.0;
|
||||
#endif
|
||||
|
||||
#if !MAGICBLOOM_NOADAPT
|
||||
uniform float fExposure < __UNIFORM_SLIDER_FLOAT1
|
||||
ui_label = "Exposure";
|
||||
ui_tooltip =
|
||||
"The target exposure that bloom adapts to.\n"
|
||||
"It is recommended to just leave it at 0.5, unless you wish for a brighter (1.0) or darker (0.0) image.";
|
||||
ui_min = 0.0;
|
||||
ui_max = 1.0;
|
||||
ui_step = 0.001;
|
||||
> = 0.5;
|
||||
|
||||
uniform float fAdapt_Speed <
|
||||
ui_label = "Adaptation Speed";
|
||||
ui_tooltip =
|
||||
"How quick bloom adapts to changes in the image brightness.\n"
|
||||
"At 1.0, changes are instantaneous.\n"
|
||||
"It is recommended to use low values, between 0.01 and 0.1.\n"
|
||||
"0.1 will provide a quick but natural adaptation.\n"
|
||||
"0.01 will provide a slow form of adaptation.";
|
||||
ui_type = "drag";
|
||||
ui_min = 0.001;
|
||||
ui_max = 1.0;
|
||||
ui_step = 0.001;
|
||||
> = 0.1;
|
||||
|
||||
uniform float fAdapt_Sensitivity < __UNIFORM_SLIDER_FLOAT1
|
||||
ui_label = "Adapt Sensitivity";
|
||||
ui_tooltip =
|
||||
"How sensitive adaptation is towards brightness.\n"
|
||||
"At higher values bloom can get darkened at the slightest amount of brightness.\n"
|
||||
"At lower values bloom will require a lot of image brightness before it's fully darkened."
|
||||
"1.0 will not modify the amount of brightness that is accounted for adaptation.\n"
|
||||
"0.5 is a good value, but may miss certain bright spots.";
|
||||
ui_min = 0.0;
|
||||
ui_max = 3.0;
|
||||
ui_step = 0.001;
|
||||
> = 1.0;
|
||||
|
||||
uniform float2 f2Adapt_Clip < __UNIFORM_SLIDER_FLOAT2
|
||||
ui_label = "Adaptation Min/Max";
|
||||
ui_tooltip =
|
||||
"Determines the minimum and maximum values that adaptation can determine to ajust bloom.\n"
|
||||
"Reducing the maximum would cause bloom to be brighter (as it is less adapted).\n"
|
||||
"Increasing the minimum would cause bloom to be darker (as it is more adapted).\n"
|
||||
"Keep the maximum above or equal to the minium and vice-versa.";
|
||||
ui_min = 0.0;
|
||||
ui_max = 1.0;
|
||||
ui_step = 0.001;
|
||||
> = float2(0.0, 1.0);
|
||||
|
||||
uniform int iAdapt_Precision < __UNIFORM_SLIDER_INT1
|
||||
ui_label = "Adaptation Precision";
|
||||
ui_tooltip =
|
||||
"Determins how accurately bloom adapts to the center of image.\n"
|
||||
"At 0 the adaptation is calculated from the average of the whole image.\n"
|
||||
"At the highest value (which may vary) adaptation focuses solely on the center pixel(s) of the screen.\n"
|
||||
"Values closer to 0 are recommended.";
|
||||
ui_min = 0;
|
||||
ui_max = lowest_mip;
|
||||
ui_step = 0.1;
|
||||
> = lowest_mip * 0.3;
|
||||
#endif
|
||||
|
||||
uniform uint iDebug <
|
||||
ui_label = "Debug Options";
|
||||
ui_tooltip = "Contains debugging options like displaying the bloom texture.";
|
||||
ui_type = "combo";
|
||||
ui_items = "None\0Display Bloom Texture\0";
|
||||
> = 0;
|
||||
|
||||
//Textures
|
||||
|
||||
texture tMagicBloom_1 < pooled = true; > { Width = BUFFER_WIDTH / 2; Height = BUFFER_HEIGHT / 2; Format = RGBA16F; };
|
||||
texture tMagicBloom_2 < pooled = true; > { Width = BUFFER_WIDTH / 4; Height = BUFFER_HEIGHT / 4; Format = RGBA16F; };
|
||||
texture tMagicBloom_3 < pooled = true; > { Width = BUFFER_WIDTH / 8; Height = BUFFER_HEIGHT / 8; Format = RGBA16F; };
|
||||
texture tMagicBloom_4 < pooled = true; > { Width = BUFFER_WIDTH / 16; Height = BUFFER_HEIGHT / 16; Format = RGBA16F; };
|
||||
texture tMagicBloom_5 < pooled = true; > { Width = BUFFER_WIDTH / 32; Height = BUFFER_HEIGHT / 32; Format = RGBA16F; };
|
||||
texture tMagicBloom_6 < pooled = true; > { Width = BUFFER_WIDTH / 64; Height = BUFFER_HEIGHT / 64; Format = RGBA16F; };
|
||||
texture tMagicBloom_7 < pooled = true; > { Width = BUFFER_WIDTH / 128; Height = BUFFER_HEIGHT / 128; Format = RGBA16F; };
|
||||
texture tMagicBloom_8 < pooled = true; > { Width = BUFFER_WIDTH / 256; Height = BUFFER_HEIGHT / 256; Format = RGBA16F; };
|
||||
#if !MAGICBLOOM_NOADAPT
|
||||
texture tMagicBloom_Small { Width = iAdaptResolution; Height = iAdaptResolution; Format = R32F; MipLevels = lowest_mip; };
|
||||
texture tMagicBloom_Adapt { Format = R32F; };
|
||||
texture tMagicBloom_LastAdapt { Format = R32F; };
|
||||
#endif
|
||||
#if !MAGICBLOOM_NODIRT
|
||||
texture tMagicBloom_Dirt <source="MagicBloom_Dirt.png";> { Width = BUFFER_WIDTH; Height = BUFFER_HEIGHT; };
|
||||
#endif
|
||||
|
||||
//Samplers
|
||||
|
||||
sampler sMagicBloom_1 { Texture = tMagicBloom_1; };
|
||||
sampler sMagicBloom_2 { Texture = tMagicBloom_2; };
|
||||
sampler sMagicBloom_3 { Texture = tMagicBloom_3; };
|
||||
sampler sMagicBloom_4 { Texture = tMagicBloom_4; };
|
||||
sampler sMagicBloom_5 { Texture = tMagicBloom_5; };
|
||||
sampler sMagicBloom_6 { Texture = tMagicBloom_6; };
|
||||
sampler sMagicBloom_7 { Texture = tMagicBloom_7; };
|
||||
sampler sMagicBloom_8 { Texture = tMagicBloom_8; };
|
||||
#if !MAGICBLOOM_NOADAPT
|
||||
sampler sMagicBloom_Small { Texture = tMagicBloom_Small; };
|
||||
sampler sMagicBloom_Adapt { Texture = tMagicBloom_Adapt; MinFilter = POINT; MagFilter = POINT; };
|
||||
sampler sMagicBloom_LastAdapt { Texture = tMagicBloom_LastAdapt; MinFilter = POINT; MagFilter = POINT; };
|
||||
#endif
|
||||
#if !MAGICBLOOM_NODIRT
|
||||
sampler sMagicBloom_Dirt { Texture = tMagicBloom_Dirt; };
|
||||
#endif
|
||||
|
||||
//Functions
|
||||
|
||||
#if !MAGICBLOOM_BLUR_PRECALCULATED
|
||||
float gaussian_function(float2 i) {
|
||||
static const float first_part = 1.0 / (double_pi * pow(sigma, 2.0));
|
||||
static const float second_part_a = 1.0 / (2.0 * pow(sigma, 2.0));
|
||||
float second_part_b = (pow(i.x, 2.0) + pow(i.y, 2.0)) * second_part_a;
|
||||
return first_part * exp(-second_part_b);
|
||||
}
|
||||
#endif
|
||||
|
||||
//Why use a single-pass blur? To reduce the amount of textures used in half.
|
||||
//Scale should be the original resolution divided by target resolution.
|
||||
float3 blur(sampler sp, float2 uv, float scale) {
|
||||
float2 ps = BUFFER_PIXEL_SIZE * scale;
|
||||
|
||||
#if MAGICBLOOM_BLUR_PRECALCULATED
|
||||
static const float kernel[9] = {
|
||||
0.0269955, 0.0647588, 0.120985, 0.176033, 0.199471, 0.176033, 0.120985, 0.0647588, 0.0269955
|
||||
};
|
||||
static const float accum = 1.02352;
|
||||
#else
|
||||
float accum = 0.0;
|
||||
#endif
|
||||
|
||||
float gaussian_weight = 0.0;
|
||||
float3 col = 0.0;
|
||||
|
||||
[loop]
|
||||
for (int x = -iBlurSamples; x <= iBlurSamples; ++x) {
|
||||
for (int y = -iBlurSamples; y <= iBlurSamples; ++y) {
|
||||
#if MAGICBLOOM_BLUR_PRECALCULATED
|
||||
gaussian_weight = kernel[x + iBlurSamples] * kernel[y + iBlurSamples];
|
||||
#else
|
||||
gaussian_weight = gaussian_function(float2(x, y));
|
||||
accum += gaussian_weight;
|
||||
#endif
|
||||
col += tex2D(sp, uv + ps * float2(x, y)).rgb * gaussian_weight;
|
||||
}
|
||||
}
|
||||
|
||||
#if MAGICBLOOM_BLUR_PRECALCULATED
|
||||
return col * accum;
|
||||
#else
|
||||
return col / accum;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
Uncharted 2 Tonemapper
|
||||
|
||||
Thanks John Hable and Naughty Dog.
|
||||
*/
|
||||
float3 tonemap(float3 col, float exposure) {
|
||||
static const float A = 0.15; //shoulder strength
|
||||
static const float B = 0.50; //linear strength
|
||||
static const float C = 0.10; //linear angle
|
||||
static const float D = 0.20; //toe strength
|
||||
static const float E = 0.02; //toe numerator
|
||||
static const float F = 0.30; //toe denominator
|
||||
static const float W = 11.2; //linear white point value
|
||||
|
||||
col *= exposure;
|
||||
|
||||
col = ((col * (A * col + C * B) + D * E) / (col * (A * col + B) + D * F)) - E / F;
|
||||
static const float white = 1.0 / (((W * (A * W + C * B) + D * E) / (W * (A * W + B) + D * F)) - E / F);
|
||||
col *= white;
|
||||
return col;
|
||||
}
|
||||
|
||||
float3 blend_screen(float3 a, float3 b) {
|
||||
return 1.0 - (1.0 - a) * (1.0 - b);
|
||||
}
|
||||
|
||||
/*
|
||||
The function below is a leftover from debugging.
|
||||
It just draws a line on the screen, it's horizontal position being
|
||||
the value you specify (from 0.0-1.0, becoming left-right).
|
||||
No use now but might be useful later on so I just left it here.
|
||||
*/
|
||||
/*void debug_value(inout float3 col, float2 uv, float value, float3 needle_color) {
|
||||
static const float2 ps = BUFFER_PIXEL_SIZE;
|
||||
col = (uv.x + ps.x > value && uv.x - ps.x < value) ? needle_color : col;
|
||||
}*/
|
||||
|
||||
//Shaders
|
||||
|
||||
/*
|
||||
Thresholding is performed on the first blur for two reasons:
|
||||
--Save an entire texture from being used to threshold.
|
||||
--Being the smallest blur it also results in the least amount of artifacts.
|
||||
*/
|
||||
float4 PS_Blur1(float4 pos : SV_Position, float2 uv : TEXCOORD) : SV_Target {
|
||||
float3 col = blur(ReShade::BackBuffer, uv, 2.0);
|
||||
col = pow(abs(col), fBloom_Threshold);
|
||||
col *= fBloom_Intensity;
|
||||
return float4(col, 1.0);
|
||||
}
|
||||
|
||||
float4 PS_Blur2(float4 pos : SV_Position, float2 uv : TEXCOORD) : SV_Target {
|
||||
return float4(blur(sMagicBloom_1, uv, 4.0), 1.0);
|
||||
}
|
||||
|
||||
float4 PS_Blur3(float4 pos : SV_Position, float2 uv : TEXCOORD) : SV_Target {
|
||||
return float4(blur(sMagicBloom_2, uv, 8.0), 1.0);
|
||||
}
|
||||
|
||||
float4 PS_Blur4(float4 pos : SV_Position, float2 uv : TEXCOORD) : SV_Target {
|
||||
return float4(blur(sMagicBloom_3, uv, 8.0), 1.0);
|
||||
}
|
||||
|
||||
float4 PS_Blur5(float4 pos : SV_Position, float2 uv : TEXCOORD) : SV_Target {
|
||||
return float4(blur(sMagicBloom_4, uv, 16.0), 1.0);
|
||||
}
|
||||
|
||||
float4 PS_Blur6(float4 pos : SV_Position, float2 uv : TEXCOORD) : SV_Target {
|
||||
return float4(blur(sMagicBloom_5, uv, 32.0), 1.0);
|
||||
}
|
||||
|
||||
float4 PS_Blur7(float4 pos : SV_Position, float2 uv : TEXCOORD) : SV_Target {
|
||||
return float4(blur(sMagicBloom_6, uv, 64.0), 1.0);
|
||||
}
|
||||
|
||||
float4 PS_Blur8(float4 pos : SV_Position, float2 uv : TEXCOORD) : SV_Target {
|
||||
return float4(blur(sMagicBloom_7, uv, 128.0), 1.0);
|
||||
}
|
||||
|
||||
//Final blend shader
|
||||
float4 PS_Blend(float4 pos : SV_Position, float2 uv : TEXCOORD) : SV_Target {
|
||||
float3 col = tex2D(ReShade::BackBuffer, uv).rgb;
|
||||
float3 bloom = tex2D(sMagicBloom_1, uv).rgb
|
||||
+ tex2D(sMagicBloom_2, uv).rgb
|
||||
+ tex2D(sMagicBloom_3, uv).rgb
|
||||
+ tex2D(sMagicBloom_4, uv).rgb
|
||||
+ tex2D(sMagicBloom_5, uv).rgb
|
||||
+ tex2D(sMagicBloom_6, uv).rgb
|
||||
+ tex2D(sMagicBloom_7, uv).rgb
|
||||
+ tex2D(sMagicBloom_8, uv).rgb;
|
||||
//Dunno if making the division by 8 a static multiplication helps, but whatever.
|
||||
static const float bloom_accum = 1.0 / 8.0;
|
||||
bloom *= bloom_accum;
|
||||
|
||||
#if !MAGICBLOOM_NOADAPT
|
||||
float exposure = fExposure / max(tex2D(sMagicBloom_Adapt, 0.0).x, 0.00001);
|
||||
bloom = tonemap(bloom, exposure);
|
||||
#else
|
||||
//Without adaptation it seems 100.0 exposure is needed for bloom to look bright enough.
|
||||
bloom = tonemap(bloom, 100.0);
|
||||
#endif
|
||||
|
||||
#if !MAGICBLOOM_NODIRT
|
||||
float3 dirt = tex2D(sMagicBloom_Dirt, uv).rgb;
|
||||
dirt *= fDirt_Intensity;
|
||||
bloom = blend_screen(bloom, dirt * bloom);
|
||||
#endif
|
||||
|
||||
col = blend_screen(col, bloom);
|
||||
|
||||
//If we're to display the bloom texture, we replace col with it.
|
||||
col = iDebug == 1 ? bloom : col;
|
||||
|
||||
return float4(col, 1.0);
|
||||
}
|
||||
|
||||
#if !MAGICBLOOM_NOADAPT
|
||||
/*
|
||||
How adaptation works:
|
||||
--Calculate image luminance.
|
||||
--Save it to a smaller, mipmapped texture.
|
||||
--Mipmaps require a power of 2 texture.
|
||||
--Fetch a mipmap level according to a specfied amount of precision.
|
||||
--The lowest mipmap is simply an average of the entire image.
|
||||
*/
|
||||
float PS_GetSmall(float4 pos : SV_Position, float2 uv : TEXCOORD) : SV_Target {
|
||||
return dot(tex2D(ReShade::BackBuffer, uv).rgb, luma_value);
|
||||
}
|
||||
|
||||
float PS_GetAdapt(float4 pos : SV_Position, float2 uv : TEXCOORD) : SV_Target {
|
||||
float curr = tex2Dlod(sMagicBloom_Small, float4(0.5, 0.5, 0, lowest_mip - iAdapt_Precision)).x;
|
||||
curr *= fAdapt_Sensitivity;
|
||||
curr = clamp(curr, f2Adapt_Clip.x, f2Adapt_Clip.y);
|
||||
float last = tex2D(sMagicBloom_LastAdapt, 0.0).x;
|
||||
//Using the frametime/delta here would actually scale adaptation with the framerate.
|
||||
//We don't want that, so we don't even bother with it.
|
||||
return lerp(last, curr, fAdapt_Speed);
|
||||
}
|
||||
|
||||
float PS_SaveAdapt(float4 pos : SV_Position, float2 uv : TEXCOORD) : SV_Target {
|
||||
return tex2D(sMagicBloom_Adapt, 0.0).x;
|
||||
}
|
||||
#endif
|
||||
|
||||
technique MagicBloom {
|
||||
pass Blur1 {
|
||||
VertexShader = PostProcessVS;
|
||||
PixelShader = PS_Blur1;
|
||||
RenderTarget = tMagicBloom_1;
|
||||
}
|
||||
pass Blur2 {
|
||||
VertexShader = PostProcessVS;
|
||||
PixelShader = PS_Blur2;
|
||||
RenderTarget = tMagicBloom_2;
|
||||
}
|
||||
pass Blur3 {
|
||||
VertexShader = PostProcessVS;
|
||||
PixelShader = PS_Blur3;
|
||||
RenderTarget = tMagicBloom_3;
|
||||
}
|
||||
pass Blur4 {
|
||||
VertexShader = PostProcessVS;
|
||||
PixelShader = PS_Blur4;
|
||||
RenderTarget = tMagicBloom_4;
|
||||
}
|
||||
pass Blur5 {
|
||||
VertexShader = PostProcessVS;
|
||||
PixelShader = PS_Blur5;
|
||||
RenderTarget = tMagicBloom_5;
|
||||
}
|
||||
pass Blur6 {
|
||||
VertexShader = PostProcessVS;
|
||||
PixelShader = PS_Blur6;
|
||||
RenderTarget = tMagicBloom_6;
|
||||
}
|
||||
pass Blur7 {
|
||||
VertexShader = PostProcessVS;
|
||||
PixelShader = PS_Blur7;
|
||||
RenderTarget = tMagicBloom_7;
|
||||
}
|
||||
pass Blur8 {
|
||||
VertexShader = PostProcessVS;
|
||||
PixelShader = PS_Blur8;
|
||||
RenderTarget = tMagicBloom_8;
|
||||
}
|
||||
pass Blend {
|
||||
VertexShader = PostProcessVS;
|
||||
PixelShader = PS_Blend;
|
||||
}
|
||||
#if !MAGICBLOOM_NOADAPT
|
||||
pass GetSmall {
|
||||
VertexShader = PostProcessVS;
|
||||
PixelShader = PS_GetSmall;
|
||||
RenderTarget = tMagicBloom_Small;
|
||||
}
|
||||
pass GetAdapt {
|
||||
VertexShader = PostProcessVS;
|
||||
PixelShader = PS_GetAdapt;
|
||||
RenderTarget = tMagicBloom_Adapt;
|
||||
}
|
||||
pass SaveAdapt {
|
||||
VertexShader = PostProcessVS;
|
||||
PixelShader = PS_SaveAdapt;
|
||||
RenderTarget = tMagicBloom_LastAdapt;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
/**
|
||||
* Tonemap version 1.1
|
||||
* by Christian Cann Schuldt Jensen ~ CeeJay.dk
|
||||
*/
|
||||
|
||||
#include "ReShadeUI.fxh"
|
||||
|
||||
uniform float Gamma < __UNIFORM_SLIDER_FLOAT1
|
||||
ui_min = 0.0; ui_max = 2.0;
|
||||
ui_tooltip = "Adjust midtones. 1.0 is neutral. This setting does exactly the same as the one in Lift Gamma Gain, only with less control.";
|
||||
> = 1.0;
|
||||
uniform float Exposure < __UNIFORM_SLIDER_FLOAT1
|
||||
ui_min = -1.0; ui_max = 1.0;
|
||||
ui_tooltip = "Adjust exposure";
|
||||
> = 0.0;
|
||||
uniform float Saturation < __UNIFORM_SLIDER_FLOAT1
|
||||
ui_min = -1.0; ui_max = 1.0;
|
||||
ui_tooltip = "Adjust saturation";
|
||||
> = 0.0;
|
||||
|
||||
uniform float Bleach < __UNIFORM_SLIDER_FLOAT1
|
||||
ui_min = 0.0; ui_max = 1.0;
|
||||
ui_tooltip = "Brightens the shadows and fades the colors";
|
||||
> = 0.0;
|
||||
|
||||
uniform float Defog < __UNIFORM_SLIDER_FLOAT1
|
||||
ui_min = 0.0; ui_max = 1.0;
|
||||
ui_tooltip = "How much of the color tint to remove";
|
||||
> = 0.0;
|
||||
uniform float3 FogColor < __UNIFORM_COLOR_FLOAT3
|
||||
ui_label = "Defog Color";
|
||||
ui_tooltip = "Which color tint to remove";
|
||||
> = float3(0.0, 0.0, 1.0);
|
||||
|
||||
|
||||
#include "ReShade.fxh"
|
||||
|
||||
float3 TonemapPass(float4 position : SV_Position, float2 texcoord : TexCoord) : SV_Target
|
||||
{
|
||||
float3 color = tex2D(ReShade::BackBuffer, texcoord).rgb;
|
||||
color = saturate(color - Defog * FogColor * 2.55); // Defog
|
||||
color *= pow(2.0f, Exposure); // Exposure
|
||||
color = pow(color, Gamma); // Gamma
|
||||
|
||||
const float3 coefLuma = float3(0.2126, 0.7152, 0.0722);
|
||||
float lum = dot(coefLuma, color);
|
||||
|
||||
float L = saturate(10.0 * (lum - 0.45));
|
||||
float3 A2 = Bleach * color;
|
||||
|
||||
float3 result1 = 2.0f * color * lum;
|
||||
float3 result2 = 1.0f - 2.0f * (1.0f - lum) * (1.0f - color);
|
||||
|
||||
float3 newColor = lerp(result1, result2, L);
|
||||
float3 mixRGB = A2 * newColor;
|
||||
color += ((1.0f - A2) * mixRGB);
|
||||
|
||||
float3 middlegray = dot(color, (1.0 / 3.0));
|
||||
float3 diffcolor = color - middlegray;
|
||||
color = (color + diffcolor * Saturation) / (1 + (diffcolor * Saturation)); // Saturation
|
||||
|
||||
return color;
|
||||
}
|
||||
|
||||
technique Tonemap
|
||||
{
|
||||
pass
|
||||
{
|
||||
VertexShader = PostProcessVS;
|
||||
PixelShader = TonemapPass;
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 558 KiB |
Reference in New Issue
Block a user