Preparing a Model in 3ds Max
This article is about what a model needs to be like in order to land in the Light Stream scene at the right size, right side up, and without any loss. It uses 3ds Max as the example, but the requirements are the same for any 3D editor: what matters to the program is not what tool the model was made in, but what is written in the *.obj file. The import itself is covered in the article Importing OBJ Models.
A model for Light Stream should be prepared to be "clearer," not "prettier." There is no pretty rendering here: the program displays an object with simple flat shading and a single texture. On the other hand, snapping works off the model's vertices, and its objects become rows in a list you will be scrolling through for the whole project — so what matters most is correct scale, clean geometry, and meaningful names.
What Carries Over to Light Stream and What Doesn't
| Carries Over | Does Not Carry Over |
|---|---|
|
|
Units and Scale
Coordinates are taken from the file as-is: there is no scaling dialog on import, so you can't adjust the size "on the way in."
The Light Stream scene is measured in millimeters: one unit of length in the file equals one millimeter. A facade 30 m tall should take up 30,000 units in the file, and a single pixel of an LED strip should be thirty to forty units. The easiest way to check the scale is with a cube created in the program itself: in the Properties window (Cube section), set its Width, Height, and Length to 1000 each — that's a one-meter cube — place it next to the model and compare.
In 3ds Max it's most convenient to work like this: set the system units to millimeters and model at real-world size — then nothing needs to be recalculated on export, and the scale factor stays equal to 1. If the scene was built in other units, set the scale factor on export: from meters — 1000, from centimeters — 10, from inches — 25.4.
A units mistake is the most common reason for "nothing visible" after import. A model exported in meters ends up a thousand times smaller than it should be and gets lost among the fixtures; a model accidentally scaled up a thousand times ends up kilometers from the origin, and the camera shows nothing but empty space.
Orientation
In the Light Stream scene, the Z axis points up — same as in 3ds Max. So in the OBJ export settings, the Flip YZ-axis checkbox (which swaps the axes for a Y-up convention) should be unchecked: with it enabled, the model will end up lying on its side in the scene. If the model does end up on its side, toggle this checkbox and export again.
Before exporting, it helps to reset transforms and position the model in 3ds Max exactly where it should end up relative to the origin: the position of objects relative to each other and the coordinates from the file are preserved in full on import.
Breaking Down into Objects and Naming
The file is parsed into separate objects, and each one becomes a row in the 3D Objects window with its own visibility checkbox, its own material, and its own lock. The rules are simple:
- All geometry must belong to named objects. Anything written to the file before the first object is not imported.
- Every object must have a name. An unnamed object or group cuts off the file reading: anything written after it will no longer make it into the scene, and the model will arrive half-finished.
- Names must be in Latin characters, no Cyrillic. This applies both to object names and to the names of files the model references — the material file and textures. Cyrillic letters in them turn into a string of question marks on import, and a texture with such a name simply won't be found.
- Don't name an object
light. This is a reserved name: the geometry of an object with this name is treated not as scenery but as a light-emitting part — it's drawn not with its own material but as light, and it's invisible in the scene until the object is selected. - Break it down by meaning: "facade", "roof", "column_left". A model made of one solid piece will be a single row in the list — you won't be able to hide or recolor part of it afterward.
- Don't overdo it in the other direction either: several hundred small objects turn the 3D Objects list into an endless ribbon that's inconvenient to search through.
Polygons
Light Stream reads triangles and quads. Faces with five or more vertices are silently skipped — their place in the scene will be a hole.
So in the export settings, in the Faces group, choose Triangles or Quads, not Polygons. Before exporting, collapse the modifiers and convert the objects to a polygon mesh: NURBS, patches, boolean-operation solids, and other uncalculated objects will either not make it into the OBJ at all, or will end up looking different from how they appeared in the viewport.
One more requirement for the geometry: don't export vertex colors. If the exporter appends the vertex's color to its coordinates on top of that, such a vertex won't be read at all, the vertex numbering will shift — and the faces will end up built from the wrong points: the model will arrive turned inside out or cut off partway through.
Normals
Normals must be written to the file — in the export settings this is the Normals checkbox. The program uses them to calculate shading: without normals the object isn't lit at all and stays in the scene as a flat black silhouette with no volume.
Smoothing groups by themselves aren't read, but there's also no need to set them separately: the exporter bakes the smoothing result into the normals, and the object arrives in the scene just as smooth or as faceted as it was in the editor.
Shading is calculated only for parts colored with a plain color. An object with a texture is drawn flat, without shading — normals don't affect it.
Light Stream has no backface culling — a face is visible from both sides, so a part turned inside out won't disappear. But a normal pointing away from the light kills the shading: such a face will be noticeably darker than its neighbors. If there are dark patches on the model after import, check the direction of the normals in the editor.
Lines for Fixtures
Lines written to the file arrive in the scene as ready-made splines — you can place fixtures along them right away, without manually tracing the edges. This is the most convenient way to pass strip, garland, and contour-lighting runs to Light Stream: you draw them as splines in 3ds Max exactly where they should go, and in the program all that's left is to link them to the mapping.
For the lines to come through:
- enable their export — the Shapes/Lines checkbox in the OBJ export settings;
- convert the splines to polylines with the required number of points: curves are written to the file as segments, and the smaller the step, the more points arrive in the scene;
- join the segments into a single line. Each line in the file becomes a separate spline, so a run made up of unconnected segments will arrive as a scattering of short splines;
- turn off the export of texture coordinates if the splines don't show up: some exporters append them to line entries too, and Light Stream skips such lines.
A spline's name is taken not from the line itself but from the object it's written inside — so it's worth grouping lines into separate, meaningfully named objects: "line_roof", "contour_window". Such an object itself won't appear in the 3D Objects list: if it has no faces, only splines arrive in the scene.
There's no need to make a separate object for fixtures: lights from 3ds Max aren't saved to OBJ at all. If you want to pass placed light fixtures to the program as well, export the model to *.fbx — from there, besides objects and splines, single fixtures come through too.
Materials and Textures
OBJ stores materials in a separate file next to the model, and textures are separate image files too — so enable material export and always move the model as a whole, the entire folder.
What you need to know about materials in advance:
- One object — one material. A multi-component material (Multi/Sub-Object) carries over only one of its parts — the one mentioned last in the file — and that part is applied to the whole object. If parts of a piece need to be different colors, split the piece into objects by material.
- Only the base color and base texture are taken from the material. Opacity, reflections, bump, self-illumination, and any procedural maps are ignored — it's better to "bake" them into a regular image, or not rely on them at all.
- Textures are regular JPG, PNG, BMP, or GIF images. Put them next to the model or in a subfolder: the program searches for the file by name next to the model and in all nested folders. File names must be in Latin characters.
- A texture needs a UV unwrap. An object without one will get the texture smeared into a single color.
- There are no self-illuminating materials in Light Stream. If a part needs to look like it's glowing — a sign, a screen, a light line — enable the Glow checkbox for it after import, in the Material section of the Properties window.
Color, texture, and glow can also be assigned entirely by hand within the program, so for utility geometry you don't need to set up materials in the editor at all: an object without a material arrives gray.
Model Complexity
The model is embedded inside the project file in full, so its weight is the project's weight, its load time, and the load on the graphics card at every preview frame. Moreover, the mesh takes up more space in the program than in the editor: each face is stored together with its own vertices.
A reasonable minimum of preparation before export:
- delete everything that isn't visible on the object: interiors, the underside, hidden parts, helper objects, duplicate copies;
- remove small details that won't show up in preview: bolts, profiles, surface texture detail, one-millimeter bevels;
- reduce the segment count on fillets and pipes — smoothness is expensive;
- leave vertices where they're needed: Snap to Vertices works off them, and fixtures will land precisely on corners and edges. If a line of fixtures needs to run along a flat wall, add edges to the model along its borders.
Export Procedure
- In the 3ds Max scene, gather only what should go to Light Stream: the model itself and the lines for fixtures.
- Collapse the modifiers, convert the objects to a polygon mesh, delete hidden and unnecessary geometry.
- Check the object names: they must exist, and they must be in Latin characters.
- Check the dimensions and bring the model to the "one unit = one millimeter" scale.
- Export the selection to
*.obj. - In the export settings: Faces — Triangles or Quads; Normals — enable; Texture coordinates — enable if there are textures; Shapes/Lines — enable if there are lines for fixtures in the scene; Flip YZ-axis — uncheck; material export — enable.
- Save the model, the material file, and the textures into a single folder and import from there.
The exporter reserves the first line of the resulting file for a note about itself — if you edit the file by hand, don't delete it: on import the first line isn't read, and along with it, anything you put in its place would be lost.
What to Check After Import
- Press Z in the 3D View window with nothing selected — the camera will frame the whole scene. Create a cube next to it and set its Width, Height, and Length to 1000 each: if the one-meter cube next to the facade looks like a one-meter cube, the scale is correct.
- Check the 3D Objects list: are all the parts there, are their names readable, did the splines come through from the lines.
- Fly the camera around the model and look for holes where complex faces used to be, and dark patches where normals are flipped.
- Make sure the objects aren't gray if you exported materials: a flat gray color means neither the material nor the texture was found.
Anything that doesn't line up is more reliably fixed in 3ds Max and re-imported: you can't refine geometry using Light Stream's own tools, and a model fixed in the editor can also be reused in other projects.
What Else Might Help
- How the import itself works and what to do with the model in the scene — Importing OBJ Models.
- Names, visibility, lock, and materials of imported objects — 3D Objects.
- Snapping to vertices and the rest of the 3D View window's buttons — 3D Toolbar.
- How to place fixtures onto a finished model — Adding 3D Splines and Linking 2D and 3D.