I'm trying to find a way to make a surface (or object) that sort of "reacts" to touch/collision by emitting glowing light around that touched area. Best example would be the scenes in James Camerons "Avatar" where they run through the forrests full of reactive bioluminescenting plants. Basically I need it for an architectural project where I want to add that pressure sensitive light emission feature to stair surfaces to make them interactive and more attractive for the employees to use. Need to make an animation of that under the bottom line. Ideas anyone? Keyframing when touched seems to be a bit unauthentic/ineffective.
-
1$\begingroup$ Dynamic Paint might be helpful here: the map created by it could be used to control a mix to an emissive shader. I'll flesh this out when I get a chance, or someone else might come along sooner.. $\endgroup$– Robin Betts ♦Commented Nov 20, 2018 at 23:30
2 Answers
Set up your reactive surfaces as a Canvas for Dynamic Paint, and your contact surfaces as Brushes.
You can store the effects of the brush on the canvas either as vertex data or as a a UV-mapped image.
In this example, The steps were UV unwrapped, and a wetmap was baked as an image sequence, which was then used as the factor to mix between a diffuse and emissive shader in the steps' material. The wetmap was set to fade after about 40 frames. On the whole, the tools guide you through their use; I can't think of any major gotchas.
The Canvas (Steps) was set up like this:
The Brush like this:
I baked out the maps using the 'Bake Image Seqence' button in the 'Canvas' panel.
You can use the image sequence as a mask. something like this:
And this is the sort of result -
The method given here bakes the paint result to image-maps, on the assumption that you won't want a highly subdivided model in your architectural render. However, to preview the effects of the various settings, it would be better to make a highly subdivided test-bed canvas, (a plane will do) and set up a simple brush, say a sphere. Then set the 'Format' in the canvas to 'Vertex', and the mode to 'Paint'. Then by having the animation set to continuous looped playback in the timeline, and moving the brush with respect to the canvas, you can see the effects of settings live in the viewport.
I would suggest you want to select 'Wetmap' as the preview in the Output sub-panel, and play with 'Spread' and 'Shrink' effect speeds, and 'Drying' and 'Dissolve' times in the Advanced panel. Also adjust the initial 'Wetness' (load) of the brush. These will all interact to give a variety of organic feels to the animation.
Don't forget, either, that the wetmap can wind up being used to mask a variety of other effects in the material of your steps, including, for example, other textures, which may themselves be animated. The results can also be used to control particle systems.
-
$\begingroup$ This looks pretty much like what I imagined, thank you!! You do have an idea how to make this effect even more organic looking? I'm going after bioluminescence that looks really "alive", so is there a way to make it flickering/ growing wider/ ... I'm open for more creative input. Again, massive thank you so far! $\endgroup$– NiklasCommented Nov 22, 2018 at 9:36
-
$\begingroup$ @Niklas (See edit)... This is a very open-ended request :) In the edit, I've suggested a route for your own exploration, ( which doesn't even start on the possibilities offered by, say, particle systems, and so on..) If you find you want a specific effect, I would suggest posting another question along the lines of: 'How do I get Dynamic Paint to do this? Or is there a better way?' $\endgroup$– Robin Betts ♦Commented Nov 22, 2018 at 16:11
Perhaps you could use animation nodes?
Here I have a blender sphere activating the light of another sphere when it gets close enough. Don't be intimidated by all the math nodes! It is just to get the timing right. The reason I subtract by 0.49 is because the radius of the sphere is 0.50. So, when the two spheres are near enough (within 0.10 blender units) of each other, then the emission will go to 1. If not, then the value is too small and the rounding functions keeps emission at 0. The "value" is the inverse of the proximity/distance between the spheres.
Do you want the light to stay on once touched? Perhaps have a 10 second delay and if it's not touched again, to turn off?
Let me know more details and I can make a better set up.
-
$\begingroup$ Thanks a lot my friend, wasn't expecting an answer that quick. I'll work it through and let you guys know about the progress. $\endgroup$– NiklasCommented Nov 21, 2018 at 7:52