• 4 Posts
  • 19 Comments
Joined 1 year ago
cake
Cake day: June 18th, 2023

help-circle
  • This worked perfectly - thank you!!

    For anyone else looking here later, the final shader code (confirmed working Godot 4.2) is:

    shader_type canvas_item;
    
    uniform sampler2D screen_texture : hint_screen_texture;
    uniform vec4 water_color : source_color;
    uniform sampler2D wave_noise : repeat_enable;
    
    void fragment() {
    	vec2 water_wave = (texture(wave_noise, UV * TIME * 0.02).rg - 0.5) * 0.02;
    	vec2 uv = vec2(SCREEN_UV.x , SCREEN_UV.y - UV.y) + water_wave;
    	vec4 color = texture(screen_texture, uv);
    	float mix_value = 1.0 - UV.y;
    
    	float avg_color = (color.r + color.g + color.b) / 3.0;
    	avg_color = pow(avg_color, 1.4);
    	mix_value += avg_color;
    
    	mix_value = clamp(mix_value, 0.0, 0.7);
    	COLOR = vec4(mix(water_color, color, mix_value).rgb, texture(TEXTURE, UV).a);
    }
    

    Credits to Single-mindedRyan for creating this shader in the first place.




  • Thought I’d post an update. Performance is better now, playing in 1440p with FSR2 on Balanced, graphic settings on Medium. I’m getting around 45FPS.

    I’m not quite sure what the fix was in the end, but I’ve installed proton-ge-custom-bin from the AUR, so I’ve got Proton GE installed onto my system (not just within Heroic). Both the AUR and Heroic are on Proton-GE 9.7. I then added the AlanWake2.exe file to Steam, and forced compatibility to use Proton GE. So whatever extra was happening with Heroic was taken away.

    I tried changing my Mesa drivers, but it appears Manjaro is even with the nonfree repo at this point, so I’m still on Mesa 24.1.1, only on the Manjaro-approved version, not the mainline Arch version.

    It appears that somewhere within that combination of (1) running the game directly from Steam, (2) using the system-installed Proton-GE package, and (3) reverting to the Manjaro Mesa package the framerate got bumped from lower 20-s to mid-40s. CPU and GPU usage still hover around the 40%, so I feel there would be more improvement to be had perhaps?

    I tested the game on my second PC, which is running ChimeraOS, has a 5800X3D chip, 32Gb RAM and a 7600 XT card, where it’s easily hitting these framerates and better (but with higher GPU usage, hardly any CPU usage, that 5800X3D is a beast). So I wonder if my 10700K might be a bit of a bottleneck? ChimeraOS’ version of Mesa is on 23.2 so maybe there are just some kinks to be worked out in the 24.1 branch?

    Anyway… long story short: I’m happy with the overall performance at this point. Happy to dive into the Overlap and deal with Nightingale!




  • Hi, sorry, the non-free is a very Manjaro-specific thing.

    TLDR: They removed a lot of proprietary video codecs from Mesa, which means that Manjaro’s Mesa tends to lag behind the Arch repo. By using nonfree, the Mesa installation is pulled and compiled straight from Arch.

    So yes, I’m using RADV through Mesa 24.1.1 instead of version 23.x (which is where Manjaro is still at). I wanted to be on a newer version since 24.x packed in a lot of 7000XT improvements.

    Out of curiosity, have you tried AW2 with your 7800XT? How does it run for you?











  • Managed to fix it by using await get_tree().process_frame instead. It seems that idle_frame appears to no longer exist in Godot 4.1?

    So my full code for triggering the screenshot function is:

    func _on_SaveReport_pressed():
    	await get_tree().process_frame
    	$"%SaveReport".visible = false
    	$"%BackMainMenu".visible = false
    	await get_tree().process_frame
    	
    	take_screenshot()
    
    	$"%SaveReport".visible = true
    	$"%BackMainMenu".visible = true
    

    For some reason, I have to await before I turn the interface elements off, and after I’ve turned them off. It now works a treat for my app. Thank you for your assistance!


  • await get_tree().idle_frame

    Thank you for this! I just tried it out but unfortunately Godot throws an error on await get_tree().idle_frame : Invalid get index 'idle_frame' (on base: 'SceneTree').

    Could it be because I’m running in application mode, which only refreshes the screen if there’s an update?

    As an alternative, I’ve put the code to turn things off into its own function:

    func turn_off():
    	$"%SaveReport".visible = false
    	$"%BackMainMenu".visible = false
    

    I’ve then tried an await turn_off()

    The code runs, but doesn’t do anything and the screenshot still gets saved with the buttons visible.

    I’m trying both await functions just before the take_screenshot() function like so:

    	await turn_off()
    	await get_tree().idle_frame
    	
    	take_screenshot()
    

    Am I missing something very obvious here? Any help would be much appreciated!