Skip to content
Snippets Groups Projects
Commit 9be1af0f authored by Clemens Barth's avatar Clemens Barth
Browse files

Update/bug removal of the 'Utility panel' - part 2: the material properties

of the special objects (F2+, F+ and F0 centers) in the section 'Change atom shape'
got updated for eevee and cycles.
parent 6e910cf2
No related branches found
No related tags found
No related merge requests found
...@@ -732,48 +732,53 @@ def draw_obj_special(atom_shape, atom): ...@@ -732,48 +732,53 @@ def draw_obj_special(atom_shape, atom):
# ... link it to the collection, which contains 'atom'. # ... link it to the collection, which contains 'atom'.
coll_atom.children.link(coll_new) coll_atom.children.link(coll_new)
# Get the color of the selected atom.
material = atom.active_material
mat_P_BSDF_default = material.node_tree.nodes['Principled BSDF']
default_color = mat_P_BSDF_default.inputs['Base Color'].default_value
# Create first a cube
bpy.ops.mesh.primitive_cube_add(align='WORLD',
enter_editmode=False,
location=atom.location,
rotation=(0.0, 0.0, 0.0))
cube = bpy.context.view_layer.objects.active
cube.scale = atom.scale + Vector((0.0,0.0,0.0))
cube.select_set(True)
# F2+ center # F2+ center
if atom_shape == '1': if atom_shape == '1':
# Create first a cube
bpy.ops.mesh.primitive_cube_add(align='WORLD',
enter_editmode=False,
location=atom.location,
rotation=(0.0, 0.0, 0.0))
cube = bpy.context.view_layer.objects.active
cube.scale = atom.scale + Vector((0.0,0.0,0.0))
cube.name = atom.name + "_F2+_vac" cube.name = atom.name + "_F2+_vac"
cube.select_set(True)
# New material for this cube # New material for this cube
material_cube = bpy.data.materials.new(atom.name + "_F2+_vac") material_new = bpy.data.materials.new(atom.name + "_F2+_vac")
material_cube.diffuse_color = [0.8, 0.0, 0.0, 1.0] material_new.use_nodes = True
material_cube.metallic = 0.8 mat_P_BSDF = material_new.node_tree.nodes['Principled BSDF']
material_cube.specular_intensity = 0.5 mat_P_BSDF.inputs['Base Color'].default_value = default_color
material_cube.roughness = 0.3 mat_P_BSDF.inputs['Metallic'].default_value = 0.7
material_cube.blend_method = 'OPAQUE' mat_P_BSDF.inputs['Specular'].default_value = 0.0
material_cube.show_transparent_back = True mat_P_BSDF.inputs['Roughness'].default_value = 0.65
# Some properties for cycles mat_P_BSDF.inputs['Clearcoat Roughness'].default_value = 0.0
material_cube.use_nodes = True mat_P_BSDF.inputs['IOR'].default_value = 1.45
mat_P_BSDF = material_cube.node_tree.nodes['Principled BSDF'] mat_P_BSDF.inputs['Transmission'].default_value = 0.6
mat_P_BSDF.inputs['Metallic'].default_value = 0.1 mat_P_BSDF.inputs['Transmission Roughness'].default_value = 0.5
mat_P_BSDF.inputs['Roughness'].default_value = 0.2 mat_P_BSDF.inputs['Alpha'].default_value = 0.6
mat_P_BSDF.inputs['Transmission'].default_value = 0.9 # Some additional stuff for eevee.
mat_P_BSDF.inputs['IOR'].default_value = 0.8 material_new.blend_method = 'HASHED'
cube.active_material = material_cube material_new.shadow_method = 'HASHED'
# Put a nice point lamp inside the defect material_new.use_backface_culling = False
lamp_data = bpy.data.lights.new(name=atom.name + "_F2+_lamp", cube.active_material = material_new
type="POINT")
# Put a point lamp inside the defect.
lamp_data = bpy.data.lights.new(name=atom.name + "_F2+_lamp", type="POINT")
lamp_data.distance = atom.scale[0] * 2.0 lamp_data.distance = atom.scale[0] * 2.0
lamp_data.energy = 1.0 lamp_data.energy = 2000.0
lamp_data.color = (0.8, 0.8, 0.8) lamp_data.color = (0.8, 0.8, 0.8)
lamp = bpy.data.objects.new(atom.name + "_F2+_lamp", lamp_data) lamp = bpy.data.objects.new(atom.name + "_F2+_lamp", lamp_data)
lamp.location = Vector((0.0, 0.0, 0.0)) lamp.location = Vector((0.0, 0.0, 0.0))
bpy.context.collection.objects.link(lamp) bpy.context.collection.objects.link(lamp)
lamp.parent = cube lamp.parent = cube
# Some properties for cycles
lamp.data.use_nodes = True
lmp_P_BSDF = lamp.data.node_tree.nodes['Emission']
lmp_P_BSDF.inputs['Strength'].default_value = 2000
# The new 'atom' is the F2+ defect # The new 'atom' is the F2+ defect
new_atom = cube new_atom = cube
...@@ -799,31 +804,27 @@ def draw_obj_special(atom_shape, atom): ...@@ -799,31 +804,27 @@ def draw_obj_special(atom_shape, atom):
# F+ center # F+ center
if atom_shape == '2': if atom_shape == '2':
# Create first a cube cube.name = atom.name + "_F2+_vac"
bpy.ops.mesh.primitive_cube_add(align='WORLD',
enter_editmode=False,
location=atom.location,
rotation=(0.0, 0.0, 0.0))
cube = bpy.context.view_layer.objects.active
cube.scale = atom.scale + Vector((0.0,0.0,0.0))
cube.name = atom.name + "_F+_vac"
cube.select_set(True)
# New material for this cube # New material for this cube
material_cube = bpy.data.materials.new(atom.name + "_F+_vac") material_new = bpy.data.materials.new(atom.name + "_F2+_vac")
material_cube.diffuse_color = [0.0, 0.0, 0.8, 1.0] material_new.use_nodes = True
material_cube.metallic = 0.8 mat_P_BSDF = material_new.node_tree.nodes['Principled BSDF']
material_cube.specular_intensity = 0.5 mat_P_BSDF.inputs['Base Color'].default_value = [0.0, 0.0, 0.8, 1.0]
material_cube.roughness = 0.3 mat_P_BSDF.inputs['Metallic'].default_value = 0.7
material_cube.blend_method = 'OPAQUE' mat_P_BSDF.inputs['Specular'].default_value = 0.0
material_cube.show_transparent_back = True mat_P_BSDF.inputs['Roughness'].default_value = 0.65
# Some properties for cycles mat_P_BSDF.inputs['Clearcoat Roughness'].default_value = 0.0
material_cube.use_nodes = True mat_P_BSDF.inputs['IOR'].default_value = 1.45
mat_P_BSDF = material_cube.node_tree.nodes['Principled BSDF'] mat_P_BSDF.inputs['Transmission'].default_value = 0.6
mat_P_BSDF.inputs['Metallic'].default_value = 0.1 mat_P_BSDF.inputs['Transmission Roughness'].default_value = 0.5
mat_P_BSDF.inputs['Roughness'].default_value = 0.2 mat_P_BSDF.inputs['Alpha'].default_value = 0.6
mat_P_BSDF.inputs['Transmission'].default_value = 0.9 # Some additional stuff for eevee.
mat_P_BSDF.inputs['IOR'].default_value = 0.8 material_new.blend_method = 'HASHED'
cube.active_material = material_cube material_new.shadow_method = 'HASHED'
material_new.use_backface_culling = False
cube.active_material = material_new
# Create now an electron # Create now an electron
scale = atom.scale / 10.0 scale = atom.scale / 10.0
bpy.ops.surface.primitive_nurbs_surface_sphere_add( bpy.ops.surface.primitive_nurbs_surface_sphere_add(
...@@ -837,27 +838,33 @@ def draw_obj_special(atom_shape, atom): ...@@ -837,27 +838,33 @@ def draw_obj_special(atom_shape, atom):
electron.parent = cube electron.parent = cube
# New material for the electron # New material for the electron
material_electron = bpy.data.materials.new(atom.name + "_F+-center") material_electron = bpy.data.materials.new(atom.name + "_F+-center")
material_electron.diffuse_color = [0.0, 0.0, 0.8, 1.0] material_electron.use_nodes = True
material_electron.metallic = 0.8 mat_P_BSDF = material_electron.node_tree.nodes['Principled BSDF']
material_electron.specular_intensity = 0.5 mat_P_BSDF.inputs['Base Color'].default_value = [0.0, 0.0, 0.8, 1.0]
material_electron.roughness = 0.3 mat_P_BSDF.inputs['Metallic'].default_value = 0.8
mat_P_BSDF.inputs['Specular'].default_value = 0.0
mat_P_BSDF.inputs['Roughness'].default_value = 0.3
mat_P_BSDF.inputs['Clearcoat Roughness'].default_value = 0.0
mat_P_BSDF.inputs['IOR'].default_value = 1.45
mat_P_BSDF.inputs['Transmission'].default_value = 0.6
mat_P_BSDF.inputs['Transmission Roughness'].default_value = 0.5
mat_P_BSDF.inputs['Alpha'].default_value = 1.0
# Some additional stuff for eevee.
material_electron.blend_method = 'OPAQUE' material_electron.blend_method = 'OPAQUE'
material_electron.show_transparent_back = False material_electron.shadow_method = 'OPAQUE'
material_electron.use_backface_culling = False
electron.active_material = material_electron electron.active_material = material_electron
# Put a nice point lamp inside the electron
lamp_data = bpy.data.lights.new(name=atom.name + "_F+_lamp", # Put a point lamp inside the electron
type="POINT") lamp_data = bpy.data.lights.new(name=atom.name + "_F+_lamp", type="POINT")
lamp_data.distance = atom.scale[0] * 2.0 lamp_data.distance = atom.scale[0] * 2.0
lamp_data.energy = 1.0 lamp_data.energy = 100000.0
lamp_data.color = (0.8, 0.8, 0.8) lamp_data.color = (0.0, 0.0, 0.8)
lamp = bpy.data.objects.new(atom.name + "_F+_lamp", lamp_data) lamp = bpy.data.objects.new(atom.name + "_F+_lamp", lamp_data)
lamp.location = Vector((scale[0]*1.5, 0.0, 0.0)) lamp.location = Vector((scale[0]*1.5, 0.0, 0.0))
bpy.context.collection.objects.link(lamp) bpy.context.collection.objects.link(lamp)
lamp.parent = cube lamp.parent = cube
# Some properties for cycles
lamp.data.use_nodes = True
lmp_P_BSDF = lamp.data.node_tree.nodes['Emission']
lmp_P_BSDF.inputs['Strength'].default_value = 2000
# The new 'atom' is the F+ defect complex + lamp # The new 'atom' is the F+ defect complex + lamp
new_atom = cube new_atom = cube
...@@ -886,32 +893,28 @@ def draw_obj_special(atom_shape, atom): ...@@ -886,32 +893,28 @@ def draw_obj_special(atom_shape, atom):
# F0 center # F0 center
if atom_shape == '3': if atom_shape == '3':
# Create first a cube cube.name = atom.name + "_F2+_vac"
bpy.ops.mesh.primitive_cube_add(align='WORLD',
enter_editmode=False,
location=atom.location,
rotation=(0.0, 0.0, 0.0))
cube = bpy.context.view_layer.objects.active
cube.scale = atom.scale + Vector((0.0,0.0,0.0))
cube.name = atom.name + "_F0_vac"
cube.select_set(True)
# New material for this cube # New material for this cube
material_cube = bpy.data.materials.new(atom.name + "_F0_vac") material_new = bpy.data.materials.new(atom.name + "_F2+_vac")
material_cube.diffuse_color = [0.8, 0.8, 0.8, 1.0] material_new.use_nodes = True
material_cube.metallic = 0.8 mat_P_BSDF = material_new.node_tree.nodes['Principled BSDF']
material_cube.specular_intensity = 0.5 mat_P_BSDF.inputs['Base Color'].default_value = [0.8, 0.0, 0.0, 1.0]
material_cube.roughness = 0.83 mat_P_BSDF.inputs['Metallic'].default_value = 0.7
material_cube.blend_method = 'OPAQUE' mat_P_BSDF.inputs['Specular'].default_value = 0.0
material_cube.show_transparent_back = True mat_P_BSDF.inputs['Roughness'].default_value = 0.65
# Some properties for cycles mat_P_BSDF.inputs['Clearcoat Roughness'].default_value = 0.0
material_cube.use_nodes = True mat_P_BSDF.inputs['IOR'].default_value = 1.45
mat_P_BSDF = material_cube.node_tree.nodes['Principled BSDF'] mat_P_BSDF.inputs['Transmission'].default_value = 0.6
mat_P_BSDF.inputs['Metallic'].default_value = 0.1 mat_P_BSDF.inputs['Transmission Roughness'].default_value = 0.5
mat_P_BSDF.inputs['Roughness'].default_value = 0.2 mat_P_BSDF.inputs['Alpha'].default_value = 0.6
mat_P_BSDF.inputs['Transmission'].default_value = 0.9 # Some additional stuff for eevee.
mat_P_BSDF.inputs['IOR'].default_value = 0.8 material_new.blend_method = 'HASHED'
cube.active_material = material_cube material_new.shadow_method = 'HASHED'
# Create now two electrons material_new.use_backface_culling = False
cube.active_material = material_new
# Create now two electrons ... .
scale = atom.scale / 10.0 scale = atom.scale / 10.0
bpy.ops.surface.primitive_nurbs_surface_sphere_add( bpy.ops.surface.primitive_nurbs_surface_sphere_add(
align='WORLD', align='WORLD',
...@@ -920,7 +923,7 @@ def draw_obj_special(atom_shape, atom): ...@@ -920,7 +923,7 @@ def draw_obj_special(atom_shape, atom):
rotation=(0.0, 0.0, 0.0)) rotation=(0.0, 0.0, 0.0))
electron1 = bpy.context.view_layer.objects.active electron1 = bpy.context.view_layer.objects.active
electron1.scale = scale electron1.scale = scale
electron1.name = atom.name + "_F0_electron1" electron1.name = atom.name + "_F0_electron_1"
electron1.parent = cube electron1.parent = cube
bpy.ops.surface.primitive_nurbs_surface_sphere_add( bpy.ops.surface.primitive_nurbs_surface_sphere_add(
align='WORLD', align='WORLD',
...@@ -929,44 +932,47 @@ def draw_obj_special(atom_shape, atom): ...@@ -929,44 +932,47 @@ def draw_obj_special(atom_shape, atom):
rotation=(0.0, 0.0, 0.0)) rotation=(0.0, 0.0, 0.0))
electron2 = bpy.context.view_layer.objects.active electron2 = bpy.context.view_layer.objects.active
electron2.scale = scale electron2.scale = scale
electron2.name = atom.name + "_F0_electron2" electron2.name = atom.name + "_F0_electron_2"
electron2.parent = cube electron2.parent = cube
# New material for the electrons # Create a new material for the two electrons.
material_electron = bpy.data.materials.new(atom.name + "_F0-center") material_electron = bpy.data.materials.new(atom.name + "_F0-center")
material_electron.diffuse_color = [0.0, 0.0, 0.8, 1.0] material_electron.use_nodes = True
material_electron.metallic = 0.8 mat_P_BSDF = material_electron.node_tree.nodes['Principled BSDF']
material_electron.specular_intensity = 0.5 mat_P_BSDF.inputs['Base Color'].default_value = [0.0, 0.0, 0.8, 1.0]
material_electron.roughness = 0.3 mat_P_BSDF.inputs['Metallic'].default_value = 0.8
mat_P_BSDF.inputs['Specular'].default_value = 0.0
mat_P_BSDF.inputs['Roughness'].default_value = 0.3
mat_P_BSDF.inputs['Clearcoat Roughness'].default_value = 0.0
mat_P_BSDF.inputs['IOR'].default_value = 1.45
mat_P_BSDF.inputs['Transmission'].default_value = 0.6
mat_P_BSDF.inputs['Transmission Roughness'].default_value = 0.5
mat_P_BSDF.inputs['Alpha'].default_value = 1.0
# Some additional stuff for eevee.
material_electron.blend_method = 'OPAQUE' material_electron.blend_method = 'OPAQUE'
material_electron.show_transparent_back = False material_electron.shadow_method = 'OPAQUE'
material_electron.use_backface_culling = False
# We assign the materials to the two electrons.
electron1.active_material = material_electron electron1.active_material = material_electron
electron2.active_material = material_electron electron2.active_material = material_electron
# Put two nice point lamps inside the electrons
lamp1_data = bpy.data.lights.new(name=atom.name + "_F0_lamp1", # Put two point lamps inside the electrons.
type="POINT") lamp1_data = bpy.data.lights.new(name=atom.name + "_F0_lamp_1", type="POINT")
lamp1_data.distance = atom.scale[0] * 2.0 lamp1_data.distance = atom.scale[0] * 2.0
lamp1_data.energy = 1.0 lamp1_data.energy = 20000.0
lamp1_data.color = (0.8, 0.8, 0.8) lamp1_data.color = (0.8, 0.0, 0.0)
lamp1 = bpy.data.objects.new(atom.name + "_F0_lamp", lamp1_data) lamp1 = bpy.data.objects.new(atom.name + "_F0_lamp", lamp1_data)
lamp1.location = Vector((scale[0]*1.5, 0.0, 0.0)) lamp1.location = Vector((scale[0]*1.5, 0.0, 0.0))
bpy.context.collection.objects.link(lamp1) bpy.context.collection.objects.link(lamp1)
lamp1.parent = cube lamp1.parent = cube
lamp2_data = bpy.data.lights.new(name=atom.name + "_F0_lamp2", lamp2_data = bpy.data.lights.new(name=atom.name + "_F0_lamp_2", type="POINT")
type="POINT")
lamp2_data.distance = atom.scale[0] * 2.0 lamp2_data.distance = atom.scale[0] * 2.0
lamp2_data.energy = 1.0 lamp2_data.energy = 20000.0
lamp2_data.color = (0.8, 0.8, 0.8) lamp2_data.color = (0.8, 0.0, 0.0)
lamp2 = bpy.data.objects.new(atom.name + "_F0_lamp", lamp2_data) lamp2 = bpy.data.objects.new(atom.name + "_F0_lamp", lamp2_data)
lamp2.location = Vector((-scale[0]*1.5, 0.0, 0.0)) lamp2.location = Vector((-scale[0]*1.5, 0.0, 0.0))
bpy.context.collection.objects.link(lamp2) bpy.context.collection.objects.link(lamp2)
lamp2.parent = cube lamp2.parent = cube
# Some properties for cycles
lamp1.data.use_nodes = True
lamp2.data.use_nodes = True
lmp1_P_BSDF = lamp1.data.node_tree.nodes['Emission']
lmp2_P_BSDF = lamp1.data.node_tree.nodes['Emission']
lmp1_P_BSDF.inputs['Strength'].default_value = 200
lmp2_P_BSDF.inputs['Strength'].default_value = 200
# The new 'atom' is the F0 defect complex + lamps # The new 'atom' is the F0 defect complex + lamps
new_atom = cube new_atom = cube
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment