import bpyimport randomstartFrame = 1stopFrame = 250 def ChangeStrength(lamp, ID): strength = bpy.data.lamps[lamp].node_tree.nodes["Emission"].inputs[1] if (bpy.data.scenes["Scene"].frame_current >= startFrame and bpy.data.scenes["Scene"].frame_current < stopFrame): if bpy.data.scenes["Scene"]["Change Lamps"] == 1: random.seed(bpy.data.scenes["Scene"].frame_current * ID) if random.random() < 0.5: strength.default_value = 0 else: strength.default_value = 1000 else: strength.default_value = 0 def Run(scene): ChangeStrength('Spot 1', 1) ChangeStrength('Spot 2', 2) ChangeStrength('Spot 3', 3) ChangeStrength('Spot 4', 4) ChangeStrength('Spot 5', 5) ChangeStrength('Spot 6', 6)bpy.app.handlers.frame_change_pre.append(Run)
Vraagje: als je lampen elke frame een kans hebben van 50% om te veranderen, dan zou ik tegen 24 frames per seconde een heuse flikkershow verwachten. Toch gaat het er bij jouw nog best rustig aan toe. Heb je de framerate vertraagt, of het script nog aangepast?
import bpyimport randomstartFrame = 1stopFrame = 250 def ChangeStrength(lamp, ID): strength = bpy.data.lamps[lamp].node_tree.nodes["Emission"].inputs[1] random.seed(bpy.data.scenes["Scene"].frame_current * ID) if random.random() < 0.5: strength.default_value = 0 else: strength.default_value = 1000 def Run(scene): if (bpy.data.scenes["Scene"].frame_current >= startFrame and bpy.data.scenes["Scene"].frame_current < stopFrame): if bpy.data.scenes["Scene"]["Change Lamps"] == 1: ChangeStrength('Spot 1', 1) ChangeStrength('Spot 2', 2) ChangeStrength('Spot 3', 3) ChangeStrength('Spot 4', 4) ChangeStrength('Spot 5', 5) ChangeStrength('Spot 6', 6)bpy.app.handlers.frame_change_pre.append(Run)
Sorry, ik kan het als programmeur niet laten wat optimalisaties voor te stellen... Ik ga er hieronder van uit dat buiten start en stop niks gerenderd wordt - als dat wel zo is moet de eerste if uit Run weer terug naar ChangeStrength.Verder: maak een empty, maak de lampen die je wilt animeren daar children van, en je hoeft geen scriptaanpassing meer te doen als je lampen wilt toevoegen - je gaat gewoon alle children van die empty af. Ook kun je de min/max waarde voor strength of random-grenswaarde i.p.v. 0.5 bijvoorbeeld in custom properties van de lamp zetten.Code: [Selecteer]import bpyimport randomstartFrame = 1stopFrame = 250 def ChangeStrength(lamp, ID): strength = bpy.data.lamps[lamp].node_tree.nodes["Emission"].inputs[1] random.seed(bpy.data.scenes["Scene"].frame_current * ID) if random.random() < 0.5: strength.default_value = 0 else: strength.default_value = 1000 def Run(scene): if (bpy.data.scenes["Scene"].frame_current >= startFrame and bpy.data.scenes["Scene"].frame_current < stopFrame): if bpy.data.scenes["Scene"]["Change Lamps"] == 1: ChangeStrength('Spot 1', 1) ChangeStrength('Spot 2', 2) ChangeStrength('Spot 3', 3) ChangeStrength('Spot 4', 4) ChangeStrength('Spot 5', 5) ChangeStrength('Spot 6', 6)bpy.app.handlers.frame_change_pre.append(Run)