Zmodeler users, I have a question regarding this symbol (see arrow)

  • Yeah, notluners is right. I'll add some info that may be helpful to larger 3D realm stuff.


    That symbol is a coordinate system "triad" that is showing you the origin and orientation of the object's coordinate system referred to as Axes in ZModeler (in other disciplines it may be referred to as a CSYS object, CSYS triad, etc). For the purposes of modeling in 3D space there are three axes; X, Y, Z; the location of an object in space is expressed in a three component coordinate system "point" relative to some origin reference point (0,0,0). The origin is located at the point where the three axis line segments intersect. Think back to basic X,Y graphs and just add a third axis to express the third dimension. (Sorry if this is rudimentary, but I'm a fan of always going back to definitions for foundation).


    So every object has a location in the 3D coordinate space and in ZModeler the origin reference point is referred to as the World coordinate system/space. The World coordinate system/space and the Pivot are initially coincident (at the same coordinate point) but the Pivot can be arbitrarily moved and set as the origin point by enabling/disabling Pivot mode. Some objects will have new locations for their origin reference point (aka origin) that is different than the Pivot or World CSYS.


    If we want to move an object relative to a new coordinate system that we assign to that object, we would set ZModeler to use the Local coordinate space/system. We can arbitrarily manipulate that Local CSYS by moving the origin (aka displacing, translating) and rotating the orientation into different orientations than the World. Since each Local CSYS is a child of the World CYS, we can always look at the World CSYS and any given Local CSYS and be able to calculate the displacement of the origin (i.e. its new location) and the rotation(s) done to the Local CSYS to attain its origin. So this gives us the ability to understand how we may need to re-orient objects relative to other objects.


    If you turn off all the detail levels in ZModeler, you see just the dummy nodes for all the objects and their respective coordinate system origins/orientations. You'll note that many will have a cube surrounding the CSYS triad and some will have some other geometric primitive shape encompassing the triad. This is where things become relevant for how a game engine uses the coordinate system(s) of objects.


    For simple static meshes the coordinate system is mostly only relevant for where to display the object and when manipulating the mesh. If you want to rotate a lightbar, that rotation will have to happen relative to some center of rotation and about (around) an axis. In this case that will be the lightbar's coordinate system origin and the axis will depend on which mode you're in (World, Screen, Local) and the axis you have selected when using the Rotation tool. If you have "Pivot" enabled, then it will be relative to the location of the Pivot coordinate system origin location. For meshes like the siren emissives in "Non-ELS" the emissive mesh's coordinate system origin is the reference point for where the siren mesh's scaling occurs from. So this is why you typically offset the dummy node for a siren's light mesh to be "inside" a lightbar/lighthead to "hide" the emissive. The scaling will be relative to that offset location and "pull" the texture to a different location while also changing its size (technically the two are interlinked but for simpler purposes we'll describe it this way). Key point here is that before you scale your mesh in ZModeler for a siren is to make sure that all the emissive meshes have their Axes set to the parent siren dummy node's. Otherwise you'll have issues when in-game with your emissives ending up in a different place.


    Back to the non-cube dummy node shapes, for objects that need to move in more complex motion profiles (like doors), the dummy primitive shape type carries important information for the game engine about how a object should move. In the case or something like a door, the dummy primitive type should be a cylinder which expresses that the movement of the door is rotational, about an axis of the mesh's coordinate system (the axis and amount of rotation defined in User-Defined properties), and originating from its origin point. So for a door you'd want the CSYS origin to be at the hinge to have it move like a door captive at the hinges. If you put it some other place, then the door would rotate about that other place but would move in some impossible way for a door captive at the hinges to move.


    If you look at a bicycle/motorbike/motorcycle model and you look at the fork of the bike, you'll see that the coordinate system of the fork is rotated about the X-axis to align the Y-axis to be parallel to the head tube angle of the bike. This is because the Y-axis is acting as the axis to rotate about as the player turns the handlebars. If you reset the orientation of the Axes to the World coordinate system then the bike fork would rotate as if it's not attached to the bike.

Don’t have an account yet? Register yourself now and be a part of our community!