How to make an IES area light in blender

I don’t know if anyone has posted a similar tip before. Recently I was trying to use blender to do lighting design for my new home and found that all the documentation and tutorials say that IES Texture node can only be used for point light or spot light. but as far as I know from cycles, there should be no difference between IES Texture used for point light and area light. So I opened the source code of Blender and found that IES Texture node will use the Normal vector to calculate the luminous intensity by default. For point light and spot light, Normal is the local coordinate of the sampled point in the system of the light, but for area light and mesh light, it is the normal vector of the mesh.

We just need to use the Incoming output of the Geometry node as the Vector input of IES Texture to get the correct angle.

In addition, due to the way the light intensity is handled inside cycles:

  • For the area light, we need to set the Power to 1W and use 1/pi as the Strength value of the IES Texture.

  • While for the mesh light, we need to use 1/(pipiprojected area of the emitter) as the Strength value of IES Texture.

Then we can get an IES light that projects soft shadows.

EDITED: Added a solution to rotate the area IES light.

The Incoming vector is in the global coordinate system. For mesh light we can use the Vector Transform node to convert that vector to local coordinates. But for area light, we can’t use this method.

My current solution is to use the current Normal and Tangent to calculate the rotation angle and then convert the Incoming vector to local coordinates.

13 Likes

I made a mistake in my original post.

The Strength value of a mesh light should be 1/(4*pi*projected area of the emitter).

And the Strength value of an area light should be 1/(pi*(v_normal·v_incoming)). The · is the dot product operator.

1 Like

This is brilliant, thank you.

1 Like

Hi, this is a great solution!
I use it on linear products and I’ve noticed that the light doesn’t turn and always stays in the same direction…

Any idea how to remedy the problem?
thx

2 Likes