io_scene_3ds: Update for Principled BSDF specularity #104917
@ -17,9 +17,9 @@ from bpy.props import (
|
|||||||
import bpy
|
import bpy
|
||||||
bl_info = {
|
bl_info = {
|
||||||
"name": "Autodesk 3DS format",
|
"name": "Autodesk 3DS format",
|
||||||
"author": "Bob Holcomb, Campbell Barton, Andreas Atteneder, Sebastian Schrand",
|
"author": "Bob Holcomb, Campbell Barton, Sebastian Schrand",
|
||||||
"version": (2, 4, 6),
|
"version": (2, 4, 7),
|
||||||
"blender": (3, 6, 0),
|
"blender": (4, 0, 0),
|
||||||
"location": "File > Import-Export",
|
"location": "File > Import-Export",
|
||||||
"description": "3DS Import/Export meshes, UVs, materials, textures, "
|
"description": "3DS Import/Export meshes, UVs, materials, textures, "
|
||||||
"cameras, lamps & animation",
|
"cameras, lamps & animation",
|
||||||
|
@ -698,7 +698,7 @@ def make_material_chunk(material, image):
|
|||||||
shading.add_variable("shading", _3ds_ushort(3)) # Phong shading
|
shading.add_variable("shading", _3ds_ushort(3)) # Phong shading
|
||||||
material_chunk.add_subchunk(make_material_subchunk(MATAMBIENT, wrap.emission_color[:3]))
|
material_chunk.add_subchunk(make_material_subchunk(MATAMBIENT, wrap.emission_color[:3]))
|
||||||
material_chunk.add_subchunk(make_material_subchunk(MATDIFFUSE, wrap.base_color[:3]))
|
material_chunk.add_subchunk(make_material_subchunk(MATDIFFUSE, wrap.base_color[:3]))
|
||||||
material_chunk.add_subchunk(make_material_subchunk(MATSPECULAR, material.specular_color[:]))
|
material_chunk.add_subchunk(make_material_subchunk(MATSPECULAR, wrap.specular_tint[:3]))
|
||||||
material_chunk.add_subchunk(make_percent_subchunk(MATSHINESS, 1 - wrap.roughness))
|
material_chunk.add_subchunk(make_percent_subchunk(MATSHINESS, 1 - wrap.roughness))
|
||||||
material_chunk.add_subchunk(make_percent_subchunk(MATSHIN2, wrap.specular))
|
material_chunk.add_subchunk(make_percent_subchunk(MATSHIN2, wrap.specular))
|
||||||
material_chunk.add_subchunk(make_percent_subchunk(MATSHIN3, wrap.metallic))
|
material_chunk.add_subchunk(make_percent_subchunk(MATSHIN3, wrap.metallic))
|
||||||
@ -1211,10 +1211,10 @@ def make_track_chunk(ID, ob, ob_pos, ob_rot, ob_size):
|
|||||||
track_chunk.add_variable("fov", _3ds_float(round(math.degrees(fov), 4)))
|
track_chunk.add_variable("fov", _3ds_float(round(math.degrees(fov), 4)))
|
||||||
|
|
||||||
elif ID == HOTSPOT_TRACK_TAG: # Hotspot
|
elif ID == HOTSPOT_TRACK_TAG: # Hotspot
|
||||||
beam_angle = math.degrees(ob.data.spot_size)
|
|
||||||
for i, frame in enumerate(kframes):
|
for i, frame in enumerate(kframes):
|
||||||
|
beamsize = next((fc.evaluate(frame) for fc in fcurves if fc is not None and fc.data_path == 'spot_size'), ob.data.spot_size)
|
||||||
blend = next((fc.evaluate(frame) for fc in fcurves if fc is not None and fc.data_path == 'spot_blend'), ob.data.spot_blend)
|
blend = next((fc.evaluate(frame) for fc in fcurves if fc is not None and fc.data_path == 'spot_blend'), ob.data.spot_blend)
|
||||||
hot_spot = beam_angle - (blend * math.floor(beam_angle))
|
hot_spot = math.degrees(beamsize) - (blend * math.floor(math.degrees(beamsize)))
|
||||||
track_chunk.add_variable("tcb_frame", _3ds_uint(int(frame)))
|
track_chunk.add_variable("tcb_frame", _3ds_uint(int(frame)))
|
||||||
track_chunk.add_variable("tcb_flags", _3ds_ushort())
|
track_chunk.add_variable("tcb_flags", _3ds_ushort())
|
||||||
track_chunk.add_variable("hotspot", _3ds_float(round(hot_spot, 4)))
|
track_chunk.add_variable("hotspot", _3ds_float(round(hot_spot, 4)))
|
||||||
@ -1647,14 +1647,14 @@ def save(operator, context, filepath="", scale_factor=1.0, use_scene_unit=False,
|
|||||||
bg_tex = 'TEX_IMAGE', 'TEX_ENVIRONMENT'
|
bg_tex = 'TEX_IMAGE', 'TEX_ENVIRONMENT'
|
||||||
bg_color = next((lk.from_node.inputs[0].default_value[:3] for lk in ntree if lk.from_node.type == bgtype and lk.to_node.type in bgshade), world.color)
|
bg_color = next((lk.from_node.inputs[0].default_value[:3] for lk in ntree if lk.from_node.type == bgtype and lk.to_node.type in bgshade), world.color)
|
||||||
bg_mixer = next((lk.from_node.type for lk in ntree if lk.from_node.type in bgmixer and lk.to_node.type == bgtype), bgtype)
|
bg_mixer = next((lk.from_node.type for lk in ntree if lk.from_node.type in bgmixer and lk.to_node.type == bgtype), bgtype)
|
||||||
bg_image = next((lk.from_node.image.name for lk in ntree if lk.from_node.type in bg_tex and lk.to_node.type == bg_mixer), False)
|
bg_image = next((lk.from_node.image for lk in ntree if lk.from_node.type in bg_tex and lk.to_node.type == bg_mixer), False)
|
||||||
gradient = next((lk.from_node.color_ramp.elements for lk in ntree if lk.from_node.type == 'VALTORGB' and lk.to_node.type in bgmixer), False)
|
gradient = next((lk.from_node.color_ramp.elements for lk in ntree if lk.from_node.type == 'VALTORGB' and lk.to_node.type in bgmixer), False)
|
||||||
background_color_chunk.add_variable("color", _3ds_float_color(bg_color))
|
background_color_chunk.add_variable("color", _3ds_float_color(bg_color))
|
||||||
background_chunk.add_subchunk(background_color_chunk)
|
background_chunk.add_subchunk(background_color_chunk)
|
||||||
if bg_image:
|
if bg_image:
|
||||||
background_image = _3ds_chunk(BITMAP)
|
background_image = _3ds_chunk(BITMAP)
|
||||||
background_flag = _3ds_chunk(USE_BITMAP)
|
background_flag = _3ds_chunk(USE_BITMAP)
|
||||||
background_image.add_variable("image", _3ds_string(sane_name(bg_image)))
|
background_image.add_variable("image", _3ds_string(sane_name(bg_image.name)))
|
||||||
object_info.add_subchunk(background_image)
|
object_info.add_subchunk(background_image)
|
||||||
object_info.add_subchunk(background_chunk)
|
object_info.add_subchunk(background_chunk)
|
||||||
|
|
||||||
@ -1710,7 +1710,7 @@ def save(operator, context, filepath="", scale_factor=1.0, use_scene_unit=False,
|
|||||||
object_info.add_subchunk(layerfog_chunk)
|
object_info.add_subchunk(layerfog_chunk)
|
||||||
if fognode or foglayer and layer.use_pass_mist:
|
if fognode or foglayer and layer.use_pass_mist:
|
||||||
object_info.add_subchunk(use_fog_flag)
|
object_info.add_subchunk(use_fog_flag)
|
||||||
if use_keyframes and world.animation_data:
|
if use_keyframes and world.animation_data or world.node_tree.animation_data:
|
||||||
kfdata.add_subchunk(make_ambient_node(world))
|
kfdata.add_subchunk(make_ambient_node(world))
|
||||||
|
|
||||||
# Make a list of all materials used in the selected meshes (use dictionary, each material is added once)
|
# Make a list of all materials used in the selected meshes (use dictionary, each material is added once)
|
||||||
|
@ -527,6 +527,7 @@ def process_next_chunk(context, file, previous_chunk, imported_objects, CONSTRAI
|
|||||||
contextWrapper.metallic = contextMaterial.metallic
|
contextWrapper.metallic = contextMaterial.metallic
|
||||||
contextWrapper.roughness = contextMaterial.roughness
|
contextWrapper.roughness = contextMaterial.roughness
|
||||||
contextWrapper.specular = contextMaterial.specular_intensity
|
contextWrapper.specular = contextMaterial.specular_intensity
|
||||||
|
contextWrapper.specular_tint = contextMaterial.specular_color[:]
|
||||||
contextWrapper.emission_color = contextMaterial.line_color[:3]
|
contextWrapper.emission_color = contextMaterial.line_color[:3]
|
||||||
contextWrapper.emission_strength = contextMaterial.line_priority / 100
|
contextWrapper.emission_strength = contextMaterial.line_priority / 100
|
||||||
contextWrapper.alpha = contextMaterial.diffuse_color[3] = contextAlpha
|
contextWrapper.alpha = contextMaterial.diffuse_color[3] = contextAlpha
|
||||||
@ -1000,6 +1001,7 @@ def process_next_chunk(context, file, previous_chunk, imported_objects, CONSTRAI
|
|||||||
contextWrapper.metallic = contextMaterial.metallic
|
contextWrapper.metallic = contextMaterial.metallic
|
||||||
contextWrapper.roughness = contextMaterial.roughness
|
contextWrapper.roughness = contextMaterial.roughness
|
||||||
contextWrapper.specular = contextMaterial.specular_intensity
|
contextWrapper.specular = contextMaterial.specular_intensity
|
||||||
|
contextWrapper.specular_tint = contextMaterial.specular_color[:]
|
||||||
contextWrapper.emission_color = contextMaterial.line_color[:3]
|
contextWrapper.emission_color = contextMaterial.line_color[:3]
|
||||||
contextWrapper.emission_strength = contextMaterial.line_priority / 100
|
contextWrapper.emission_strength = contextMaterial.line_priority / 100
|
||||||
contextWrapper.alpha = contextMaterial.diffuse_color[3] = contextAlpha
|
contextWrapper.alpha = contextMaterial.diffuse_color[3] = contextAlpha
|
||||||
|
Loading…
Reference in New Issue
Block a user