StarWars Dark Forces Inspired Game Art

polycounter lvl 6
Offline / Send Message
HowardDay polycounter lvl 6
StarWars Dark Forces Inspired Game Art

Latest Screenshot:

Hello, everyone! So, I've been meaning to start this thread for a while. I've always been a huge fan of Dark Forces - especially the first one. The game obviously took place in the Star Wars universe, but had a style all its own.
A while back I got some free time, and got sort of sucked into making some game art in that same style. The end goal is to make a single-level mobile 3rd person shooter. This was also a good exercise in creating textures my favorite way - using 3DS Max.
I have an orthographic camera aimed down at a bunch of geometry. If you fiddle with the AA settings in MAX you can get some very near-pixelart quality textures.
Here's an example:
All the textures I've made for this are done that same way.
For those interested in more specifics, here's the source for an earlier version of that texture.

I've also made two ships - a TIE Fighter:

And a Custom Corellian Transport, the Verpine Bastard:

I started off using Unity 4, and started with the Beast Lightmapper. This went surprisingly well - the Lightmaps took like 2-3 minutes to bake, and looked awesome. Here are some of the earliest tests...

..And then Unity 5 came out. I had to give it a shot, and moved over to the Enlighten lighting system. The lightmap generation time (using settings from Unity 4) jumped to 2+ hours to bake.

Eventually I adapted more to the new settings required for quick lightmaps in Unity 5, and got the bake times down to 15-20 minutes. Which are pretty reasonable, given how much the scene has grown.

Here's the latest!

And for those wondering how I did the reflections, here:

And here's what it look like running on a mobile device:

Anyhow, I hope you like what you see, and any feedback or crits would be extremely welcome.


  • Brian "Panda" Choi
    Offline / Send Message
    Brian "Panda" Choi insane polycounter
    Besides my interest in how the textures hold under more dramatic lights, given the technical limitations, I like it. A lot.
  • HowardDay
    Offline / Send Message
    HowardDay polycounter lvl 6
    Besides my interest in how the textures hold under more dramatic lights, given the technical limitations, I like it. A lot.
    Good point. As long as I light the levels sort of generally from above the diffuse-only textures work great.
    That's why when I move to having more...ominous... underlit areas of the level, I'll flip those textures upside down. :D
    That's just with a diffuse map, though - if I really wanted to go all out, it's super simple to make a pixel-perfect normal map from the same MAX file...


    which means that all lighting would be possible. I've even got the option of generating a depth map, and getting some parallax goin' on. I'm not going to, of course - it's not the style, but the texture creation system supports all of that.
  • Lt_Commander
    Offline / Send Message
    Lt_Commander polycounter lvl 5
    The modeled reflections blow my mind!

    Great work so far! I love the custom transport, and the whole thing makes me nostalgic for the golden era of Star Wars games.
  • ae.
    Offline / Send Message
    ae. polycounter lvl 9
    this is awesome!
  • JasonLavoie
    Offline / Send Message
    JasonLavoie polycounter lvl 12
    Faaaaaaaaaaaaaaaaaaantastic, what a fun project, can't wait to see more!
  • .nL
    Offline / Send Message
    .nL polycounter lvl 3
    Oh, nice. I'd say a little more geometry on the starship's cockpit, or a bit more work on the glass. But other than that, bookmarked.
  • HowardDay
    Offline / Send Message
    HowardDay polycounter lvl 6
    Thanks, guys. If you want to give it a spin yourself, here's a link to a fresh web player version!
    WASD for movement, Click and drag on the right-hand sphere to look around. Controls are very mobile-centric now - I've already added, but not hooked up options to make it more intuitive in the web player.

    .nL: Completely and totally agree. I haven't even done anything to the cockpit glass yet- it's a single 32x32 black texture - I'm trying to decide if I do a full 3d cockpit or go with fancy textured glass. Honestly, I'm leaning cockpit.
    Thanks for looking!
  • Sage
    Offline / Send Message
    Sage polycounter lvl 15
    looks amazing. Thanks for sharing.
  • wenglish
    Offline / Send Message
    wenglish polycounter lvl 6
    so cool!

    i know you said it's a 3rd person mobile game... but 1st person on desktop would be so kickass! (and probably better than battlefront 3)
  • GrungyStudios
    Offline / Send Message
    GrungyStudios polycounter lvl 3
    ahh this looks great. Those textures are satisfying to look at for some reason
  • simou
    Offline / Send Message
    simou polycounter lvl 4
    This is amazing!!
  • R3D
    Offline / Send Message
    R3D greentooth
    aha those reflections
  • Paul Pepera
    Offline / Send Message
    Paul Pepera polycounter lvl 9
    This is so good! I started off modding games like Dark Forces and Jedi Knight - this brings back so many memories.
  • JavaFern
    Offline / Send Message
    JavaFern polycounter lvl 9
    oh my, this is looking great!
  • skullsplitter
    Offline / Send Message
    skullsplitter polycounter lvl 15
    I'd love to play a game like this again...
  • Imasho
    I love this, thanks for the detailed shots and explanation. Love the reflections reminds me of working on the the DS a few years back and "cheats" like that to fake reflections in mirrors.
  • Holland
    Offline / Send Message
    Holland polycounter lvl 8
    This is actually amazing! Loved Dark Forces when I was a kid.
  • Sanislov
    Offline / Send Message
    Sanislov polycounter lvl 5
    Looks really cool:) Is there any reason for using uniqe texture every part of the TIE fighter? Couse i see some mirrored part what near the same. Expesially the big solar panels.
  • urgaffel
    Offline / Send Message
    urgaffel polycounter lvl 12
    This thread man...


    It's looking really good, I love your Corellian ship! Any chance of seeing it in motion?
  • Shrike
    Offline / Send Message
    Shrike greentooth
    dont forget giving the ship the same light color as the environment, the lights have a cold hue and the ship feels totally out of place with its warm lighting

    With all the current battlefront hype, i imagine you could send the stuff to some kinda news site after a bit of polish and have a decent chance of coverage
  • MephistonX
    Offline / Send Message
    MephistonX polycounter lvl 9
    I really like the look of the textures, it really shows off the greebly star wars look, looking forward to seeing more of this.

    Also are you going to do a similar thing with the ship to achieve reflections underneath it?
  • almighty_gir
    Offline / Send Message
    almighty_gir sublime tool
    oh man this is the fucking shit right here!
  • -Memex-
    This is amazing! Great work mate!
    I can only speak in superlatives after I saw your progress. This reminds me of all those times I enjoyed Dark Forces back in the 90' .
    Thank you for bringing this back to life. I can't wait to see more.
  • Snefer
    Offline / Send Message
    Snefer polycounter lvl 11
  • HowardDay
    Offline / Send Message
    HowardDay polycounter lvl 6
    Wow, that's an awesome response guys, thank you!

    Lawless Flogic: Maybe I'll add that option - if it doesn't require a butt-ton of new art to make it equally awesome.

    Paul Pepera: Thanks! I did the same, actually - that's probably why this sticks in my mind so strongly.

    skullsplitter: Have you given the webplayer build a shot?

    Sanislov: Well, there's no technical reason, no. But since at the texel resolution I've chosen (3M = 256 pixels) a 6.4M long TIE Fighter would only fit on a 1024 one way - and since the wing panels are the primary concern, given how massive they are, I had a bit of free space left over. and since I like to put procedural grime in the corners of geo, it might as well be unique grime, if I've got the space. Since I did, I'm prettu sure everything ended up uniquely unwrapped, except for the sides of the radial fins coming out of the wing hubs. (Lower Min-Right on the uv layout) That's just because there's 48 of them, if they were all unique.

    urgaffel: Absolutely, I'll record a video here in a bit and post it up.

    Shrike: So that's actually intentional - The scene is all lit with GI, so everything has the same lighting - and it's all driving, with the exception of two spotlights in the hangar for awesomeness, by the emissive textures on the Geo itself. The reason that the Verpine Bastard stands out like she does is because I'm following in the footsteps of most of the art direction i've seen on Star Wars - Imperial = hard edges, clean, with a slightly blue-green tone, and Rebel - rounded edges, subtle curves, messy, with a slightly red-orange tone. Compare the texture for the VB to the imperial textures above:
    You can see why it'd look slightly out of place - it's supposed to, it's your ship not an imperial craft.
    And yeah, I'm sure I could share this with kotaku and they'd be interested - but I'd really rather not until its a lot more polished. there's not even any UI graphics of the barest gameplay yet for crying out loud. :D

    MephistonX: I absolutely am! I have to add the landing gear and the lowered boarding ramp - those will definitely have reflections and I'm planning on putting a rough horizonal blurry outline in there too - since the ship is mostly flat, this should be enough...

    I'll post back in a bit with details on how I did the auto-tiling procedural crater textures for the asteroid bits - mostly because I think it's cool.
    Thanks again!
  • HowardDay
    Offline / Send Message
    HowardDay polycounter lvl 6
    [ame] << There's a spin around of the Verpine Bastard in the editor - And yes - I did make a custom lens flare script - would anyone be interested in that?
  • Christian Nordgren
    Offline / Send Message
    Christian Nordgren polycounter lvl 7
    Wow, when you moving the ship like that makes it look even better :poly142: good stuff mate

    I haven't played around with lens flares in unity but I would gladly be curious your script! :)
  • Paul Pepera
    Offline / Send Message
    Paul Pepera polycounter lvl 9
    Love that ship!
  • Dark Acre Jack
    Really nice looking work. I wonder how it'd look in Unreal Engine 4? :thumbup:
  • theduderdude
    jesus christ, are you for real...fuck dude.Direct a video game. Hire some low self esteem artists who are young. Find a marketer who hates his day job, take a risk.
  • gsokol
    Offline / Send Message
    gsokol Polycount Sponsor
    This is insanely cool. Really enjoyed running around in the web build.

    So your technique sounds really interesting, just grabbing from an ortho camera in max? So what are you doing for the scorching/wear type things that are on the surface. Do you paint that stuff in? Or is that procedural materials in Max?

    I really like the crunchy low/res-ish feel, combined with all that detail. Really neat.

    The old school reflections under the floor trick is awesome! Very convincing. Also really liking the sprite storm troopers, although its a little jarring when you pass by them, as they seem to always draw in front of the player.

    Seriously though, this is rad.
  • HowardDay
    Offline / Send Message
    HowardDay polycounter lvl 6
    Christian Nordgren: Wow, thanks sir! I've loved your pixel art/low res and poly work, it's been a huge inspiration to me. Here's the unity package with the script - basically it consists of two scripts, CameraLocationTracker, (that caches the camera location both at runtime and in the editor *and a few other useful things) and FlareControl, which requires a material be added. I've included a basic flare material (same as the one I used in the build) and a similar texture.
    Here's the interface: 

    So you can see - you've got the option to have anisotropic falloffs on the facing direction of the flare source. In this case, that's the +z axis. Then you've got the distance falloffs, min and max. Then you've got the two colors the script blends between for on and off values - Flare Color is full on, while Fade Color is full off. Flare and Fade Size work the same way. Check Visibility will cast a ray in the scene to see if the flare source is visible to your camera. I should probably add a layer mask to this.
    The Optimize switch will make the script only update on a random spread of X frames +/- 25%. This helps stagger the cost of using a raycast and rebuilt verticies on the flare meshes. The Check Frequency controls the base number of frames between re-calculations.
    finally, Occlude Speed adjusts how fast the flare fades out when visibility is lost.
    Hope it's helpful!

    Paul: Thank you, sir! I can't help but day dream about mimicing your tugs in this style. :P

    Dark Acre Jack: Thanks. Likely, it'd look absolutely identical - since I'm not using normal maps or actual screen space reflections, I really doubt there'd be an ounce of discernable difference.

    theduderdude: Yeah, I'm for real - and this is just what I do for fun. I don't want to make a habit of commercializing my relaxation and problem solving enjoyment time, since I work plenty as it is. This also, isn't my first free side project that's a labor of love.

    Also, I've been one of those starry-eyed low self esteem artists, and I'd never ever want to take advantage of anyone like how I've been. The thought is enough to make my hackles rise. If I ever do lose my job and find myself out on the street, sure, I'll put something together.
    That something sure as fuck will be fair and equitable to all involved. This industry is far too small to ever expect acting like a selfish douchebag won't catch up to you.

    gsokol: Thank you sir! the technique is exactly as you describe - the scorch marks are just streched geospheres with a falloff alpha and some also stretched noise bump. Things like wear and corner grime are a bit more complex. I use a plugin called F-Edge to bake a map that calls out all the hard edges on the low poly model. I then screen-project that back onto the orthograpic camera - sort of reverse placement of the uv coordinates. The corner grime is an Mental Ray AO map with the angle blown out to 3 or 4, and with a goofy noise + clamp on top. Ends up looking pretty darn convincing. everything else is just procedural materials, as you said.
    I also second what you said about the storm troopers up close - I just added a fix that aligns them to the cameras plane, and not the cameras location. Pretty subtle difference, but it definitely feels better.

    Okay, I promised to share how I was doing automatic seamless procedural texture baking in MAX. Would it surprise you to know that it's a donut?
    That's right! a donut is the only shape that has UV coordinates tiling in all directions.

    The only tricky part is taking into account that the donut has squished faces on the inner portion. To get around this, any procedural texture is duplicated, and scaled down to 1/4th the size. Then we can use a vertically projected circular gradient to blend them together only on the inner faces:

    The final portion of this is to adjust the uvs of the donut to keep the baked texture from squishing. after a bit of fiddling, the best solution I've fount is this:

    alteration to the default torus generated UVs.
    Apply your procedural texture, and in no time, you can have something that looks an awful lot like this:

    Pretty cool, huh? My next thing is going to be some low-poly procedural asteroids for outside the landing bay. Sort of going to spruce up the local neighborhood.

    Enjoy, and thanks for taking a look!
  • Ged
    Offline / Send Message
    Ged interpolator
    great work, thanks for the lens flare script and info about baking etc! much appreciated
  • Eric Chadwick
    Wow, thanks for sharing the flare script! That is really cool. You should put this on the Asset Store, get a little money for it, support your off-hours work or at least your hosting costs.

    Also thanks for explaining the procedural bake process. I remember playing around with the torus idea but hating the distortion. Love your solution. The blending though is a bit soft and muddy, I wonder if a chunky mask would improve it?

    The web demo is fun to walk around in. Great to see how well the reflections hold up. The transparency mask on the floor makes it look like Roughness in action.

    What's going on with your movement script? Some interesting organic motion in there.
  • rebb
    Offline / Send Message
    rebb polycounter lvl 12
  • Minos
    Offline / Send Message
    Minos polycounter lvl 12
  • Thane-
    Offline / Send Message
    Thane- polycounter lvl 3
    I am in love with the texturing job on the ships. Like visual history. Really brings it to life.
  • Razorb
    Offline / Send Message
    Razorb polycounter lvl 10
    I fucking adore this <3!!!
  • Saman
    Offline / Send Message
    Saman polycounter lvl 9
    This is indeed very impressive!
  • snow
    Offline / Send Message
    snow polycounter lvl 8
    Love it. Can't wait to see more.
  • Jeff Parrott
    Offline / Send Message
    Jeff Parrott polycounter lvl 15
    This is really nice. Keep going!
  • Swarm22
    Offline / Send Message
    Swarm22 polycounter lvl 8
    For the ships, did you model and unwrap them, and then use the UV's as a template for your texture creation in Max? Like a blueprint for where to place your geometry to bake?
  • ThoJah
    Nice job ! Keep going !! :)
  • HowardDay
    Offline / Send Message
    HowardDay polycounter lvl 6
    Ged: No problem, and thank you!

    Eric Chadwick: Thanks - I think I'm going to keep it free for now. it;'s not nearly complex enough to warrant people paying for it. Its as imple utility script, and it's not even that awesome.
    And I bet a chunky mask would improve it - it wouldn't be much work to add one, either.
    The transparency mimicing roughness was one of the big surprises of this to me. I really wasnt expecting it to look that good.
    The movement script has a noise generator that is blended with the cameras look location, on top of player input. Every random step of frames (3-10) the script chooses another Random.InUnitSphere Vector3 that is then smoothdamped between. it's a nice, smooth, scriptable noise that can increase while the player runs or gets shot. I need to add a sine motion in there when the character walks, though - otherwise, it just won't look right.

    Rebb, Minos, Thane-,Razorb, Saman, snow, Jeff Parrott: Thanks, I'm realy stoked you like it!

    Swarm22: Correct! That's exactly how this was done. It makes the texturing process very relaxing - especially since everything in the scene is mapped to exactly the same texel resolution 256px = 3m, or the height of a hallway. That lets be reuse greebles and items all over the place, and have them look like they intentionally belong.

    Hi! So, as an update, I've added a bunch of asteroids, and added markings to the floor of the hangar.

    So, I also thought I'd share my method for making Procedural Asteroids. I use a combination of a subdivided box with a spherify modifier, custom UVs, and then that base is used twice, once with just a displace modifier, and once with a turbosmooth+displace. These are both then parented to a Linked XForm modifier, that's used to move them about in the scene to change the displacement. Here's an example:
    You can see that I'm just creating Snapshots of the two asteroids as I go, when I see somehting I like. I then can use the low poly (with it's already made custom UVs) to bake the lighting, and materials if you desire. I put together the 12 or so asteroids in the scene in about 10 minutes, including bake time.
    Here's the Max File. :D

    And the build has been updated as well:
  • samwoodart
    Offline / Send Message
    samwoodart vertex
    This is my favorite thread EVER. I love how you have approached everything. So inspiring.
  • locater16
    Offline / Send Message
    locater16 polycounter lvl 8
    This is fuckin aweeeeesome!

    Great, great job. I'd kickstart this in half a second if it were an actual game. That being said there's probably a lot of nostolgia mixed in with any accurate praise O.o

    Still, very good job nailing both the aesthetic of original trilogy Star Wars and Dark Forces/Mid nineties games.
  • HowardDay
    Offline / Send Message
    HowardDay polycounter lvl 6
    samwoodart: Thanks!

    locater16: Thank you! I agree that's its hard to separate nostalgia from "good" sometimes, but hopefully as this project goes on that becomes easier and easier. :)

    So, I started adding in HUD UI. Hopefully it matches the style of the original game...

    And the original game reference...

  • Mask_Salesman
    Offline / Send Message
    Mask_Salesman polycounter lvl 9
    OMG I love this so fucking much!! This is beautiful work dude! :) DF ftw!
  • -Memex-
    Great progress!
    Regarding the HUD I'm not quite sure . My opinion is you kind of over did it with the leather. It drags my attention from the scene behind + covers a bit too large portion of the screen space. The controllers visually don't align and since your character is already covering up the left side of the happening in front of the camera covering the right side by a big HUD seems like a bad design option. Notice how decent the HUD in the original gameplay is so you have a clear view in front of you ( regardless some gun designs that take away the screen space later in the game).
    So my suggestion is to visually align the controllers to a line and rearrange the icons around them while getting rid of excess leather parts.
    One more reason to rearrange the icons above the right controller is that you would cover them with your finger for most of the time not knowing what's going on there ( maybe activating something by mistake).
    I still admire the work you have already done on this project. Can't wait to see more of it.
  • skyline5gtr
    Offline / Send Message
    skyline5gtr polycounter lvl 5
    So much awesome but the Hud takes up too much real-estate.
Sign In or Register to comment.