It has to have 3D data for the most part. You can actually attach shaders to any objectreference and it's a kind of trick to get the objectreference of forms that actually aren't actually objects. It just won't render properly if there's no 3D data associated with it. If you turn on papyrus logging you will see a warning that the shader wasn't applied because the object contains no 3D data. Now, the next question you have I can't answer. What 3D data is it referring to? I have no idea.
If you can't get what you want with effect shaders, you might be able to achieve it with visualeffects.
FYI: To get the objectreference of something you just place an instance of it at itself or some actor. PlaceAtMe returns an objectreference even for things like Weapons and Activators which don't inherit from ObjectReference.
objectreference item = Player.PlacetAtMe(SomeActivatorObject)
-MM