Hi,
I've got a bit of a problem:
I have several planes in my scene that I need to play an animated texture, but starting at different times.
Is there any way of achieving that procedurally? E.g. by passing a float attribute containing the frame number of the image sequence for the image texture node to load?
Problem is, I can't fake it by just having different shaders with different image textures. Being in Houdini, the setup for the scene is both large and procedural.
I tried doing it with an OSL texture, but that also doesn't work because Octane's OSL implementation doesn't support string operations. (Otherwise I could just pass the frame number as float and then concatenate a string for the actual image file to load)
Anybody have any ideas?
Thanks!
Animated Textures
Moderator: juanjgon
Hi,
Sorry, I'm afraid that currently Octane doesn't support string attributes, or attributes in the texture nodes. You can use any kind of expression in the texture file parameters including $F to configure a frame offset, but nothing from an object attribute.
Thanks,
-Juanjo
Sorry, I'm afraid that currently Octane doesn't support string attributes, or attributes in the texture nodes. You can use any kind of expression in the texture file parameters including $F to configure a frame offset, but nothing from an object attribute.
Thanks,
-Juanjo
Maybe as B-Plan you could use mantra to create the texture procodurally, then render a mantra pre-pass from your camera , and then camap this prepass in your octane texture slot ?
old school , but might work ? Other options would be to apply the same logic but with COPs and a Mantra prepass in UV space ?
Those kind of things are really easier to deal , in that other GPU engine we should not named.
old school , but might work ? Other options would be to apply the same logic but with COPs and a Mantra prepass in UV space ?
Those kind of things are really easier to deal , in that other GPU engine we should not named.

- bassruettler
- Posts: 18
- Joined: Fri Jan 10, 2020 5:24 pm
If I had to switch static textures based on attributes, that would be the way to go. Unfortunately I need to switch between sequences + offset, so that would be a few hundred image texture nodes to setup just for one sequencejuanjgon wrote:The only workaround that comes to my mind is to use texture mixer nodes and a vertex attribute linked to the mix amount parameter to select the texture to be used. Not sure if this could help ...

I'm not quite sure what you mean by that, what's a camap?fantome wrote:...mantra pre-pass from your camera , and then camap this prepass in your octane texture slot ?
well.
- if you have 1000 planes that are textured with the same animated texture but with a per object time offset.
- you could create a mantra constant shader that will be able to render this texture correctly
- then render your objects throw your render camera in mantra
- then create a camera mapping for your 1000 planes to do that you will have to create your UV projection from your render camera perspective
- then you load your mantra render in your octane texture slot as an animated texture and you use your UV's created from the camera projection
- if you don't want to destroy your initial uv set you can create an extra uvset for camera projection by creating an extra uv sets with @uv1 and use it for the texture loader of your image sequence only
It might work ?
- if you have 1000 planes that are textured with the same animated texture but with a per object time offset.
- you could create a mantra constant shader that will be able to render this texture correctly
- then render your objects throw your render camera in mantra
- then create a camera mapping for your 1000 planes to do that you will have to create your UV projection from your render camera perspective
- then you load your mantra render in your octane texture slot as an animated texture and you use your UV's created from the camera projection
- if you don't want to destroy your initial uv set you can create an extra uvset for camera projection by creating an extra uv sets with @uv1 and use it for the texture loader of your image sequence only
It might work ?
@juanjgon, you say : user vertex attribute may control the mix amount parameter when its linked to.
So is it possible to control Translation parameter (vector) from Transform node with user color vertex attribute and have a texture position different by group (prim) ?
The idea is to texturise 40 groups in one object with one material, Material has variation offset texture per group with the color vertex attribute.
So is it possible to control Translation parameter (vector) from Transform node with user color vertex attribute and have a texture position different by group (prim) ?
The idea is to texturise 40 groups in one object with one material, Material has variation offset texture per group with the color vertex attribute.
- bassruettler
- Posts: 18
- Joined: Fri Jan 10, 2020 5:24 pm
fantome wrote:well.
- if you have 1000 planes that are textured with the same animated texture but with a per object time offset.
- you could create a mantra constant shader that will be able to render this texture correctly
- then render your objects throw your render camera in mantra
- then create a camera mapping for your 1000 planes to do that you will have to create your UV projection from your render camera perspective
- then you load your mantra render in your octane texture slot as an animated texture and you use your UV's created from the camera projection
- if you don't want to destroy your initial uv set you can create an extra uvset for camera projection by creating an extra uv sets with @uv1 and use it for the texture loader of your image sequence only
It might work ?
Thanks for the tip. It works well enough for my purposes, so that's what I'll be doing for now.
Quite tedious though, would be nice if in the future we had some kind of functionality for that. A similar node to the print node in mantra + ability to set the file path in the image texture node would be great.
Though I don't know anything about how the octane plugin works, maybe the octane core has to support string attributes first. @juanjgon