I copied my answer for the same OP at https://github.com/godotengine/godot/issues/19473. But this question differs slightly to the original issue report.
In case you want to manually add support for VERTEX_ID, these are the changes I had to make in 3.2.3-stable
for spatial
shaders. I wanted to use the vertex ID for creating procedural animations.
In drivers/gles3/shader_compiler_gles3.cpp
in the function ShaderCompilerGLES3::ShaderCompilerGLES3()
:
actions[VS::SHADER_SPATIAL].renames["VERTEX_ID"] = "gl_VertexID";
and servers/visual/shader_types.cpp
in the function ShaderTypes::ShaderTypes()
:
shader_modes[VS::SHADER_SPATIAL].functions["vertex"].built_ins["VERTEX_ID"] = constt(ShaderLanguage::TYPE_INT);
Then compile the source and it should work. Some other primitives could probably be added in a similar fashion but I have not tested that yet.
One caveat is that the vertex IDs reported by Godot are very different from those reported by other tools such as Blender. This is because vertices are duplicated and in a different order. Godot also only gives you two UV channels to work with. Using UV coordinates also means having a temporal component will require significantly more memory to implement as UVs will typically map sparsely onto a 2D texture, if the data is only used in the vertex shader.
I have a primitive tool working that can map the vertex animation texture generated in blender to one usable by Godot into another grayscale texture (n by 1 texture, where n is number of vertices in Godot). This saves texture memory as no data is duplicated for duplicated vertices. I first need to implement an octree before it will be usable for real-world meshes and not just a set of simple deforming cubes. Once I have that done in my spare time I will release it for free.
gl_VertexID
, then I would seriously contest that statement. I'm fairly sure that other engines can provide whatever "lot of useful stuff" that Godot does without Godot's pointless limitations. For example, my suggestion would be to use a buffer texture or an SSBO for such "attributes", but given that it doesn't even allow you to usegl_VertexID
, I would be surprised if it let you use those features. $\endgroup$gl_VertexID
, who knows? Does it allow you to use floating-point image formats? What about integer textures? What about the GLSL functions for doing integer normalization? What abouttexelFetch
? Etc. $\endgroup$