HomeiOS DevelopmentConcentrating on the Steam Deck with Godot

Concentrating on the Steam Deck with Godot


Embark on an exhilarating gaming journey with the proper pairing: Godot, the versatile and user-friendly open-source sport engine, and the Steam Deck, an thrilling handheld gaming gadget by Valve. This dynamic duo opens up a world of potentialities, empowering sport builders and fans alike to unleash their creativity and expertise gaming on the transfer like by no means earlier than!

Be aware: If you happen to’re new to Godot, I like to recommend trying out my Getting Began information for a fast introduction.

On this tutorial, I’ll information you thru the method of getting ready a Godot mission particularly for the Steam Deck, sharing priceless ideas alongside the way in which. The Steam Deck, developed by Valve, is a handheld gaming gadget that basically capabilities as a transportable PC, enabling you to take pleasure in your Steam library whereas on the transfer. With handheld gaming units gaining immense reputation, creating for the Steam Deck can open doorways to thrilling alternatives. Godot, an open-source sport engine, is gaining recognition for its user-friendly interface and highly effective options. This makes it a really perfect selection for creating each 2D and 3D video games.

Getting Began

You’ll be able to obtain the supplies for this tutorials through the Obtain Supplies hyperlink on the prime and backside of this web page.
To observe alongside, you’ll want the next:

  • Godot put in in your laptop
  • A Steam Deck to push the construct to
  • (elective) A gamepad to arrange and take a look at the enter in Godot

After finishing this tutorial, you’ll be accustomed to:

  • Understanding the Steam Deck {hardware}
  • Organising your Godot mission for the Steam Deck
  • Detecting the Steam Deck
  • Dealing with enter
  • Sport efficiency concerns and testing

Understanding the Steam Deck {Hardware}

Earlier than delving into Godot, it’s a good suggestion to take a better have a look at what makes the Steam Deck tick.

Specs

Right here’s an summary of the Steam Deck’s specs:

  • CPU: Customized Zen 2 AMD APU
  • GPU: AMD RDNA 2 “Van Gogh”
  • RAM: 16 GB LPDDR5 on-board RAM
  • Display screen: 7-inch touchscreen with a 16:10 side ratio, 1280×800 decision
  • Enter Controls: Xbox controller buttons, bumpers, triggers and D-pad + trackpads and touchscreen
  • Connectivity: USB-C, Bluetooth, Wi-Fi
  • Battery: 40 watt-hour (2-8 hours of gameplay)
  • Storage: 64 GB eMMC or 256-512 GB NVMe SSD
  • Working System: SteamOS (KDE Linux)
  • Value: $399-$649

Concerns for Sport Growth

You is likely to be questioning what all of this implies within the context of sport improvement.

For a small gadget at an inexpensive worth, the Steam Deck packs a punch. The Steam Deck is much more highly effective than the Nintendo Change, however not on par with fashionable desktops. If you wish to evaluate it to a gaming PC, it gives about the identical efficiency as a GTX 1050 or an AMD Radeon RX 560. This implies you’ll want to contemplate its limitations when creating for it. Easy video games will work high-quality, however extra complicated video games will have to be optimized in an effort to run easily.

The small display and low decision make it tough to learn high-quality textures and character animations. It is best to enlarge UI parts like textual content to make them simpler to learn. This can be a good apply anyway by way of accessibility.

An amazing upside is the Steam Deck’s controller format. In case your sport helps Xbox controller enter, will probably be suitable with the Steam Deck with none further work. Gamers may also customise the format to their liking utilizing the Steam Deck’s controller settings, which may map keyboard, gamepad and mouse enter to the gadget’s controls. Some folks have even made MMORPGs work with the Steam Deck this manner, that are identified for his or her considerable keyboard shortcuts.

As a result of the Steam Deck has a battery, you’ll need enable for shorter play periods and optimize your sport for battery life. Ideally, the participant can tweak the settings between battery life and efficiency.

I gained’t be masking sort out all of those concerns on this tutorial, however make certain to maintain them in thoughts. It’s a good suggestion to check how effectively your sport runs on the Steam Deck earlier than optimizing it. You is likely to be stunned by how effectively it runs with none changes.

Up subsequent is having a look on the pattern mission.

Exploring the Undertaking

This mission is a small 3D automobile driving sandbox impressed by Micro Machines. There’s a monitor and some mountains to drive on.

Working the Undertaking

Begin by opening the starter mission in Godot. It is best to see a 3D scene with a automobile.

3D car

Press F5 to run the mission and drive the automobile round. Listed below are the controls:

  • A or Left: Steer left
  • D or Proper: Steer proper
  • W, Up or House: Speed up
  • S or Down: Brake
  • Ctrl/Cmd: Change the digital camera view

Driving car around

After testing the mission, check out the Scene dock of the degree scene.

Level nodes

Right here’s a fast rundown:

  • CameraManager: A daily node with a script connected to modify the energetic digital camera
  • WorldEnvironment: The lightning settings for the extent
  • DirectionalLight3D: A directional mild that acts as a digital solar
  • BirdsEyeCamera: A digital camera that follows the automobile from above
  • LevelModel: The 3D mannequin and colliders that represents the extent
  • Automotive: The automobile scene
  • CanvasLayer: The canvas on which you’ll be able to add Management nodes to make a consumer interface. There’s already a label right here with a clear background.

You’ll construct upon these nodes all through the tutorial.

Undertaking Settings

Out of the field, new Godot initiatives are able to be run on the Steam Deck. Nevertheless, there’s one setting I like to recommend altering throughout improvement: the viewport dimension. The default worth is about to 1152×648, which doesn’t match the 1280×800 decision of the Steam Deck. By setting the viewport dimension to match, it’s simpler to preview what the sport will seem like on the precise gadget.

To vary the viewport dimension, open the Undertaking Settings by deciding on Undertaking ▸ Undertaking Settings.

Project Settings

Now choose Window on the left.

Window

Subsequent, set the Viewport Width to 1280 and Viewport Peak to 800.

Viewport width 1280 height 800

Lastly, click on the Shut button to shut the window. Open the 2D display utilizing the tabs on the prime, and also you’ll see a blue define within the middle display in case you zoom out. These are the bounds of the display you’ll be working in.

Blue outline in viewport

With that out of the way in which, it’s time to get to the enjoyable components!

Detecting the Steam Deck

Godot doesn’t have a built-in variable to find out if a tool is a Steam Deck. What it does have is a set of capabilities that may learn each the software program and {hardware} info from the gadget. From this info, you’ll be able to detect if the gadget is a Steam Deck if what to search for. To do this, you’ll be able to add a script to the data label on the prime left which can show the knowledge and detect in case your mission is operating on a Steam Deck.

First, choose CanvasLayer ▸ Information ▸ MarginContainer ▸ SystemInfoLabel within the Scene dock.

SystemInfoLabel

Now connect a brand new script to the label, title it system_info_label.gd and place it within the scripts folder.

Label path

This could routinely open the Script display and show the brand new script. To learn the system info and add it to the label, exchange the _ready operate with the next:

func _ready() -> void:
    self.textual content = "" # 1

    self.textual content += "OS: " + OS.get_name() + "n" # 2
    self.textual content += "Distro: " + OS.get_distribution_name() + "n" # 3
    self.textual content += "CPU: " + OS.get_processor_name() + "n" # 4
    self.textual content += "GPU: " + RenderingServer.get_rendering_device().get_device_name() + "n" # 5

Right here’s a abstract of what this does:

  1. Clear the textual content of the label
  2. Use OS.get_name() to return the title of the working system the construct targets. Confusingly, this gained’t at all times match the title of the particular OS. The n provides a brand new line on the finish.
  3. OS.get_distribution_name() returns the title of the distribution. On Home windows (and Proton), that is “Home windows”. On Linux, that is the title of the distribution, similar to “Ubuntu” or “SteamOS”.
  4. The OS.get_processor_name() operate returns the title of the CPU.
  5. RenderingServer.get_rendering_device().get_device_name() returns the title of the GPU.

Now press F5 to avoid wasting the script and run the mission. It is best to now see the system info within the data label

Main pc System Specs

If you happen to would export and run this mission in your Steam Deck at this level, you’ll see that the system data is crammed in appropriately.
Right here’s the consequence with a local Linux construct:

Steam Deck info on Linux

And right here’s the consequence with a Home windows construct:

Steam Deck info on Windows

I’ll cowl export and run this mission on the Steam Deck in a while on this tutorial. For now, crucial factor to remove is what the Steam Deck studies as its CPU and GPU:

  • CPU: AMD Customized APU 0405
  • GPU: AMD Customized GPU 0405 (RADV VANGOGH)

Primarily based on this info, you’ll be able to detect in case your mission is operating on a Steam Deck. To take action, add the next operate to the system_info_label.gd script:

func _is_steam_deck() -> bool: # 1
    if RenderingServer.get_rendering_device().get_device_name().accommodates("RADV VANGOGH") 
    or OS.get_processor_name().accommodates("AMD CUSTOM APU 0405"): # 2
        return true
    else: # 3
        return false

This operate will return true if the Steam Deck is detected, and false in any other case:

  1. This can be a operate named _is_steam_deck which returns a boolean worth.
  2. If the title of the GPU accommodates the string “RADV VANGOGH” or the CPU title accommodates the string “AMD CUSTOM APU 0405”, it returns true.
  3. In any other case, it returns false.

Now add this line to the _ready operate:

    self.textual content += "Steam Deck: " + str(_is_steam_deck()) + "n"

This may present true or false relying on if the mission is operating on a Steam Deck. Run the mission once more to see the consequence.

Steam Deck false

On an precise Steam Deck, this can be true in fact!
Listed below are some strategies on what you are able to do with this info:

  • Allow gamepad assist
  • Present button prompts and different graphics particular to the Steam Deck
  • Robotically alter efficiency settings to run optimally
  • Transfer and resize UI parts for higher readability
  • Collect analytics to enhance the mission’s efficiency

Dealing with Enter

The Steam Deck has enter controls and a touchscreen. On this part you’ll learn to get the enter from the Steam Deck and use it in your mission.

Enter Map Setup

The enter from the Steam Deck’s controller will be mapped in Godot as in case you had been utilizing an Xbox controller.
To begin off, check out the present actions within the enter map by deciding on Undertaking ▸ Undertaking Settings ▸ Enter Map.

Actions

The actions outlined within the enter map are:

  • speed up
  • brake
  • left
  • proper
  • switch_camera

For every of those actions, you’ll want so as to add a brand new gamepad occasion to assist enter from a sport controller. Listed below are the mappings I’ll be utilizing:

  • speed up : Proper set off
  • brake : Left set off
  • left : Left analog stick left
  • proper : Left analog stick proper
  • switch_camera : Y button

You’ll be able to change these mappings as you favor, or add further ones. To map a brand new occasion to an motion, click on the + button subsequent to the motion’s title.

Plus button next to accelerate

Subsequent, both press or transfer the enter you need to bind to the motion in your gamepad. If you happen to don’t have a gamepad, you’ll be able to choose the occasion beneath Joypad Buttons or Joypad Axes. For the speed up motion for instance, you’d press the proper set off.

Pressing right trigger

Now click on the OK button on the backside left to substantiate including the occasion. You’ll now see that the occasion has been added to the enter map.

Added event

Now do the identical for the opposite actions till all of them have gamepad occasions.

All events

To check if the gamepad occasions are working, run the mission once more whereas utilizing a gamepad.

Test drive

Nice! That’s all you’ll want to do to assist the Steam Deck’s controller. Subsequent up is utilizing the touchscreen.

Touchscreen Enter

Though the Steam Deck has a touchscreen, it shouldn’t be the first strategy to work together together with your sport because of the small display dimension its decrease sensitivity in comparison with a smartphone. Nevertheless, you’ll be able to add easy buttons or detect movement occasions as an elective characteristic.

For example, you’ll be including a button to the nook of the display to modify the digital camera view.

Camera button

So as to add the button, begin by including a Button node to CanvasLayer by right-clicking the CanvasLayer node and deciding on Add Little one Node. Subsequent, seek for “Button” within the search bar on the prime, choose Button and click on the Create button so as to add it.

Add button

This could’ve added a brand new Button node under the CanvasLayer node.

Button

Choose this new button and rename it to CameraSwitchButton by right-clicking it and deciding on Rename or by urgent F2. Now change to the 2D mode to see choice field across the button on the prime left. You could have to zoom in to get a greater view.

Selected button

For the time being, there’s not a lot to see. To vary that, drag the camera_switch.png picture from the sprites folder within the FileSystem dock onto the Icon subject within the Inspector.

Drag button icon

The button will now be loads bigger, with an icon within the center.

Icon in button

To get the button to the highest proper as an alternative of the highest left, change its anchor preset to Prime Proper through the Anchor dropdown within the toolbar.

Top Right Anchor

This strikes the button to the highest proper as anticipated. To provide it a small offset from the perimeters of the display, maintain down Shift and press the left arrow key in your keyboard adopted by the down arrow key. This creates a couple of pixels of area from the perimeters.

Move button away from edges

To stop the button from being pressed by chance when urgent keyboard or gamepad button, it’s greatest to disable the main target mode of the button. You are able to do this by scrolling down within the Inspector, increasing Focus beneath the Management part and deciding on None from the Mode dropdown.

Change focus mode to none

Nice! All that’s left for this button is to hook up its pressed sign to the switch_camera operate of the CameraManager node. Change to the Node tab within the Inspector and double-click the pressed() sign.

Pressed signal

This opens a sign connection dialog window the place you’ll be able to select a operate to name when the button is pressed. Now choose the CameraManager node and click on the Choose button. This may open a listing of capabilities that may be referred to as.

CameraManager Pick

Subsequent, choose the switch_camera operate and click on the OK button.

switch camera function

Again within the sign connection dialog, click on the Join button on the backside to complete the connection.
Right here’s what the switch_camera operate appears to be like like:

func switch_camera() -> void:
    if birds_eye_camera.present:
        behind_car_camera.present = true
    else:
        behind_car_camera.present = false

This toggles the energetic digital camera between the behind the automobile digital camera and the birds eye digital camera. With the button all arrange, it’s time for one more take a look at drive!
Fireplace up the mission once more utilizing F5 and take a look at if the button works as anticipated.

Toggle camera view

The mission is now completed! Time to check it on an actual Steam Deck.

Exporting Builds

You’ll be creating each a Home windows and a Linux construct for the Steam Deck. This makes it simple to check what kind of construct will provide the perfect efficiency.
First off, choose Undertaking ▸ Export… within the prime menu to open the Export Presets menu.

Select Export

Now click on the Add… button on the prime and add a Linux/X11 export preset.

Add linux preset

Be aware: If you happen to get an error on the backside saying “No export template discovered”, click on the Handle Export Templates hyperlink and obtain the template through the Export Template Supervisor.

Now set the Export Path to any folder in your PC, ideally a folder that syncs to the Steam Deck.

Set export path

So as to add the Home windows export preset, click on the Add… button once more and choose Home windows Desktop this time. Subsequent, choose an Export Path simply as you probably did for the Linux preset.
Now click on the Export All… button on the backside proper to export the mission utilizing each presets. For the export mode, select Debug. This may construct each a Home windows and a Linux construct within the folders you specified.

Export all and debug

With the mission exported, now you can take a look at them on the Steam Deck. If you happen to’re undecided switch and run your builds to the Steam Deck, check out the Tips on how to Switch Sport Builds to a Steam Deck article.

Sport Efficiency

The Steam Deck comes with a nifty efficiency overlay built-in that exhibits you ways laborious the CPU and GPU are working. By inspecting the knowledge this overlay supplies, you may get a greater understanding of how your sport is performing.

Working the Linux Construct

To begin off, run the native Linux construct first and take a look at if every little thing is working appropriately. It is best to be capable to management the automobile utilizing the built-in gamepad and clicking the digital camera button on the display switches the digital camera view. The system data ought to say you’re operating the mission on a Linux-based OS named SteamOS and the Steam Deck flag must be set to true.

Linux build info

Now allow the efficiency overlay by clicking the three dotted button on the backside proper of your Steam Deck and deciding on the battery icon within the Fast Entry menu. From right here, slide the Efficiency Overlay Degree to 4.

Set performance overlay

Subsequent, check out the left aspect of the display to see all of the efficiency info you may ever need.

Performance info

It is likely to be a bit laborious to see what’s happening due to the background, however right here’s a fast overview from prime to backside:

  • GPU: GPU utilization, temperature, clock pace and energy draw
  • CPU: CPU utilization, temperature, clock pace and energy draw
  • CPU cores: The utilization per CPU core, with its clock pace
  • VRAM: The quantity of VRAM utilized by the GPU to render the sport
  • RAM: Quantity of RAM utilized by the sport
  • BATT: The quantity of battery life left, the overall energy draw and the approximate time left earlier than the battery runs out
  • FAN: The fan pace in rotations per minute
  • FSR: Whether or not FSR (Constancy Tremendous Decision) is enabled or not
  • GAMESCOPE: The body time and body rely

Crucial metric out of all of those is the body time. If the inexperienced line is flat on a regular basis, then your sport will really feel clean because it’ll run at a steady 60 FPS. Nevertheless, if the inexperienced line is consistently leaping up and down, then your sport will really feel uneven and laggy. There’s no strategy to completely keep away from some choppiness when instantiating new scenes and whereas the shaders are compiling, however throughout the primary sport loop, the body charge must be steady.

To get an thought of how graphically demanding your sport is, check out the GPU clock pace. The upper the quantity, the extra demanding the sport is. The Steam Deck tends to attempt to use the least quantity of energy attainable, so it clocks down its 1.6 GHz (1600MHz) GPU at any time when it will probably. Within the case of the automobile sport, it tends to hover between 1050 and 1100 MHz.
To know the quantity of leeway you’ve by way of graphical efficiency, you’ll be able to manually set the GPU clock pace through the efficiency settings. Press the three dotted button once more and scroll all the way down to Guide GPU Clock Management within the Efficiency part. Now verify the checkbox subsequent Guide GPU Clock Management and slide GPU Clock Frequency to 1600. This may lock the GPU clock pace to its highest attainable worth for optimum efficiency.

Set GPU clock 1600

If you happen to now exit the menu and take one other have a look at the GPU clock, you’ll discover it’s now set to 1600MHz.

GPU clock 1600

The share above the clock pace is now way more priceless, as this means how a lot your sport is utilizing the GPU in easy phrases. Because the automobile sport isn’t optimized in any means, the GPU utilization is someplace between 58% and 70% more often than not, which is surprisingly excessive for such a easy sport.

The CPU utilization is less complicated to identify, as you simply want to have a look at the CPU utilization proportion. The upper the quantity, the extra demanding the sport is by way of CPU utilization.

CPU usage

Now exit the Linux construct of the sport because it’s time to maneuver over to the Home windows construct.

Working the Home windows Construct

Begin up the Home windows construct and check out the system data on the prime left. As a substitute exhibiting the precise OS, it says the sport is operating inside Home windows. The Steam Deck flag is about to true although as anticipated.

Windows build info

The rationale why it says Home windows right here as an alternative of Linux like with the opposite construct is as a result of Home windows executables are run inside a Proton compatibility layer. Video games operating like it will “suppose” they’re operating on a Home windows machine. Some video games run higher beneath Proton than their native counterparts, whereas some gained’t work in any respect. It’s greatest to check out your video games totally earlier than deciding what model you need to suggest for the Steam Deck.

Now lock the GPU clock to 1600 once more and examine the efficiency of the Home windows construct.

Windows performance

The sport is operating nearly an identical to the Linux construct, so on this case the native Linux construct is likely to be the best choice. It’s a good suggestion to maintain testing each sorts of builds as your sport will increase in complexity.

The place to Go From Right here?

Congratulations! You’ve arrange a Godot mission for the Steam Deck, exported it and did some primary efficiency testing. You’ll be able to obtain the ultimate mission on the prime or backside of this tutorial.

If you happen to’re caught, don’t hesitate to hunt assist from the Godot group by means of their Discord, boards, or different platforms. You can too attain out through the Kodeco Discord and by becoming a member of the dialogue under.
If you happen to create one thing cool for the Steam Deck utilizing Godot, don’t neglect to share it!

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments