[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [4660] trunk/py/scripts/addons/ io_scene_fbx/import_fbx.py: support for camera FOV clip-range, x/y shift

Campbell Barton ideasman42 at gmail.com
Fri Aug 9 08:11:12 CEST 2013


Revision: 4660
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=4660
Author:   campbellbarton
Date:     2013-08-09 06:11:12 +0000 (Fri, 09 Aug 2013)
Log Message:
-----------
support for camera FOV clip-range, x/y shift
support for lamp color, energy, spot angle

Modified Paths:
--------------
    trunk/py/scripts/addons/io_scene_fbx/import_fbx.py

Modified: trunk/py/scripts/addons/io_scene_fbx/import_fbx.py
===================================================================
--- trunk/py/scripts/addons/io_scene_fbx/import_fbx.py	2013-08-09 05:18:18 UTC (rev 4659)
+++ trunk/py/scripts/addons/io_scene_fbx/import_fbx.py	2013-08-09 06:11:12 UTC (rev 4660)
@@ -142,7 +142,7 @@
         else:
             assert(elem_prop.props[1] == b'Number')
             assert(elem_prop.props[2] == b'')
-            assert(elem_prop.props[3] == b'A')
+            assert(elem_prop.props[3] in {b'A', b'A+'})
 
         # we could allow other number types
         assert(elem_prop.props_type[4] == data_types.FLOAT64)
@@ -383,7 +383,10 @@
     return image
 
 
-def blen_read_camera(fbx_obj):
+def blen_read_camera(fbx_obj, global_scale):
+    # meters to inches
+    M2I = 0.0393700787
+    
     elem_name, elem_class = elem_split_name_class_nodeattr(fbx_obj)
     assert(elem_class == b'Camera')
     elem_name_utf8 = elem_name.decode('utf-8')
@@ -393,10 +396,23 @@
 
     camera = bpy.data.cameras.new(name=elem_name_utf8)
 
+    camera.lens = elem_props_get_number(fbx_props, b'FocalLength', 35.0)
+    camera.sensor_width = elem_props_get_number(fbx_props, b'FilmWidth', 32.0 * M2I) / M2I
+    camera.sensor_height = elem_props_get_number(fbx_props, b'FilmHeight', 32.0 * M2I) / M2I
+
+    filmaspect = camera.sensor_width / camera.sensor_height
+    # film offset
+    camera.shift_x = elem_props_get_number(fbx_props, b'FilmOffsetX', 0.0) / (M2I * camera.sensor_width)
+    camera.shift_y = elem_props_get_number(fbx_props, b'FilmOffsetY', 0.0) / (M2I * camera.sensor_height * filmaspect)
+
+    camera.clip_start = elem_props_get_number(fbx_props, b'NearPlane', 0.01)
+    camera.clip_end = elem_props_get_number(fbx_props, b'FarPlane', 100.0)
+
     return camera
 
 
 def blen_read_light(fbx_obj):
+    import math
     elem_name, elem_class = elem_split_name_class_nodeattr(fbx_obj)
     assert(elem_class == b'Light')
     elem_name_utf8 = elem_name.decode('utf-8')
@@ -411,6 +427,13 @@
 
     lamp = bpy.data.lamps.new(name=elem_name_utf8, type=light_type)
 
+    if light_type == 'SPOT':
+        lamp.spot_size = math.radians(elem_props_get_number(fbx_props, b'Cone angle', 45.0))
+
+    # TODO, cycles
+    lamp.energy = elem_props_get_number(fbx_props, b'Intensity', 100.0) / 100.0
+    lamp.color = elem_props_get_number(fbx_props, b'Color', (1.0, 1.0, 1.0))
+
     return lamp
 
 
@@ -419,6 +442,8 @@
          use_cycles=True,
          use_image_search=False):
 
+    global_scale = (sum(global_matrix.to_scale()) / 3.0) if global_matrix else 1.0
+
     import os
     from . import parse_fbx
 
@@ -529,7 +554,7 @@
                 continue
             if fbx_obj.props[-1] == b'Camera':
                 assert(blen_data is None)
-                fbx_item[1] = blen_read_camera(fbx_obj)
+                fbx_item[1] = blen_read_camera(fbx_obj, global_scale)
     _(); del _
 
 



More information about the Bf-extensions-cvs mailing list