2
$\begingroup$

I’ll explain my end goal then extrapolate.

I am wanting to make a fake volumetric god ray light object using an emissive volumetric shader material. But one that interacts with other meshes the same way an actual light would.
So the mesh object would be disrupted when it intersects with another mesh, like a Boolean operation. But a Boolean operation that continues to cut out the object on a certain axis past it intersection point. So it’s like a Boolean mixed with a knife project or something. Does this make sense?

I made a quick scene here. It works fine except the fake light ray pick back up one the other side of the box on the floor.
I would like the “god ray” mesh to be interrupted once it comes in contact with the box on the floor, like a Boolean, but continue to be affected on one axis, as if the box’s geometry is extruded along that same axis.

I’ve explored using line art modifier, I’ve tried a hack job using a mesh trails add-on, I’ve considered applying a Boolean then cleaning up but that would be way too laborious.

I bet there’s a way in Geometry Nodes to do this but I’m still in basic tutorial land with those. I’ve been trying different things for a few weeks off and on and can’t crack this. I feel strongly this could be a wicked solution for a light weight fake god ray solution. One that works with animated scenes/ objects. I bet someone has done this or it’s something in my blind spot.

enter image description here

$\endgroup$
4
  • $\begingroup$ This is roughly possible, but you're going to have problems with topology-- you will only ever approach the proper occlusion, and that's by using tons of vertices for your godray mesh. Are tons of vertices a deal-breaker? $\endgroup$
    – Nathan
    Commented Oct 20, 2022 at 20:06
  • $\begingroup$ I guess that depends on what a ton is. what is your idea on how I can pull off excluding those areas? $\endgroup$
    – Ferg
    Commented Oct 20, 2022 at 21:40
  • $\begingroup$ If it used a bool type of operation I dont see why it would cause any extra strain than a normal bool. But maybe youre thinking some other way. I've tried to approach this problems from the angles I can think of $\endgroup$
    – Ferg
    Commented Oct 20, 2022 at 21:43
  • $\begingroup$ Also, im not looking to make it look as accurate as real volume lighting. in fact, I would probably use it for more stylized animations. $\endgroup$
    – Ferg
    Commented Oct 20, 2022 at 22:23

1 Answer 1

3
$\begingroup$

If we're willing to pay a price in vertices, we don't need to use a boolean at all; we can simply ray project our mesh:

enter image description here

The base mesh is selected, with modifiers disabled. I start with a solidify modifier to extrude that mesh and assign the extruded vertices to a vertex group. I then ray project these extruded vertices onto a collection of occluders, using a ray direction derived from my "light" empty. In order to get a large number of rays, it's necessary to subdivide the mesh, and the behavior is never perfect, there will always be a little bit of error. In this case, my original 16 vertex mesh turns into about 6000 vertices with the solidification and subdivision. (Although if we wanted, we could cut that in half by deleting our original, unsolidified faces, which we probably don't need.)

There may be a boolean-based answer to this. I have experimented with projection to an arbitrary distance, booleaning with the occluding collection, and then trying to raycast back onto the occluder from the light for each vertex generated by the boolean, but I've has some issues where this isn't behaving as I'd expect. I'll leave that to some future poster and offer this answer in the meantime.

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .