IC Python API:Animated Material
- Main article: Python of the Month.
Animating material attributes are also allowed in iClone via Python scripting. In this article, we'll go over the steps required to create a flashing light material.
Necessary Modules
Besides the rudimentary Reallusion python API, we'll need the random module to create random colors.
import RLPy
import random
Retrieving the Material
Let's get the first selected object in the scene and grab its material components for animations.
# Grab the selected prop in the scene
prop = RLPy.RScene.GetSelectedObjects()[0]
# Get Material from Prop
material_component = prop.GetMaterialComponent()
mesh_name = prop.GetMeshNames()[0]
material_name = material_component.GetMaterialNames(mesh_name)[0]
Animation Key
In order to animate the material component, we must first create a key. This same key can be re-used by simply changing its parameters.
# Create a key for reuse
key = RLPy.RKey()
key.SetTime(RLPy.RTime(0))
key.SetTransitionType(RLPy.ETransitionType_Step)
Eliminate Diffuse Contribution
Reduce the diffuse texture contribution to zero for a complete diffuse color override.
# Reduce Diffuse texture contribution to 0
material_component.AddTextureWeightKey(
key, mesh_name, material_name, RLPy.EMaterialTextureChannel_Diffuse, 0)
Flashing Light Effect
Assign random colors with 50x power to create a flashing light effect and play the timeline.
for i in range(100):
# Power up the rgb channels to create a flashing effect
r = random.random() ** 10
g = random.random() ** 10
b = random.random() ** 10
random_rgb = RLPy.RRgb(r, g, b).Normalize().Saturate()
key.SetTime(RLPy.RTime(i * 50)) # Set key on every 50 frame interval
material_component.AddDiffuseKey(
key, mesh_name, material_name, random_rgb * 10) # Intensity the rgb channels to simulate lighting
RLPy.RGlobal.Play(RLPy.RTime(0), RLPy.RTime(100 * 50))
Everything Put Together
You can copy and paste the following code into a PY file and load it into iClone via Script > Load Python.
import RLPy
import random
# Grab the selected prop in the scene
prop = RLPy.RScene.GetSelectedObjects()[0]
# Get Material from Prop
material_component = prop.GetMaterialComponent()
mesh_name = prop.GetMeshNames()[0]
material_name = material_component.GetMaterialNames(mesh_name)[0]
# Create a key for reuse
key = RLPy.RKey()
key.SetTime(RLPy.RTime(0))
key.SetTransitionType(RLPy.ETransitionType_Step)
# Reduce Diffuse texture contribution to 0
material_component.AddTextureWeightKey(
key, mesh_name, material_name, RLPy.EMaterialTextureChannel_Diffuse, 0)
for i in range(100):
# Power up the rgb channels to create a flashing effect
r = random.random() ** 10
g = random.random() ** 10
b = random.random() ** 10
random_rgb = RLPy.RRgb(r, g, b).Normalize().Saturate()
key.SetTime(RLPy.RTime(i * 50)) # Set key on every 50 frame interval
material_component.AddDiffuseKey(
key, mesh_name, material_name, random_rgb * 10) # Intensity the rgb channels to simulate lighting
RLPy.RGlobal.Play(RLPy.RTime(0), RLPy.RTime(100 * 50))
APIs Used
You can research the following references for the APIs deployed in this code.