Materials

We can progrommatically access the properties of the materials like this:

import molecularnodes as mn
mn.register()
mn.assets.install()
can = mn.Canvas(engine="EEVEE")
can.scene_reset()
can.resolution = (860, 540)
mol = mn.Molecule.fetch("8H1B").add_style("surface", material = mn.material.AmbientOcclusion())
can.frame_object(mol)
can.snapshot()
Fra:1 Mem:104.19M (Peak 115.36M) | Time:00:00.31 | Rendering 1 / 64 samples
Fra:1 Mem:104.27M (Peak 115.36M) | Time:00:00.47 | Rendering 25 / 64 samples
Fra:1 Mem:104.27M (Peak 115.36M) | Time:00:00.56 | Rendering 50 / 64 samples
Fra:1 Mem:104.27M (Peak 115.36M) | Time:00:00.61 | Rendering 64 / 64 samples
Saved: '/var/folders/r4/ym_ncgbd3qddtxqvrmhps8q80000gn/T/tmp7s14qno3/snapshot.png'
Time: 00:00.70 (Saving: 00:00.07)

mol.styles[0].material.ambient_occlusion_distance = 0.1
can.snapshot()
Fra:1 Mem:104.34M (Peak 121.18M) | Time:00:00.10 | Rendering 1 / 64 samples
Fra:1 Mem:104.28M (Peak 121.18M) | Time:00:00.25 | Rendering 25 / 64 samples
Fra:1 Mem:104.34M (Peak 121.18M) | Time:00:00.37 | Rendering 50 / 64 samples
Fra:1 Mem:104.28M (Peak 121.18M) | Time:00:00.45 | Rendering 64 / 64 samples
Saved: '/var/folders/r4/ym_ncgbd3qddtxqvrmhps8q80000gn/T/tmp1ywpm1z3/snapshot.png'
Time: 00:00.48 (Saving: 00:00.02)

[x for x in dir(mn.material.AmbientOcclusion()) if not x.startswith("_")]
['ambient_occlusion_color',
 'ambient_occlusion_distance',
 'ambient_occlusion_normal',
 'emission_color',
 'emission_strength',
 'material',
 'math_value',
 'mix_a',
 'mix_b',
 'mix_factor',
 'tree']