### Godot version

v4.0.stable.official [92bee43ad]

### System information

Linux Ubuntu 22.04 with Unity desktop

### Issue description

In a shader using uniform parameters of type vec3 and vec4, the way defaults work is inconsistent.

* vec3 param => OK, default is (0, 0, 0) and explicit default is honored
* vec3 param : source_color => OK, default is black and explicit default is honored
* vec4 param => not OK, default is (0, 0, 0, 0) but explicit default is ignored and keeps using (0, 0, 0, 0)
* vec4 param : source_color => OK, default is white and explicit default is honored

So there are two issues:
* vec4 param without source_color hint ignores explicit default
* vec3 and vec4 react differently when source_color is used but there is no explicit default, to pick a default

Here is a sum-up screenshot of the default values for each case:

EDIT: I realized some vec3 labels are incorrect: since there is no alpha, Clear should be Black and Alpha Gray should just be Gray. This also means that it's normal that the source_color preview looks different on vec4 for those two.

![image](https://user-images.githubusercontent.com/1067772/226680399-e1d43ee8-9e35-457a-a3da-6e91fcfba3c1.png)

### Steps to reproduce

1. Open the sample project attached, open the demo scene
2. Click on Sprite2D
3. In the inspector, unfold Material info and check the shader values (there should be no Revert button visible, so they are the default values). You should see the same inconsistent values as in the screenshot above
4. When an explicit default value is set, you can also modify the value and click on the Revert button to make sure that we refreshed to the last default values


### Minimal reproduction project

[v4.0 - Shader vec3 vec4 default inconsistencies.zip](https://github.com/godotengine/godot/files/11031311/v4.0.-.Shader.vec3.vec4.default.inconsistencies.zip)
is_none_group_undefined = false;
				PropertyInfo info;
				info.usage = PROPERTY_USAGE_GROUP;
				info.name = "Shader Parameters";
				info.hint_string = "shader_parameter/";
				groups["<None>"]["<None>"].push_back(info);
				vgroups.push_back(Pair<String, LocalVector<String>>("<None>", { "<None>" }));
			}
			PropertyInfo info = E->get();
			info.name = "shader_parameter/" + info.name;
			if (!param_cache.has(E->get().name)) {
				
				Variant default_value = RenderingServer::get_singleton()->shader_get_parameter_default(shader->get_rid(), E->get().name);
				param_cache.insert(E->get().name, default_value);
				remap_cache.insert(info.name, E->get().name);
			}
			groups[last_group][last_subgroup].push_back(info);
		}
		for (const Pair<String, LocalVector<String>> &group_pair : vgroups) {
			String group = group_pair.first;
			for (const String &subgroup : group_pair.second) {
				List<PropertyInfo> &prop_infos = groups[group][subgroup];
				for (List<PropertyInfo>::Element *item = prop_infos.front(); item; item = item->next()) {
					p_list->push_back(item->get());
				}
			}
		}
	}
}
bool ShaderMaterial::_property_can_revert(const StringName &p_name) const {