Welcome to the world of lighting! If we have surface normals in our model at all, they are typically only there at all for lighting purposes. Unlit materials don’t need them.
Per-Vertex Lighting (performed in the Vertex Shader stage, using Vertex Normals) kind of sucks though - there is a way to remove normals from vertices in the mesh, and instead put them in a texture, which encodes surface normals for rapid per pixel lookup in the pixel (fragment) shader.
Enter Normal Maps!
These can encode the surface bumpyness from a much higher resolution mesh, baked to texture, and applied in the shader to a much lower resolution mesh. You get nice high resolution rendering at low cost, but you need to take some time to pre-bake your normal map(s). We trade some offline processing time for both faster and better looking results at runtime
One single triangle can benefit from per pixel lighting, a single textured quad (two triangles) is a prime example. Embossing and other per pixel effects can be implemented using textures, moving the art requirement into the hands of the artists, while reducing the technical requirements for vertex data at runtime.