godotengine / godot

Godot Engine – Multi-platform 2D and 3D game engine
https://godotengine.org
MIT License
91.48k stars 21.26k forks source link

[TRACKER] Missing editor icons #46056

Open KoBeWi opened 3 years ago

KoBeWi commented 3 years ago

Godot version:

a59286f

Issue description:

Some abstract nodes are missing icons. I noticed that they can have icons, so there's no reason not to add them.

Below is the list of nodes currently without icons. * are non-abstract nodes that were added in 4.0.

Calinou commented 3 years ago

I'll look at designing icons for the GPUParticles nodes you mentioned on the list.

Xrayez commented 3 years ago

There may be a problem with abstract classes having an icon. Most of the time they're not so useful to the end user (see limitations like #42830, or confusions like #43336), so I think they shouldn't attract much attention.

Perhaps we can use the functionality added in #45924 and make those abstract classes to have icons completely desaturated. As representative icon, either the first or commonly used icon of derived classes can be chosen automagically.

KoBeWi commented 3 years ago

IMO it's enough that their name is grayed out. Maybe the icon could be slightly translucent. It's still better than randomly showing Node in the middle of the list.

Also the issues you linked aren't really related.

Calinou commented 3 years ago

Maybe the icon could be slightly translucent. It's still better than randomly showing Node in the middle of the list.

This is a good idea, but I think it should be done in a separate PR (ideally in the Tree display itself if possible).

Xrayez commented 3 years ago

Also the issues you linked aren't really related.

Sorry, may I ask why?

KoBeWi commented 3 years ago

When adding a node right now, what user sees is a few random nodes with default icon and grayed out names. I don't see how adding an icon would make someone more likely to think "I should try extending this class" than now. They aren't even clickable. (also CanvasItem already has an icon and it doesn't cause problems)

Xrayez commented 3 years ago

Your reasoning is valid to some extent, but I think it's safe to say that users (especially beginners) typically interpret classes that have a custom icon to be more useful than those that don't have an icon. The fact that a class has an icon signifies that the class is frequently used in projects, otherwise it wouldn't have an icon (minus the happenstance of a contributor drawing an icon for less frequently used class for the sake of it). 🙂

Under this interpretation, it means that beginners are more likely to search the built-in documentation for those classes that have a custom icon. More experienced people will try to extend the base class via script once they find it in the documentation, which will lead to limitations I linked in #42830, #43336 and alike (#46073).

(also CanvasItem already has an icon and it doesn't cause problems)

This is true because that's quite a core class which users are unlikely to touch/extend, unlike other more specific classes like CollisionObject which are tied to specific use cases to be actually useful in games out of the box.

KoBeWi commented 3 years ago

More experienced people will try to extend the base class via script once they find it in the documentation, which will lead to limitations I linked in #42830, #43336 and alike (#46073).

Then they will become even more experienced by learning that they can't. We could state in the docs that the class is abstract and you can't extend it.

Xrayez commented 3 years ago

Yeah but that would reveal the fact that abstract/base classes in Godot cannot be extended via script, which isn't something nice documenting, but worth implementing. 😛

I personally think that we should refrain documenting limitations as a way to fix problems in Godot, especially when expectations go against the way how something is possible or not possible to do in comparison with other engines (those features which are not specific to Godot), unless there's truly no way of fixing those limitations. Being able to extend the base/abstract class is OOP, documenting that Godot cannot do this goes against core principles, don't you think?

On topic, I'm not against adding custom icons for base classes, but that's just something to be aware of while improving the UI/UX!

Calinou commented 3 years ago

The VisualShaderNode resources don't have any icons currently. Do you think it's worth designing individual icons for them? If not, we should probably create a generic icon for all of them to assign to each resource that inherits from VisualShaderNode. This would help them stand out from other classes in the Create New Resource dialog.

What would such an icon look like? cc @Chaosus

Chaosus commented 3 years ago

@KoBeWi you missed VisualScripts nodes which also lack icons as VisualShaderNode's. There are also several new nodes added after 15 Feb which also lack unique icons.

Do you think it's worth designing individual icons for them?

I think some kind an icon can be created. That would help to notify users that it is used for creating visual effects. That first idea which comes to my head:

image

And VisualShaderNodeCustom decides a unique icon because it can be actually used very often to create plugins.

Calinou commented 3 years ago

List of VisualShader and VisualScript icons (non-abstract classes only):

VisualShaderNodeBillboard

VisualShaderNodeBooleanConstant
VisualShaderNodeColorConstant
VisualShaderNodeFloatConstant
VisualShaderNodeIntConstant
VisualShaderNodeTransformConstant
VisualShaderNodeVec3Constant

VisualShaderNodeBooleanUniform
VisualShaderNodeColorUniform
VisualShaderNodeTextureUniform
  VisualShaderNodeCubemapUniform
  VisualShaderNodeTexture2DArrayUniform
  VisualShaderNodeTexture3DUniform
  VisualShaderNodeTextureUniformTriplanar
VisualShaderNodeFloatUniform
VisualShaderNodeIntUniform
VisualShaderNodeTransformUniform
VisualShaderNodeVec3Uniform

VisualShaderNodeClamp
VisualShaderNodeColorFunc
VisualShaderNodeColorOp

VisualShaderNodeComment
VisualShaderNodeCurveTexture
VisualShaderNodeCurveXYZTexture

VisualShaderNodeExpression
  VisualShaderNodeGlobalExpression

VisualShaderNodeCompare
VisualShaderNodeCubemap
VisualShaderNodeCustom
VisualShaderNodeDeterminant
VisualShaderNodeDotProduct
VisualShaderNodeFaceForward
VisualShaderNodeFloatFunc
VisualShaderNodeFloatOp
VisualShaderNodeFresnel
VisualShaderNodeIf
VisualShaderNodeInput
VisualShaderNodeIntFunc
VisualShaderNodeIntOp
VisualShaderNodeIs
VisualShaderNodeMix
VisualShaderNodeMultiplyAdd
VisualShaderNodeOuterProduct

VisualShaderNodeParticleAccelerator
VisualShaderNodeParticleOutput

VisualShaderNodeParticleBoxEmitter
VisualShaderParticleRingEmitter
VisualShaderParticleSphereEmitter

VisualShaderNodeParticleConeVelocity
VisualShaderNodeParticleEmit
VisualShaderNodeParticleMultiplyByAxisAngle
VisualShaderNodeParticleRandomness
VisualShaderNodeSDFRaymarch
VisualShaderNodeSDFToScreenUV
VisualShaderNodeScalarDerivativeFunc
VisualShaderNodeScreenUVToSDF
VisualShaderNodeSmoothStep
VisualShaderNodeStep
VisualShaderNodeSwitch
VisualShaderNodeTexture

VisualShaderNodeTexture2DArray
VisualShaderNodeTexture3D
VisualShaderNodeTextureSDF
VisualShaderNodeTextureSDFNormal
VisualShaderNodeTransformCompose
VisualShaderNodeTransformDecompose
VisualShaderNodeTransformFunc
VisualShaderNodeTransformOp
VisualShaderNodeTransformVecMult
VisualShaderNodeUVFunc
VisualShaderNodeUniformRef
VisualShaderNodeVectorCompose
VisualShaderNodeVectorDecompose
VisualShaderNodeVectorDerivativeFunc
VisualShaderNodeVectorDistance
VisualShaderNodeVectorFunc
VisualShaderNodeVectorLen
VisualShaderNodeVectorOp
VisualShaderNodeVectorRefract
VisualScriptBasicTypeConstant
VisualScriptBuiltinFunc
VisualScriptClassConstant
VisualScriptComment

VisualScriptComposeArray

VisualScriptCondition
VisualScriptConstant
VisualScriptConstructor
VisualScriptCustomNode
VisualScriptDeconstruct
VisualScriptEmitSignal
VisualScriptEngineSingleton
VisualScriptExpression
VisualScriptFunction
VisualScriptFunctionCall
VisualScriptGlobalConstant
VisualScriptIndexGet
VisualScriptIndexSet
VisualScriptInputAction
VisualScriptIterator
VisualScriptLocalVar
VisualScriptLocalVarSet
VisualScriptMathConstant
VisualScriptOperator
VisualScriptPreload
VisualScriptPropertyGet
VisualScriptPropertySet
VisualScriptResourcePath
VisualScriptReturn
VisualScriptSceneNode
VisualScriptSceneTree
VisualScriptSelect
VisualScriptSelf
VisualScriptSequence
VisualScriptSubCall
VisualScriptSwitch
VisualScriptTypeCast
VisualScriptVariableGet
VisualScriptVariableSet
VisualScriptWhile
VisualScriptYield
VisualScriptYieldSignal

I'm working on porting VisualShader icons from 2.x. They are still available in an old commit of the godot-design repository: https://github.com/godotengine/godot-design/tree/a492bb3d761bd13d24777ef520318473077a98f6/assets/icons/svg

Edit: Visual shader node icons ported in https://github.com/godotengine/godot/pull/51702.

fire-forge commented 2 years ago

Many of the icons on this list have been added. The only node icons that are left are PhysicalBone2D and most of the abstract classes.

akien-mga commented 2 years ago

Not blocking for 4.0.