Hi.
I would like to know if it's possible for the Script / Expression controller nodes to look at an ObjectID number and generate a random number for the output.
As a working example, imagine a single material with a connected Smoke map, attached to multiple objects. The smoke map has its additional params exposed. I would like to have a random Phase number generated for each object that the material is assigned to.
Many thanks,
Sorcery
Solved! Go to Solution.
Solved by denisT.MaxDoctor. Go to Solution.
No. You can not do it this way. It will run counter to the “uniqueness” of the material. This can only be done with different materials.
The best you can do is to use one instance for all controllers and subAnims which you want to have the same. For example:
sm0 = Smoke() m0 = Standard diffusemap:sm0 sm1 = Smoke() m1 = Standard diffusemap:sm1 t1 = bitmaptexture() t2 = bitmaptexture() sc = bezier_float() sm0.map1 = sm1.map1 = t1 sm0.map2 = sm1.map1 = t2 sm0.size.controller = sm1.size.controller = sc
in this example both texture maps are the same instances for both smokes, and size controllers are also the same. but other parameters are still unique.
Apologies for the delayed reply. I missed the email notification.
Thank you for your answer. It's a shame the nodes don't work how I originally thought. It just makes sense to me, that a shader / material should be "aware" of the objects it's applied to and enable us to randomise shader / material properties based on object ID, name, wire colour, etc, but oh well.
I mean, OSL can randomise for object ID, but annoyingly, I don't think those OSL nodes can be used to drive exposed addition params.
I also know nothing about coding, so your suggestion is a bit lost on me (I need copy and paste solutions XD), but will hopefully help other people.
Thanks again.
It's a shame the nodes don't work how I originally thought. It just makes sense to me, that a shader / material should be "aware" of the objects it's applied to and enable us to randomise shader / material properties based on object ID, name, wire colour, etc, but oh well.
The materials work a different way. They don't 'know' anything about where and how they will be used. A material (shader) like a can with paint, which cannot change its color depending on what wall you paint. But every wall might look different depending on its surface or texture for example.
So if you want that the same material looks different on different objects you have to change object's parameters that might effect the material look. In your case it might be a texture channel (mapping coordinates), which you can randomize. Unlike materials, objects can be referenced (which means be the same on the base, but have some difference in details). Just think about this possible approach...
Can't find what you're looking for? Ask the community or share your knowledge.