<HTML>

  <title>loonygames' Beaker's Bent</title>
<body bgcolor="#FEFFEC" link="#000000" vlink="#000000">
<div align="CENTER">
  <div align="CENTER">
    <center>
<script type="text/javascript"><!--
google_ad_client = "ca-pub-2373963192914918";
/* 468x60 */
google_ad_slot = "3417104156";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</center>
  </div>
  <div align="CENTER">
    <table border="0" width="600">
      <tr> 
        <td width="261" height="105"><img src="../../images/next_logo_sml.jpg" width="251" height="94" usemap="#map" border="0"> 
        </td>
        <td width="92" height="105" align="LEFT" valign="MIDDLE"> 
          <p><font face="Arial, Helvetica, sans-serif" size="-1">- <a href="../index.html">Contents</a><br>
- <a href="../../../about.1">About</a><br>
            - <a href="../../../submissions/index.html">Submissions</a><br>
            - <a href="../../../feedback.1">Feedback</a><br>
            - <a href="../../archives/index.html">Archives</a></font></p>
        </td>
      </tr>
    </table>
  </div>
  <table border="0" width="600" align="CENTER">
    <tr> 
      <td width="192" height="936" align="LEFT" valign="TOP"> 
        <table border="0" width="172">
          <tr> 
            <td height="1194" align="LEFT" valign="TOP"> 
              <p><font color="#0000FF"><b><font face="Arial, Helvetica, sans-serif" color="#0000CC">volume 
                1, issue 16</font></b></font></p>
              <p><font color="#0000FF"><b><font face="Arial, Helvetica, sans-serif" color="#0000CC"> 
                </font></b></font></p>
              <p>  <p><font face="Courier New, Courier, mono"><b><font color="#339900" face="Arial, Helvetica, sans-serif">Today 
                in loonygames:</font></b></font></p>

<P><font color="#000000" face="Arial, Helvetica, sans-serif" size="-1">New!!</font><font face="Arial, Helvetica, sans-serif" size="2"> The Archives have been cleaned up, fead links fixed, and printable versions restored! Also, don't miss the new comments <a href="../../../index.html">on the front page</a>!</font></p>
              
<P><font color="#000000" face="Arial, Helvetica, sans-serif" size="-1"><a href="../../2.15/feat/index.html" target="">Livin' 
  With The Sims</a></font><font face="Arial, Helvetica, sans-serif" size="2">: 
  theAntiELVIS explores the wild and wacky world that is Will Wright's <b>The Sims</b>, 
  asking the inevitable quesiton, &quot;is <b>The Sims</b> the first step toward a virtual 
  life where everyone is Swedish?&quot;</font></p>
<P><font color="#000000" face="Arial, Helvetica, sans-serif" size="-1"><a href="../../2.15/pixel/index.html" target="">Pixel 
  Obscura</a></font><font face="Arial, Helvetica, sans-serif" size="2">: Josh 
  Vasquez on <b>Omikron: The Nomad Soul</b>.</font></p>
<P><font color="#000000" face="Arial, Helvetica, sans-serif" size="-1"><a href="../../rl/index.html" target="">Real 
  Life</a></font>: <font face="Arial, Helvetica, sans-serif"> <font size="-1">Check 
  out our newest comic strip, Real Life! Updated daily!</font></font></p>
<P><font color="#000000" face="Arial, Helvetica, sans-serif" size="-1"><a href="../../uf.1" target="">User 
  Friendly</a></font>: <font face="Arial, Helvetica, sans-serif"> <font size="-1">Updated 
  daily!</font></font></p>


</p>
              
              <p><font face="Arial, Helvetica, sans-serif" size="-1"><b><font color="#339900">Related 
                Links:</font></b></font></p>
              <p><font face="Arial, Helvetica, sans-serif" size="-1"><a href="../../1.1/guest">Nothing 
                New Under the Sun</a></font><font face="Arial, Helvetica, sans-serif" size="-1">: 
                Rich's Guest Editorial, the piece that started this column.</font></p>
              
              
              <p><font face="Arial, Helvetica, sans-serif" size="-1"><b><font color="#339900">Feedback:</font></b></font></p>
              <p><font face="Arial, Helvetica, sans-serif" size="-1">You've got 
                an opinion...voice it! Drop a line to our <a href="../../../feedback.1">Feedback</a> 
                column...you could end up with a free T-Shirt!</font></p>
              <p><font face="Arial, Helvetica, sans-serif" size="-1"><b><font color="#339900">Random 
                Feature :</font></b></font></p>
               <p align="CENTER"><img src="../../images/thumbs/pixel.jpg" width="92" height="117" align="MIDDLE" border="0"></p><p><font face="Arial, Helvetica, sans-serif" size="-1"><a href="../../2.15/pixel/index.html">Pixel Obscura</a>: Josh Vasquez's regular look at the convergence of film and videogames.</font></p>
              <form method="get" action="http://www.google.com/custom" name="">
                <font face="Arial, Helvetica, sans-serif" size="-1"><b><font color="#339900">Search 
                the Archives!</font></b></font> 
               
                 <INPUT TYPE=text name=q size=12 maxlength=255 value="">
 <INPUT type=submit name=sa VALUE="Google Search">
 <INPUT type=hidden name=cof 
VALUE="LW:216;L:http:/home/loonygames/loony.timedoctor.org/content/images/logo1.jpg;LH:55;AH:center;S:http://www.loonygames.com;AWFID:13a298c7abe84fd0;">
<input type=hidden name=domains value="loonygames.com"> 
<input type=hidden name=sitesearch value="loonygames.com">               
</div>
              </form>

            </td>
          </tr>
        </table>
      </td>
      <td width="406" height="936" align="LEFT" valign="TOP"> 
        <p align="LEFT"><font face="Arial, Helvetica, sans-serif" color="#0022A8"><b><a target="" href="../../corner/index.html"><font size="-1">Beaker's 
          Bent</font></a><font size="-1">:</font></b></font><font face="Arial, Helvetica, sans-serif" size="+3" color="#0022A8"><br>
          Building the Next Wave of 3D Games</font></p>
        <p align="RIGHT"><font color="#804000"><b><font face="Arial, Helvetica, sans-serif">By 
          Rich &quot;<a target="_self" href="mailto:rich@loonygames.com">Beaker</a>&quot; 
          Wyckoff</font></b></font></p>
        <p align="right">
<script language="JavaScript">

<!--
       function gotoSite(obj)
          {
          var s;
          s=obj.options[obj.selectedIndex].value
                         location.href=s;
          }
// -->

</script>
          <form>
  <div align="RIGHT">
    <select name="SiteSelector" size="1" language="JavaScript" onchange="gotoSite(this)">
<option value="http://www.loonygames.com/content/2.13/bent">Jump to an Archived Column!</option>
<option value="http://www.loonygames.com/content/2.13/bent/">Issue 2.13</option>
<option value="http://www.loonygames.com/content/2.7/bent/">Issue 2.7</option>
<option value="http://www.loonygames.com/content/2.5/bent/">Issue 2.5</option>
<option value="http://www.loonygames.com/content/2.3/bent/">Issue 2.3</option>
<option value="http://www.loonygames.com/content/2.1/bent/">Issue 2.1</option>
<option value="http://www.loonygames.com/content/1.41/bent/">Issue 1.41</option>
<option value="http://www.loonygames.com/content/1.39/bent/">Issue 1.39</option>
<option value="http://www.loonygames.com/content/1.38/bent/">Issue 1.38</option>
<option value="http://www.loonygames.com/content/1.36/bent/">Issue 1.36</option>
<option value="http://www.loonygames.com/content/1.34/bent/">Issue 1.34</option>
<option value="http://www.loonygames.com/content/1.30/bent/">Issue 1.30</option>
<option value="http://www.loonygames.com/content/1.28/bent/">Issue 1.28</option>
<option value="http://www.loonygames.com/content/1.26/bent/">Issue 1.26</option>
<option value="http://www.loonygames.com/content/1.24/bent/">Issue 1.24</option>
<option value="http://www.loonygames.com/content/1.22/bent/">Issue 1.22</option>
<option value="http://www.loonygames.com/content/1.20/bent/">Issue 1.20</option>
<option value="http://www.loonygames.com/content/1.18/bent/">Issue 1.18</option>
<option value="http://www.loonygames.com/content/1.16/bent/">Issue 1.16</option>
<option value="http://www.loonygames.com/content/1.14/bent/">Issue 1.14</option>
<option value="http://www.loonygames.com/content/1.12/bent/">Issue 1.12</option>
<option value="http://www.loonygames.com/content/1.10/bent/">Issue 1.10</option>
<option value="http://www.loonygames.com/content/1.8/bent/">Issue 1.8</option>
<option value="http://www.loonygames.com/content/1.6/bent/">Issue 1.6</option>
<option value="http://www.loonygames.com/content/1.4/bent/">Issue 1.4</option>
<option value="http://www.loonygames.com/content/1.2/bent/">Issue 1.2</option>

    </select>
  </div>
</form></p>
        <p align="right"></p>
        <p><font face="Arial, Helvetica, sans-serif"><i>Ability to manipulate 
          multi-part objects: </i>Another next-generation feature. <b>Unreal's</b> 
          Editor uses CSG, constructive solid geometry, to create its spaces - 
          you take a shape and carve it out of an existing solid mass, or add 
          it back in. This is very convenient for building interiors, but doesn't 
          work as well when building gigantic indoor/outdoor settings. Furthermore, 
          certain features of <b>Unreal </b>levels, especially moving brushes, 
          are always treated as separate objects and can't be conveniently associated 
          with some other brush (as far as I've been able to determine). In a 
          city level in the next-generation game for instance, designers will 
          almost certainly deal with each building as an entirely separate object, 
          creating its inside and outside, positioning the doors in doorways, 
          making them swing when pushed, open at the touch of a button, be locked 

          until a key is applied, etc. Once the building and all its special contents 
          are created and work, it becomes desirable to be able to move all those 
          parts together. In fact, once your building is sufficiently complicated, 
          it becomes impractical or impossible to ever move it from the position 
          it was constructed in if you can't treat it as a group. Furthermore, 
          as geometry and texture detail increases, it might become necessary 
          for major pieces of a level to be constructed in a separate file altogether, 
          handled by another designer or artist. This makes it all the more crucial 
          that the person assembling the level can load and move the building 
          as a single object. When a new version of the building is issued, the 
          old one in the level can be quickly selected and deleted, and the new 
          one brought in. I haven't seen an editor which can do this yet, but 
          it is desirable even today: I'm already basically stuck with the layout 
          of the <b>Unreal</b> level I've been working on, and at this point can't 
          make a large-scale change without essentially scrapping the whole file 
          and starting again. This situation will arise with many more things 
          than buildings, as well: imagine a box with a hinged lid, a train with 
          multiple, linked cars, or a creature which holds a gun that is an entirely 
          separate mesh. All of these are separate pieces that need to maintain 
          the same relative positions.</font>
        <p>&nbsp;</p>
        <p><font face="Arial, Helvetica, sans-serif"><b>Interface Features</b></font></p>
        <p><font face="Arial, Helvetica, sans-serif">Certainly many of the features 
          I've listed above implies certain interfaces, but they could be probably 
          be implemented in a variety of ways. I do believe there are a few specific 
          requirements for the interface of the next-generation editor, though:</font></p>
        <p><font face="Arial, Helvetica, sans-serif"><i>Modal view movement controls: 
          </i>To me, the most annoying thing about <b>UnrealEd</b> is how the 
          scrolling and zooming of the views is handled. You can far too easily 
          accidentally select a brush when all you wanted to do was zoom in or 
          out, or accidentally scroll the view when you were just trying to select 
          a brush. All other major drawing or drafting programs I've used, like 
          <b>3DStudio MAX</b> and <b>Photoshop</b>, require you to use a specific 
          tool which puts you in a different mode for the mouse-based view control. 
          When you are doing precise editing or have a large amount of objects 
          near each other as will be common in the next-generation game, it is 
          critical that the interface keep selection and view-adjusting as separate 
          as possible to avoid user confusion.</font></p>
        <p><font face="Arial, Helvetica, sans-serif"><i>View controls: </i><b>Unreal</b>, 
          and the next-generation editor, also desperately needs tools and/or 
          shortcut keys to zoom the current view to the currently selected object. 
          With a huge level, it is annoying and inaccurate to zoom in and out 
          by hand from the overview to something a small fraction of its size, 
          like a gun. A much better and quicker way to do this is to have buttons 
          and keystrokes to center the view on the extents of the selection and 
          the extents of the entire level, as <b>MAX</b> allows. Also, the "box 
          zoom" feature that most professional art tools and <b>MAX</b> have is 
          a useful additional feature, making it easier to zoom on a specific 
          object without having to scroll the view window all over the place to 
          try to center the object. It is worth noting that in the 3D View, however, 
          <b>Unreal</b> has a better interface than that of <b>3D Studio</b>.</font></p>
        <p><font face="Arial, Helvetica, sans-serif"><i>Hiding and freezing: </i><b>Unreal 
          </b>seems to only be able to hide the "active" brush, an item which 
          is rather specific to <b>Unreal </b>anyway. The ideal editor should, 
          like <b>MAX</b>, let the user hide anything and everything, and unhiding 
          and unfreezing should be achievable with the same sort of sortable, 
          filterable list mentioned earlier and described in the next entry. Freezing, 
          where the selected object is still displayed but becomes unselectable, 
          is also incredibly useful, allowing other objects to be lined up in 
          relation to the frozen object without the danger and confusion of accidentally 
          selecting it.</font></p>
        <p><font face="Arial, Helvetica, sans-serif"><i>Name Selection: </i>Every 
          object of every type should be named. <b>MAX</b> handles this by assigning 
          it a generic name for its object type with an incremented number at 
          the end to make each name unique, allowing the user to change the name 
          at creation or any other time. In <b>Unreal</b>, if you dig through 
          a brush's properties or look at the text at the bottom of the brush 
          creation dialogue, there seems to be some naming going on, but naming 
          alone isn't very useful without a name selection dialogue. It is convenient 
          in almost any kind of application to be able to look at and select from 
          a text list of every object in a file, especially if you have changed 
          the names to be meaningful. <b>MAX's</b> Name Selection dialogue is, 
          unfortunately, fairly primitive and limited. A good name selection dialogue 
          should have the same kind of typing accelerator that all file folders 
          on the Windows desktop have, where you can start typing any number of 
          letters in a name of a file and the first matching file will become 
          selected - but <b>MAX</b> only selects by the first letter of an object 
          name! The ideal name selection dialogue will handle this correctly and 
          also let you sort and filter objects by name, type, or any other criteria 
          that are meaningful. Good selection tools are critical to be able to 
          cope with the huge number of objects the next-generation game will have.</font></p>
        <p><font face="Arial, Helvetica, sans-serif"><i>Axis Control: </i>This 
          is an area where <b>MAX </b>(and presumably most other 3D modelling 
          programs) really shines, as it is critical to working in 3D with a 2D 
          input device like a mouse to be able to continually swap around or constrain 
          the axes the mouse is affecting. <b>Unreal</b> actually implements some 
          of this, but not nearly as well. I won't go into the details of it here, 
          but I find <b>MAX's</b> method preferable, because it shows via an icon 
          the currently selected axes and allows you to constrain movement to 
          a single axis easily, unlike <b>Unreal</b> which assigns axis control 
          to combinations of the mouse buttons in a hard-to-manage way, and makes 
          constraining to a single axis difficult in the 2D views (or impossible 
          - I'm still trying to figure out which).</font></p>
        <p><font face="Arial, Helvetica, sans-serif"><i>Vertex manipulation: </i>While 
          <b>Unreal</b> does allow manipulation of individual vertices, its interface 
          basically sucks, especially because of its axis control shortcomings. 
          <b>MAX</b> isn't quite perfect, not allowing zooming to the current 
          vertex selection (see above) for instance, but is easy to use. Perhaps 
          not all designers want to get their hands dirty on the individual vertices 
          of game objects, but until we are dealing with objects where polygon 
          count doesn't matter anymore, I find vertex manipulation to be the best 
          way to achieve the shapes I want from the kind of low-polygon models 
          games still rely on for their objects and world. However, depending 
          on how much object creation takes place in the game editor and how much 
          takes place in external editors like <b>MAX,</b> vertex manipulation 
          may not be a great priority for the editor.</font></p>
        <p><font face="Arial, Helvetica, sans-serif"><i>Texturing controls: </i>Again, 
          this may depend on the actual nature of the next-generation project. 
          In <b>Quake</b> or <b>Unreal</b>, where the world is essentially constructed 
          and textured by designers, the more controls, the better. If the next-generation 
          game uses a lot of meshes created and textured in modelling programs 
          by artists, the texturing controls may be less of an issue. Regardless, 
          the best texturing controls I can imagine in an editor would work on 
          a per-face basis and be modal, allowing the mouse to directly control 
          the panning, rotation and tiling amount of the selected faces, rather 
          than by clicking on buttons in a dialogue like <b>Unreal</b>, or by 
          manipulating the size and location of a gizmo like in <b>3DSMAX</b>. 
          Having buttons and type-ins for more precise texture control would still 
          be necessary, and possibly used more often, but the fluid control of 
          mouse-based texture adjustments will become helpful as designers are 
          able to use more small polygons and unique textures.</font></p>
        <p> </p>
        <p><font face="Arial, Helvetica, sans-serif"><b>In Conclusion, I Rant</b></font></p>
        <p><font face="Arial, Helvetica, sans-serif">Writing the complete spec 
          for the next-generation editor would take thirty pages and would be 
          the kind of task I'd rather undertake for an employer than give away 
          for free, and I've covered the important points. Now it's time for a 
          bit of evangelizing and ranting. Presently and maybe perpetually, most 
          of the people budgeting projects and controlling the industry's future 
          want to make their next game without spending any time (i.e. money) 
          writing an editor at all. This is not an exaggeration - I have personally 
          heard this sentiment expressed by many different managers, high-ranked 
          and low-ranked. Many of these, of course, are the same people who keep 
          slavering for the <i>Star Trek</i> license despite the number of cancelled 
          or extremely delayed and unfun (and often fairly poorly-selling) titles 
          which the license keeps generating. For them, let me say it simply: 
          Good game needs good editor. No editor = bad editor. Bad editor = bad 
          game.</font></p>
        <p><font face="Arial, Helvetica, sans-serif">Here's another fact which 
          doesn't seem to be understood by management (programmers certainly understand 
          it, until they become lead programmers, at which point they are often 
          required to trade in their brains): custom engines need custom editors. 
          Even if you buy an editor for a similar engine, you will need to do 
          work, a significant amount of work, to make the editor be able to output 
          the data that your game can use and take advantage of all the custom 
          tweaks you put in. Presumably, if you were writing an engine which is 
          similar to or actually is <b>Quake</b> you might still find success 
          in hiring the author of a shareware editor, but while I've heard of 
          many projects buying their 3D engine from other companies and writing 
          or modifying an editor, I've never heard of anyone writing their own 
          engine from scratch but buying an editor, at least not in the FPS world 
          (anecdotal evidence would be welcome, though). I have seen projects 
          in other genres purchase incredibly expensive "commercial game editing 
          systems" and end up abandoning them after half a year because adapting 
          the commercial software to the needs of the custom engine proved more 
          difficult than just writing a specific tool.</font></p>
        <p><font face="Arial, Helvetica, sans-serif">Even when the need for an 
          editor is understood, the fundamentally, well, stupid desire to make 
          projects twice as good (where good = sold a lot) in half the time with 
          half the team continues to drive the management search for a cheap way 
          out of making an editor. This is where ideas like using <b>3D Studio</b> 
          come from. This is another temptation to be avoided, for one reason 
          more than any other: <b>MAX</b>, even in its latest version, is completely 
          unsuited to working with more than about five thousand objects at a 
          time. (I speak from long, punishing experience). Imagine editing an 
          <b>Unreal</b> level where you have to wait thirty seconds or a minute 
          after clicking on one of your brushes for it to become selected, even 
          on a PII-300, and if you impatiently or accidentally click again while 
          waiting for the selection to be made, your second mouse click will be 
          buffered and cost you another huge wait before you find out you just 
          deselected the object again. This seems like a fundamental flaw of the 
          object-handling system of <b>MAX</b> and even if enough custom code 
          could be written to turn this modeling and rendering package into a 
          useful game editor, it is presently entirely crippled in that respect.</font></p>
        <p><font face="Arial, Helvetica, sans-serif">There are numerous other 
          reasons not to build your editor on top of a commercial package like 
          <b>MAX</b>. Most importantly, if you do this, you will never, ever have 
          fan-created levels, because the number of game players who also happen 
          to have the correct version of a four thousand dollar commercial modeling 
          program sitting around is close to zero. The number who <b>own</b> the 
          correct version is even less. The other option, releasing enough info 
          for fans to create their own shareware level editors, is becoming less 
          feasible as the data structures of modern games grow more complex, and 
          it will probably become an impossible task to write an editor for the 
          next-generation 3D game "in your spare time." Even if you haughtily 
          decide fan-created levels are unimportant, you may even be reducing 
          your potential licensing deals. If a small developer looking to reduce 
          development complications by licensing your engine has already invested 
          in ten copies of <b>Lightwave</b> or <b>SoftImage</b>, or doesn't even 
          use PCs for their modelling, they may not want to be required to buy 
          five or ten more copies of <b>MAX</b> just to use your editor, and you 
          may find yourself needing to devote your own internal programming resources 
          to porting all of your <b>MAX</b> plug-ins to different platforms or 
          to new releases of <b>MAX</b> when those people could be working on 
          your next game - you remember, the one where your GANTT chart was supposed 
          to show the benefits of having an in-house editor from your last game?</font></p>
        <p><font face="Arial, Helvetica, sans-serif">In short, the most sensible 
          move by far for any company writing their own 3D engine is to start 
          writing a completely internal editor for that engine. Leave the commercial 
          packages to model-building, and write a simple conversion tool to get 
          their meshes into your editor. <b>Unreal</b> is sitting on top of the 
          3D world right now for going in this direction, and the number of <b>Quake 
          II</b> licensees who dumped the license in favor of <b>Unreal</b> is 
          directly attributable to <b>Unreal</b> having the best editor of its 
          generation, an editor which has no extra requirements and whose every 
          feature is designed to take advantage of the engine it comes with. Sadly, 
          I do believe there are less managers far-sighted enough to see this 
          obvious fact and follow the <b>Unreal</b> model on their next-generation 
          project than there are game players who own <b>3DStudio MAX</b>.</font></p>
        <p>&nbsp; 
        <p align="RIGHT"><i><font size="-1" face="Arial, Helvetica, sans-serif">- 
          Rich "Beaker" Wyckoff is a game designer on the game <b>Trespasser</b> 
          for <a href="http://www.dreamworksgames.com">DreamWorks Interactive</a>.</font></i></p>
        <p align="LEFT">&nbsp;</p>
        </td>
    </tr>
  </table>
  </div>
<map name="map">
  <area shape="rect" coords="32,38,226,76" href="../../../index.html" target="_self">
  <area shape="rect" coords="12,79,125,94" href="http://www.bluesnews.com" target="_self">
 
</map>
<table border="0" width="600" align="CENTER">
  <tr> 
    <td><i><font face="Arial, Helvetica, sans-serif" size="-2"><b>Credits:</b> 
      Beaker's Bent logo illustrated by and is &copy; 1998 Dan Zalkus. Beaker's 
      Bent is &copy; 1998 Rich Wyckoff. All other content is &copy; 1998 <a target="_self" href="http://www.loonyboi.com">loonyboi 
      productions</a>. Unauthorized reproduction is strictly prohibited, so don't 
      do it. We have ways of making you talk.</font></i></td>
  </tr>
</table>
</HTML>
