I actually find the intel manual on SIB bytes quite straightforward and useful. Section 2.1.5 and specifically tables 2-2 and 2-3 show really quite simply all possible values of the ModRM byte and their operands [1].
It can be quite a good exercise to try and produce your own hex opcodes from the tables using something like CyberCheff [2].
[1] https://www.intel.com/content/dam/www/public/us/en/documents...
[2] https://gchq.github.io/CyberChef/#recipe=Disassemble_x86('32...