Now let’s open our model in 3D Studio Max.
This is how the source model looks. For now, we won’t touch it. Instead, we perform a Collada export and see how it looks in Aximmetry as it is. Let’s choose the Export menu item. To keep it simple we’ll put the exported file in the same folder we store the Max file itself in. This way we won’t run into problems regarding the access paths of the textures. We enter the Midnight Show project folder and then the Model subfolder where the Max file is located.
The type of export has to be Collada. For this, we can use the Autodesk Collada exporter which is the default built-in Collada exporter of Max. Both exporters have their strengths and weaknesses. For now, I’ll use OpenCOLLADA, because it’s much faster when using it with larger models. Let the filename be the same: The Midnight Show and click Save.
The Collada Export options have to be set up carefully once, later the system will remember these settings. Firstly turn on the “Bake Matrices” option, this way the export of the object transformations is more reliable. Turn on “Relative Paths”, this refers to the paths of the textures. Since we put our export in the same folder as the Max file these relative paths will point exactly to the right place. Turn off “Copy Images” so that the exporter does not make copies of the textures, but refers to the original ones. In the “Geometry” section turn on “Triangulate”, because Aximmetry importer only accepts triangle polygons. Leave “Normals” turned on, because Aximmetry needs the normal vector information. But we can leave “Tangents/Binormals” turned off, because Aximmetry calculates these automatically anyway. We can leave the exporting of the animations turned on; this scene does not contain animation, so it doesn’t really matter here.
Click OK. The export is done. We can see a new DAE file appeared in the folder, so it’s ready to load into Aximmetry.
Let’s start Aximmetry. As in other cases, it’s highly recommended to use a dual monitor system. On one monitor we can see the fullscreen output and also can select or move the objects, while on the other monitor we can access the Flow Editor. Of course, for the sake of this tutorial, we’ll work with one single monitor. So I assign Output #1 to this monitor and start the software. Also for the tutorial, I placed an enlarged preview panel here. In the cases when we have to watch the Flow Editor and the output together I’ll use this view.
Let’s start with a new empty compound. We’ll import our Collada file into this. We can find the file either here in Aximmetry’s own File Browser or we can drag it from any external file application. Windows Explorer is currently open at the desired folder so let’s simply use that one. Drag and drop the Collada file from here. Its importing starts right away. This takes a while.
We can see that a new subcompound is created here. It will represent the imported model in the Flow Editor. If we enter it with a double-click we can see that the entire object hierarchy is represented here. We’ll return here later, but first, let’s examine how we can make the model visible on the output.
By all means, we need a Camera module. But instead of inserting a bare Camera, let’s use a preset file that is assembled specifically for studio rendering. Under the [Common_Studio] project in the Compounds / Render subfolder we can find a compound named Render_Genereal. Drag and drop it into the editor. We can Unlink it right away because we’ll edit its content accordingly to the need of our studio scene anyway. If we enter inside we find a Camera and a bunch of prewired post-processing modules. Also, there’s a Mirror Camera here which will help us implementing the floor reflection later. We’ll return here, too.
We connect this Renderer box to the imported model and wire its output to the side. We still don’t see anything, because we have to position the camera first. If the goal is the mere editing of the scene, we can use a Camera Mover module we already know from an earlier tutorial. Let’s connect it to the camera’s Transformation and Zoom Factor and we see the scene right away. I show it in fullscreen, too. So this configuration is already suited for working with the studio scene.
However, if we want to put together a compound that is suitable for controlling the live show itself then it’s worth adding the Virtual Camera and Billboard handling Control Boards at this point. There is a separate tutorial on the usage of these, but we haven’t yet talked about how they are getting into the compound in the first place. So I delete the Camera Mover now and load a preset file. It is also located in the [Common_Studio] project under the Compounds folder. Depending on if we want to use virtual camera motions or tracked cameras we choose between these two folders. Let’s enter the VirtualCam folder now. There’s a bunch of preset files here for the different usage scenarios. Now we’ll use the same one we’re already familiar with from the other tutorial. That’s the one with the three virtual cameras and three billboards. Let’s drag and drop it into the editor.
On the output, we already see that one of the camera motions paths is activated. We can also see that the two well known Control Boards have appeared on the toolbar: one for the Cameras and one for the Billboards. Now how is it possible that our camera is already moving while we haven’t wired anything together yet? The answer is that these preset compounds are built in a way that they can communicate with each other through invisible connections, the so-called “Tunnels”. Later we’ll return to this topic in a different context, for now, the bottom line is that the camera position data is already traveling between the two compounds.
Apart from that, some wirings need to be done in order to display the billboards properly. First of all the rendered output has to be wired through this VirtualCam module. Let’s wire the output from the Render compound into the pin “Rendered”. Also, there’s another Mask output that has to be connected to the pin “Rendered Mask”. It’s needed for the inner billboard masking function of the VirtualCam compound. Furthermore, we have to connect the module into the scene hierarchy through the pin “Parent”.
Now we have to wire out the outputs. If you remember the Virtual Camera tutorial, we defined two system outputs for the broadcast environment: one for the secondary monitor of the PC serving as editing and preview interface, and another for the final broadcast output which is usually output on an SDI port. According to these, there are two output pins on the VirtualCam module, the “Preview” that we send to Output #1 now, and the “Out” that we send to Output #2.
With that, we have finished assembling the needed functions required for controlling a live show. Later we’ll return to these tools to show how to construct and test the final broadcast image. Let’s save our compound into the root folder of the Midnight Show project. The filename will be the same: The Midnight Show.
Now back to the editing of the studio model. We switch off all the billboards so that they don’t disturb us during the editing. Switch the Camera into Free Mode so that we can move within the scene freely.
First, we see that every object is displayed with a default texture of Aximmetry. The reason for this is that we used the default import options which does not specify the importing of the materials therefore only the geometry itself has been imported. We can spot several strange things here. On certain objects, the texture is stretched or twisted or has a plain color. It indicates that these objects have the proper UV. But in the original model, these objects don’t have any texture, only a solid color, therefore these UV errors have no significance here. So, in fact, everything is all rights.
Also, one small thing is that on the top of the screen we can see a “FREE MODE” label. It’s put here by our VirtualCam compound to indicate that the camera is in Free Mode. This, of course, can be disturbing during the scene editing so we should turn it off. We go to the Control Board “CAMERAS” where we find a box named “ON SCREEN” and a property of it named “Show On Preview”. Turn it off, and we see that the label has disappeared.
Let’s examine our studio model with the materials imported as well. To do this we have to change the import options. Right-click on the model compound and choose “Set Importer Options”. There is an “Import materials” switch here, let’s turn it on. Also, we can specify here which Aximmetry shader should be used by the importer to map the imported materials. For now, we can leave the Imp_General shader here which is capable of handling most of the textures generally used in 3D graphics, and its behavior is similar to the behavior of Standard Material of 3D Studio Max.
For the sake of a little experimenting let’s try to import the light sources as well. Later we’ll turn it off, of course. Let’s see the results. Again, the process of importing takes a while.
We can spot immediately that the about 25-30 light sources we’ve imported from the model, and are being calculated in realtime in every frame, are draining the system resources completely in vain because we get a look completely different from what we want. But at least we see the model and can carry out the initial editing steps.
First of all, let’s see how the imported model is represented in the Flow Editor. We enter the model compound. We can see that the hierarchy of the original model is mapped here. Each object is represented by a Scene Node and a connected geometry module which contains the mesh itself. The Shader module corresponding to a certain material is connected to this Mesh module. All the shaders are lined up here on the left and are connected to the appropriate geometries from here.
The reason for splitting the object into a Scene Node and a Mesh module is that any object can consist of several subobjects or object parts each having its own material. Here we can see an example of an object with three subobjects having three different materials. The bottom line is that the Scene Node represents the transformation of the object through which we can move the object, while the Mesh modules represent the object parts with distinct materials.
Note that from the aspect of performance optimization it’s favorable to have as few Scene Nodes as possible. So it’s worth merging as many objects as possible into larger objects, and leave only those objects separated that we want to handle separated in some way, e.g. we want to move it within Aximmetry later. So from that perspective, this model is not a particularly good example, because almost every material has its own separate object. But it’s a relatively simple scene, so it’s doesn’t really matter, we leave it as it is now.
We see plenty of objects here, so we deal with a large hierarchy in the editor. Let’s see how we can navigate between the objects. The simplest way is the visual navigation on one of the output screens. In order to enable editing functions on a particular output, we have to turn it on here in the Edit Scene On menu. In the menu, we can see the list of the fullscreen monitors and the preview panel as well. Since in this tutorial we’ll use both the fullscreen output and the preview window for demonstrating the editing function, let’s mark both in the menu. We can see the editing button bar appeared both on the preview and the fullscreen image.
To be able to select objects on the screen we have to put the editor into Selection mode either by using this Sel button here or either by the ‘S’ keyboard shortcut. If it’s on we can navigate between the object with the mouse, and we can select them by clicking. Also, the selected object can be moved right away via the appearing arrows. We can also rotate and scale, we described this in detail in another tutorial. In short: we can choose the editing mode on the button toolbar, or by using the W, E, R keyboard shortcuts, like in 3D Studio Max editor. For now, we don’t want to move anything from its original position, so I undo the motions by several Ctrl+Z -s.
If we select an object on the output image the corresponding module is also selected in the Flow Editor. Now I click on this column and its mesh module is selected as well. So it’s important that the specific subobject always be selected at first. But I can navigate upwards in the hierarchy: by pressing the U key the selection jumps to the direct parent node of the mesh. By pressing U again we jump to the next parent node upwards and so on. In this particular case, we have a one-level hierarchy, so we can’t continue the upwards jumping.
Select the subobject again. If we now press the M key the selection jumps to the shader that is applied to the subobject. In this state, all the objects that have the same material are marked on the output screen.
What if we want to navigate within the Flow Editor itself? One very useful tool can be accessed by pressing and holding Ctrl + Middle mouse button. The graph is minimized, and we can use it as a minimap to visually navigate within.
We can search among the modules by name. Press Ctrl+F in the Flow Editor. A search panel appears where we can type in one or more search keywords. For e.g. let’s search for “brick”, we get the list of all the modules that contain “brick” in their name. It’s important to note that we can only navigate in this list using the keyboard; we cannot use the mouse here. The reason for this is to enable using the search panel even during a mouse operation. For example, if we want to connect two modules far away from each other. Let’s try to connect this shader to a Mesh module that is currently outside the visible area. While I holding and drawing the wire I can use the search panel simultaneously. I type in “metal”. Then I can navigate in the list with the arrow keys while I still hold the wire with the mouse. After finding the desired module I can drop the wire on it.
We can search not only by the name of the modules. With the Tab key, we can switch between the different search modes. For e.g. we can search by module type. Let’s find all the Mesh modules or all the Nodes. But what is highly useful is the searching by the referred external files. For e.g. let’s find all the materials that refer to some brick textures. In File search mode I type in “bric” and I get the three shader modules that have “bric” in the names of their textures.
When we navigate in the list, the highlighted module is brought to the center of the screen. But pressing Enter also selects the module, and, at the same time, closes the search panel. We can select multiple modules at once as well. For e.g. when I want to select two of these three modules in the list, I can mark or unmark the highlighted item using the left/right arrow keys. Let’s mark two of them. When I press Enter, both marked modules are selected.
The search panel I demonstrated so far searches only within the subcompound we are in. But by pressing Shift+F we can start a global search. The panel looks the same, and the handling is the same. For e.g. in the Name search mode I type in “camera”, and I get the camera-related modules from the entire compound. In the list for each module, I can also see the brown written path of the subcompound the module resides in. Of course, by pressing Enter we can select any modules here as well. By doing this we have also left our model compound, so let’s return into it quickly.
Suppose we’ve found our desired module and we want to access the shader that is connected into it. We can see that a shader is connected to here, but the starting point of this wire is somewhere very far upwards, so getting there by scrolling would be rather uncomfortable. There’s an easier way: let’s right-click the wire, and select “Go To Source Module”. By this, we jump to the starting point of the wire which is the desired shader module in this case. Of course, there’s the opposite operation. From this module, a number of outwards connections start, so it’s a bit difficult to choose the destination. If we move the mouse over a wire we can see the destination module and pin name at the bottom of the Flow Editor. This might help. If we find the desired connection we can right-click it and choose “Go To Target Module”.
Now that we learned how to navigate, let’s start to work with our model at last. First, we target the problems caused by the incomplete or unsuccessful transfer during the Collada export-import. The first thing you may easily spot is that some textures are missing. If we return to the 3D Studio Max we can see that for e.g. this column and this ceiling rod have a wood texture originally. It is vanished here in Aximmetry. The reason for this is that the Max Collada exporter only handles the textures in the proper way if we use a Standard Material in a Max. Since this column is equipped with a special Mental Ray material, the exporter cannot find its textures and won’t add them to the Collada file.
So we have to set it up manually. It’s very easy. Let’s select the column, and with the M navigation key, we’ve already learned to jump to its shader module. The shader has a “Color Map” property, we have to change the file here. It’s currently a default white texture. Find our Wood texture within the Textures folder of the Midnight Show project. Let’s open it and we have the proper texture on the objects.
We can see that the color of the shader module turned orange. This is very important: the system indicates with this color that we touched the module meaning that the module has some property values that are different from their original imported values. In this particular case this is the Color Map value. That means that if we reimport our model, for e.g. because we modified it in 3D Studio Max, this Color Map value won’t be overwritten during the import process, it will retain its value even if it was modified in the Max model. This is a very important feature of the system: if we touch some model parameters here in Aximmetry, and later we have to modify the model in 3D Studio Max, then we can reimport it without worry. Unless we perform hierarchy or name modifications on the affected parts of the model, the changes we made in Aximmetry will remain intact.
This privileged status of the modified property can be revoked at any time. Even property by property: for e.g. we can choose Reset on the Color Map. In this case, we get back the original white texture, and at the same time, the privileged status of the property ceases. Its value will come from the original model again if we do a reimport. Or we can right-click on the module itself and choose Reset All Pins, thus resetting all modified properties to their original values. The ultimate weapon is when we perform a Clean Reimport on the entire model compound. In this case, the model is reimported, but all the modifications within the compound including the added modules, the changed connections, and the modified properties will be lost. So only use this operation when there’s no other way to repair it from a mess.
Let’s continue with the next missing texture. This background screen should have a photo on it. We simply use the previous method: we select the screen object, press M, and change the Color Map in the shader, in this case to the texture named TV_screen. The picture is still too dark, its Luminosity value is incorrect. Let’s pump it up.
The next faulty object is the glass wall. If we check the original model we can see a semitransparent glass surface. That means that the transparency value was not transferred properly during the export-import. Let’s select the object, press M, as usual. In the shader, we have to adjust the Opacity value. But before that, we must change the Transparency mode of the shader. It is None by default, meaning that the material is handled as non-transparent by the system. Let’s change it to the “Normal” transparency mode. After that, the Opacity parameter is in effect, and by lowering it we can see the object becomes transparent.
We have another problem with the glass wall that seems to be more serious. In 3D Studio Max we can see another glass surface at the stairs that is completely missing in Aximmetry. In many cases, the reason for this is that the normals of the object are flipped. So try to flip them back. We select the object then the Polygon editing mode and we click the “Flip” command here. We can see the selection color turned to a brighter red here, so the polygons are flipped back now. We have to export the model again. Our previous export settings have remained, so just click OK. We don’t have to do anything, Aximmetry detects the change of the Collada file, and automatically reimports it. We can see here in the Log that a reimport has occurred. As we discussed before, the modifications we carried out earlier in Aximmetry have remained intact. But the missing glass wall appeared here, so, indeed, the normals were the problem. I increase the Opacity a bit because the glass seemed darker in the original model.
One problem remained: the back of the couch. It’s in a rather strange condition. It seems that the Collada exporter couldn’t deal properly with the transformation of the object. One way to correct this is to use the Reset Transform utility of 3D Studio Max. We select the object, choose the Utility tab and click the Reset Transform operation. By doing this a Transform modifier is added to the object, which burns the Rotation and Scaling transformation into the mesh itself, and only a Position transformation remains on the object - hopefully, the exporter will deal with it easily. Let’s do another export. And yes: the back is OK now in Aximmetry.
One more thing regarding the reimporting: as I said before when we export a Collada file from Max, Aximmetry detects the change automatically, and does a reimport. If for whatever reason it fails, for e.g. because Max was still writing or locking the file when Aximmetry tries to read it, we’ll get a red error message here. In this case, we simply force the reimport manually: right-click on the model compound and choose “Reimport”.