Source code for blenderproc.python.lighting.SurfaceLighting

"""Allows to add a light property to the surface of objects. The surfaces are only indirectly lighting up the scene."""

from typing import List

from blenderproc.python.types.MeshObjectUtility import MeshObject


[docs] def light_surface(objects: List[MeshObject], emission_strength: float = 10.0, emission_color: list = None): """ Add emission shader to the materials of the given objects. :param objects: A list of mesh objects whose materials should emit light. :param emission_strength: The strength of the emitted light. :param emission_color: The color of the light to emit. Default: Color of the surface. """ empty_material = None # for each object add a material for obj in objects: if not obj.has_materials(): # If this is the first object without any material if empty_material is None: # this object has no material so far -> create one empty_material = obj.new_material("TextureLess") else: # Just reuse the material that was already created for other objects with no material obj.add_material(empty_material) # Material has already been made emissive, so go to the next object continue for i, material in enumerate(obj.get_materials()): if material is None: continue # if there is more than one user make a copy and then use the new one if material.get_users() > 1: material = material.duplicate() obj.set_material(i, material) # rename the material material.set_name(material.get_name() + "_emission") # add a custom property to later identify these materials material.set_cp("is_lamp", True) material.make_emissive(emission_strength=emission_strength, emission_color=emission_color)