Jump to content

light instancing...


artzor

Recommended Posts

hi all

light instancing... how?

say i scatter points from a surface and want to place a light at each point...

in obj level you have to open parameter interface/rendering/mantra and add instance parameters

Link to comment
Share on other sites

would there be a way to instance onto points at a certain level in a sop?

like say i want a irregular area light, i use the mesh for instance points but also want it to render with a constant.

or should i just have 2 seperate objects?

Link to comment
Share on other sites

hi aracid,

i'm thinking about faking an object emmiting light. so if i have a teapot, i scatter points and want to reference those points,

but still want the geometry renderable (with a constant shader)... possible?

are there any tutorials on this stuff? i'm trying to learn about light point instancing in general... like how to apply random/specific colours to the instances or maybe intensity changes etc...

thanks :)

Link to comment
Share on other sites

one more question...

so i've got my custom mesh with scatter points on it, instancing some point lights.

duplicating that object and using light linking i can get the geometry to render with a constant as well, but is there a way for one node to read geometry within another? so i don't have to adjust both objects every single time...

and another quick question, i found a VERY old tutorial which doesn't work anymore, but how would you make point instances follow normals?

thanks :)

Link to comment
Share on other sites

Hey man

sorry i missed this

duplicating that object and using light linking i can get the geometry to render with a constant as well, but is there a way for one node to read geometry within another? so i don't have to adjust both objects every single time...

u can use an object merge SOP, which allows u to fetch data from another object, i think that might be what u looking for

then the instance should face down the z-axis, so the way ur normals are facing, should influence ur lights. thats if u have normals, so either add a facet sop and post compute normals, or a point SOP and add normals, just the default settings should be fine.

if u look at the example i submitted, theres a point sop, change the random expressionon the TX to 2 , and u'll see how the lights shift.

then take a look at this file

instanceColor.hipnc

on the light, i used a point expression to fetch the point data off the geo2/point1 SOP,

therefor allowing me access to the points colors in my lights.

hope this gives u an idea of how this can be done.

:blink:

Link to comment
Share on other sites

Hi

2aracid

Does it possible to directly visualize instanced lights? I mean the light spot itself, to add some lensflare or glow effects at compose. I didn’t found any possibilities to render light directly in Houdini with Mantra. Thanks!

Link to comment
Share on other sites

Hey man

if u mean visulize the lights in the viewport...

as far as i know, there is no button to visualize the instanced light's, but its really easy to use the copy sop to represent what u're instancing and it scales quiet well.

so u could just copy some proxy object onto the points ur instancing and that should give u some guidence.

im not too sure what u mean by adding lense flares and glow effects ;)

Link to comment
Share on other sites

2aracid

Thank for your answer!

I mean situation when camera spotted directly to light source. Fore example in Max you can make the light renderable and add some “real” photography light effects (light streaks, stars an so on ) I now about CopySOP but it’s extra geometry\memory…. OK, what about standard point light without instancing? Can I render it ? Any light shaders?

Link to comment
Share on other sites

I don't mean to hijack the thread, but I figured it made a lot more sense to ask here than to create a new one:

How do I specify a Geometry object's light mask to only use point instanced lights? Neither setting the light mask to the light itself, nor the instance points objects, works. I assume because the internal name for each instance of the light is only created at render time?

Link to comment
Share on other sites

I don't mean to hijack the thread, but I figured it made a lot more sense to ask here than to create a new one:

How do I specify a Geometry object's light mask to only use point instanced lights? Neither setting the light mask to the light itself, nor the instance points objects, works. I assume because the internal name for each instance of the light is only created at render time?

Huh...

I've been using categories for so long now that I hadn't noticed this, but there seems to have been a change at some point in the way light masks are evaluated and the way instances are named.

Say you have a geo object named "/obj/geo1", a light object named "hlight1", and an instance object named "instance1" which instances "hlight1" onto some points. The IFD naming pattern for these instanced lights will be: /obj/hlight1:/obj/instance1:n (where n is the instance number), whereas before it would have been /obj/hlight1[n] and you could set your light mask to "/obj/hlight1[*]", if I recall correctly.

But now, there doesn't seem to be anything you can put in the light mask for /obj/geo1 that will resolve to the list of light objects instanced by /obj/instance1. And bundles won't help you since /obj/instance1 is not recognized as an array of light objects. :(

I think the only simple solution is to use categories (which are much more powerful than masks IMHO). So, you can start by trying the following:

1. Add a "Light Selection" property to /obj/geo1 and set it to "instlight". This ensures that geo1 will only be illuminated by lights belonging to the category "instlight".

2. Now set hlight1's "Categories" parameter to "instlight". This means that only hlight1 (and all instances of it) will illuminate geo1.

It works, but there's still a problem: The above setup will indeed restrict illumination to all the instanced hlight1 objects, but it will also include the hlight1 object itself (the instancing source, which will usually be parked at {0,0,0} and not meant as an illumination source).

To avoid this, you can use the "Override Properties" field of the instancing object (/obj/instance1) like this:

1. Set the "Categories" field of hlight1 back to empty "" (default).

2. Create a "Properties" SHOP somewhere. Let's say "/shop/properties1".

3. Open (via gear menu) the "Edit Rendering Parameters" menu on /shop/properties1 and add a "Categories" property. Set this property to "instlight".

4. Finally, set /obj/instance1's "Override Properties" parameter to /shop/properties1.

Now only the instanced lights will belong to the category "instlight" and affect /obj/geo1. All other light sources (including the instancing source itself) will not illuminate geo1 because their categories are blank.

Categories are your friends :)

Here's a quick hip file which uses this in case the above makes no sense.

instlight.hip

Link to comment
Share on other sites

Thanks, Mario, I'll try it as soon as possible. It seemed odd that variations on "*hlight1*" (to reuse your example) didn't work, as I assumed that the name of the light itself had to be part of the instance name. I wonder if this is a bug?

Edited by Darric
Link to comment
Share on other sites

It seemed odd that variations on "*hlight1*" (to reuse your example) didn't work, as I assumed that the name of the light itself had to be part of the instance name. I wonder if this is a bug?

Yes, it is odd, and possibly a bug. That's why I suspect that the mask evaluation must have changed from previous versions, as I don't recall a wildcard string like that not matching -- if memory serves, it did work back in H8.X and possibly H9.1 (I stopped using masks as soon as categories were introduced).

I'll submit a bug report.

Categories work like a charm, thanks. Is there a reason I should be using the SHOP/properties approach rather than merely adding a Categories parameter to my instance object?

Well... I confess I hadn't tried it, so I just did :)

I thought it wouldn't apply it to the instances but it seems to, so yeah, that's a simpler way to go fersure.

Cheers!

Link to comment
Share on other sites

  • 1 year later...

Old thread but this arises a question. How can you take the instance lights and combine their output into one single framebuffer/imageplane? So say you are using the pyro shader, and the Cillum channel as an extra image plane. Currently it will export a separate channel for every single point instance of that light. So if there are hundreds or thousands of these, the list is way to long. Maybe this can be done with categories, but I'm kind of lost on this. Here's a sample file of what I mean. Thanks in advance.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...