Difference between revisions of "Blender Model Export"

From PioneerWiki
Jump to: navigation, search
m
m
Line 16: Line 16:
 
Blender's Coordinates are as follows: X is right, Y is forward and Z is up. This is a bit different from Pioneer where X is right, Y is up and Z is backwards. You can model in default coordinates as it is possible to change the axes when exporting.
 
Blender's Coordinates are as follows: X is right, Y is forward and Z is up. This is a bit different from Pioneer where X is right, Y is up and Z is backwards. You can model in default coordinates as it is possible to change the axes when exporting.
  
[[/images/Coords.png|alt=Coordinates]]
+
[[File:Coords.png Coordinates]]
  
 
=== Levels of detail ===
 
=== Levels of detail ===
Line 24: Line 24:
 
Pioneer supports four levels of detail, where LOD4 is the most detailed. LOD1 is also used as the '''collision mesh''', so it should be as simple as possible but encompass the whole model.
 
Pioneer supports four levels of detail, where LOD4 is the most detailed. LOD1 is also used as the '''collision mesh''', so it should be as simple as possible but encompass the whole model.
  
[[/images/Lod.png|alt=Level of Detail]]
+
[[File:Lod.png Level of Detail]]
  
 
Here we have LOD1 overlapping LOD2.
 
Here we have LOD1 overlapping LOD2.
Line 32: Line 32:
 
You can only have one material and texture per mesh. If you need multiple materials, you need to split your model into smaller parts and export them separately.
 
You can only have one material and texture per mesh. If you need multiple materials, you need to split your model into smaller parts and export them separately.
  
[[/images/Cockpit.png|alt=Separating the cockpit]]
+
[[File:Cockpit.png Separating the cockpit]]
  
 
Here we separate the cockpit area and export it as a new .obj so it can be given a shiny material.
 
Here we separate the cockpit area and export it as a new .obj so it can be given a shiny material.
Line 40: Line 40:
 
Select .obj file format when exporting and use the following settings (remember to save the preset).
 
Select .obj file format when exporting and use the following settings (remember to save the preset).
  
[[/images/Export-settings.png|alt=.OBJ Export settings]]
+
[[File:Export-settings.png .OBJ Export settings]]
  
 
If you don't export normals, Pioneer will recalculate them and smoothing information will be lost.
 
If you don't export normals, Pioneer will recalculate them and smoothing information will be lost.

Revision as of 02:21, 18 September 2012

Here are some notes on using Blender to produce Pioneer content.

Modeling

Limitations

  • There's no established polygon budget, but don't go crazy. It's more important to have detail levels set up correctly so you don't use a 10K mesh for something that's only visible as a dot.
  • One texture per mesh. .png format. Size must be power of two (32x32, 64x64, 128x128...).

Units

Pioneer units are meters. You can keep Blender's unit display at "None", but if you switch to "Metric", remember to keep the scale at 1.

Blender's unit configuration

Blender's Coordinates are as follows: X is right, Y is forward and Z is up. This is a bit different from Pioneer where X is right, Y is up and Z is backwards. You can model in default coordinates as it is possible to change the axes when exporting.

File:Coords.png Coordinates

Levels of detail

It is important to supply LODs for your model.

Pioneer supports four levels of detail, where LOD4 is the most detailed. LOD1 is also used as the collision mesh, so it should be as simple as possible but encompass the whole model.

File:Lod.png Level of Detail

Here we have LOD1 overlapping LOD2.

Multiple materials

You can only have one material and texture per mesh. If you need multiple materials, you need to split your model into smaller parts and export them separately.

File:Cockpit.png Separating the cockpit

Here we separate the cockpit area and export it as a new .obj so it can be given a shiny material.

Exporting

Select .obj file format when exporting and use the following settings (remember to save the preset).

File:Export-settings.png .OBJ Export settings

If you don't export normals, Pioneer will recalculate them and smoothing information will be lost.

Using the models

Here is an example ship definition. First we define a "gear" model which can be called and animated as a landing gear submodel.

define_model('gear', {
    info = {
        scale = 1.0,
        bounding_radius = 5,
        lod_pixels = {100},
        materials = {'default'},
    },
    static = function(lod)
        set_material('default', 0.8,0.8,0.8,1, .3,.3,.3,5, 0,0,0)
        use_material('default')
        texture('gear_diff.png')
        load_obj('gear.obj')
    end
})

define_model('natrix', {
    info = {
        scale = 3.5,
        bounding_radius = 40,
        lod_pixels = {50, 100},
        materials = {'default'},
        tags = {'ship'},
        ship_defs = {
            {
                name='Natrix',
                forward_thrust = -6e6,
                reverse_thrust = 0,
                up_thrust = 1e6,
                down_thrust = -1e6,
                left_thrust = -1e6,
                right_thrust = 1e6,
                angular_thrust = 15e6,
                gun_mounts = {
                    { v(0.000, 0.000, -9.342), v(0.000, 0.000, -1.000) },
                },
                max_cargo = 50,
                max_laser = 1,
                max_missile = 0,
                max_cargoscoop = 0,
                max_fuelscoop = 0,
                capacity = 40,
                hull_mass = 30,
                price = 50000,
                hyperdrive_class = 2,
            }
        }
    },
    static = function(lod)
        --name, diffuse rgba, spec rgb+intensity, emit rgb
        set_material('default', 0.8,0.8,0.8,1, .3,.3,.3,5, 0,0,0)
        use_material('default')
        texture('hull.png')
        texture_glow('emit.png')
        if lod == 1 then
            load_obj('lod1.obj')
        else
            load_obj('lod2.obj')
        end

        --rear facing thrusters
        thruster(v(1.300, 0.000, 9.769), v(0.000, 0.000, 1.000), 4.50, true)
        thruster(v(-1.300, 0.000, 9.769), v(0.000, 0.000, 1.000), 4.50, true)

    end,
    dynamic = function(lod)
        --no point in visible gear on lowest lod
        if lod > 1 then
            --gear animation. In Blender we have determined that the gear
            --should be translated 0.5 units downwards.
            local gearpos = get_animation_position('WHEEL_STATE')
            call_model('gear', v(0,-0.5 * gearpos,0), v(1,0,0), v(0,1,0), 1.0)
        end

        --script blinking lights, dynamic equipment submodels etc. here
    end
})