I really just want sharp assets on all devices.
Your best bet is using the
disabled scaling mode, and using high-resolution assets (since Godot does not support vectors directly, like SVG).
A good bet is using assets that have 2× higher resolution than needed on typical screens (eg. if a sprite covers a 64x64 area in the project, then import a 128x128 image), although it still won't be enough for screens with extremely high DPI (some devices can reach over 500 DPI!). If you design your sprites using vector software, it is very easy to export high-resolution versions.
That said, here's the difference between
viewport scaling modes:
disabled: while the framebuffer will be resized to match the game window, nothing will be upscaled or downscaled (this includes GUIs).
2d: the framebuffer is still resized, but GUIs can be upscaled or downscaled. This can result in blurry or pixelated fonts.
viewport: the framebuffer is resized, but computed at the original size of the project. The whole rendering will be pixelated. You generally do not want this, unless it's part of the game style.