GSOC 2021 Proposal Idea : Light Linker / Light Mixer

Hi everyone, my name is Dean Jones and I am currently enrolled at ArtFx Montpellier. I have a strong interest in rendering and would love to contribute back to what got me started in the industry. I’m hoping to open a discussion around implementing a Light Linker and/or Light Mixer. I have experience in C++ and a little in Python. I have mostly experience with realtime programming but have dived into path-tracing and plan on studying light management along with the Blender codebase more deeply before the summer begins.

As written in the title, I am hoping to implement a Light Linker into Blender. However, from what I could find, I see that there is talk of the feature already under development. Although I couldn’t find much on it, if anyone could point me to more documentation about the development then that would be awesome. For this reason I am hesitant to propose a project that is already under development but any comments will be greatly welcomed.
As it may be more complicated to join onto an already existing project I have a secondary proposal: an integrated Light Mixer, much like the newest implementation in Arnold 6.2. This would be an awesome feature I believe, perhaps a little out of my scope for the moment. Regardless I am confident that with the necessary preparation before the GSoC begins that I could reach the required technical level to tackle the project along with the appropriate mentors.
I am also concerned that there may be the case that Blender’s architecture may not support these features - hence the light linker taking quite long. Granted if the developers are taking time to implement these features, that may imply the features would be quite far out of my scope.

I understand that perhaps this is the wrong Topic to speak about this but I would also have an interest in implementing bloom into cycles. Is this a topic worth opening?

Regardless I am very passionate about Blender and these proposed features. I would love to know what others think about this and if there are any other comments then that would be greatly appreciated!

Best regards everyone


Thank you!! This will be a game changer. I’ve been waiting for so long. Hoping it goes through! :slight_smile:

1 Like

Neither of these features are under development yet, so the could be proposed as GSoC projects. The light linking task is here:


The light mixer is something good, that can be done in a better way than in other packages, for example directly into the viewport.

IMHO for that first the light groups patch has to be finished, something that should be easy, I have that implemented until 2.93 in my own branch (it’s public on my github) I find diffcult to separate the patch, but with a bit of knowledge and the original patch it should be ease to do so, I’m looking for time to do it and upload it to phabricator so it can befinished and commited, so far it works great.

Now the Light Linking feature is what I see as the most important of the two, because it’s something lighters are requesting A LOT, so I would bet for that one if you think you can do it, the Light Groups and the LIght Mixer is easier, so maybe you can do both in your proposal :slight_smile:


Thanks for your response Brecht! I look forward to sending through my proposal.

Thank you for your response Juan. I’m definitely going to go take a look through your git, that’s very cool. I would love to contribute a light linker, I will most likely propose this. Maybe it would even convince some of my school’s graduation projects to integrate more Blender into the pipelines! :smile:


Let me say that my implementation is not mine, it is from @lukasstockner97, I just updated it to a current version and maintained it until now in my build, however I suspect some things are outdated and while it’s working it’s not perfectly on pair with the current passes status, but should be fairly easy to finish it and propose it to master for any dev with C++ experience, it requires a small change on how to assign a light to a light group, but the ideas around were kind of “easy” to implement :slight_smile:

1 Like

Just here to say that I’ve been whining for the implementation of this feature since forever and I thank you in advance for taking a shot at it :grin: Best of lucks to you with it sir


Before I add to this discussion, could some straight-forward definitions be given to concepts you’ve brought up? I want to make sure I’m not misunderstanding or going in the wrong direction with this.

Light Linking:

A feature that allows you to selectively exclude or include objects from the effects of an specific light, in other words, a way to define which objects will be affected by an specific light.

Light Mixer (and Light Groups):

A way to render in several render passes all the lights separatedly, so you can group “ceiling lights”, “sky light”, “sun light” and “hero light” in several passes, render all together at once, only one time, and get all those light groups as passes you can composite together, giving you control over intensity and tint of each group.

The Light Mixer is the part where instead of having to assemble a full compositing tree you can “play” with the results directly in the viewport or in the render view and define what will be your desired final output.

All these features are kind of important, there is a patch already there for light groups, and we have it in our build working since 2.8x, Light Mixer is a good step forward, not too difficult having light groups already I think, but pretty useful.

Now, Light Linking is something that lighter are waiting with A LOT OF EAGERNESS :slight_smile:


Can agree here. Light Linking is… a base rendering tool, not photorealistic, but necessary in all everyday rendering. And if it can also be in viewport with WYSIWYG, the better.


Light Linking is the number one most requested feature and the task on Phabricator is spammed by so many users that want to have this feature :smiley:


I would love to see this definition of Light Linking be expanded to include face sets as well as objects, if possible. I have done this very often in other tools that allow light linking.

It would also be very helpful to allow for Shadow Linking as well. Often, in stylized situations, you want control over what is casting shadows independent of what is illuminated.


In my proposal I have included shadow linking and reflection linking. However, within the scope of GSoC it could be too many things to juggle at once. Depending on how things progress, I will be willing to continue working on linking features outside of GSoC in my freetime!


TBH it may be possible and not that hard… but this is just a bold guess without the whole knowledge needed to confirm it, so I may be wrong.

Once the light linking code is in place, since we have Light Paths, may not be so difficult to make light linking work with Light Path options, that could allow for Shadow Linking and Reflection Linking probably, not sure about face sets since that´s a sub-object element, but maybe it can work with some kind of material linking, not sure.

Anyways, if this goes into the GSoc and later into master, focusing in the MVP (minimum viable product) first should be the priority :slight_smile:


Yup, exactly what I was thinking. Once the base code is implemented then expanding it will be a lot simpler. Granted this is just my speculation and would have to dive into the code more to be able to make an accurate evaluation. But yes mvp will be the prioritized deliverable for GSoC, expanding can come after!


Dean, light linking and mixing would be much appreciated additions to Blender! Hopefully there is a generic approach possible, in a sense that this would work for both Eevee and Cycles? Best of Luck :slight_smile:


About Light Mixing - do you mean the same functionality, as in Light Group from BlenderLuxCore?


Wow, I never new I needed a feature until I saw this! It would be amazing to have in Blender with Cycles


YES! The compositing element is key here, too. Better still: allow separation of glossy, indirect, direct, sss, or some combinations (eg. glossy and diffuse/sss) per light AOV. Yes, it generates more AOVs, but that’s OK. You can also create a compositing node that is more generic, letting you chose which AOV to edit. Don’t like a spec hit that a particular light is casting? Rotomask it and gain it down on that one light, keeping everything else intact.