When I hook up the green frame to the location, everything works fine. I can move the texture using the X and Y coordinates.
When I hook up the orange frame to the location, I can also move the location, BUT the scaling also gets messed up AND I can resize the texture by scaling the empty object even though it’s not hooked up to the scaling!
If you use a 3d texture the location is also change the “size” on a 2d plane.
You just change the location on a texture position that has a different size.
The reason the two are not working similar is due to the high value difference caused by the divide.
There is a difference between an object’s location and the “Object” texture coordinates of an object.
The texture coordinate space is just the local coordinate system of the object in the referenced in the Texture Coordinates node (“Empty” in your case).
Where your empty’s origin is there is (0, 0, 0), one unit along the empty’s local x axis is (1, 0, 0) and so on.
Meaning in the orange setup not all points of the texture get moved the same amount. The further you are from the empty, the more the texture coordinates get transformed, which results in the scaling effect.
In the green setup on the other hand you have a constant offset across all points in space.
I think this is most clear, when you plug the outputs of the green and orange frame directly into the shader output to visualize them. You’ll notice that the output of the green frame will be a constant color, while you’ll probably see a quadrant like gradient with the empty.
Screenshots of a simplified setup similar to yours
Unfortunately there currently is no convenient way to just get the transformation info of other objects in the shader alone.
If you can do with only translation and make sure the scale and rotation of the empty and your object are always in sync you can use the difference between your the object’s and the empty’s Object coordinates to move the texture.
If you want more control the best way right now is to go through geometry nodes - at least I think that’s nicer than dealing with drivers.
With geometry node’s Object Info node you actually can get the transform information of other objects, that you can then pipe as attributes to the shader: