Shuten Douji #1

Work In Progress / 18 October 2018

I know...I know, I should've completed the M44 by now but eh, I took a break from the hard-surface doing some, soft-surface..

So anyway, like always, ZBrush Summit just held past few weeks ago and again it kicked off that character artist engine inside of me, so here ya go, Oni-chan, SHUTEN DOUJI!

Been working on this since then on and off, and probably some already saw early screenshot from my FB feed, but just to make it official (whatever that "official" word means...), decided to post an Artstation blog about it!

Still lots of things to do, anatomy refinement/ fabric details/ etc,  hopefully will continue on this till it's worth to put up on the portfolio gallery!

P.S: Those fruits are from the IMM brush generously shared by ZBC's member Joe Black.

EDIT: Discussion thread: Polycount / ZBrush Central

TurboSmooth ❤ Chamfer

General / 11 February 2018


So, few days ago I've shared a little snippet of MAXScript I wrote to help me automated some stuff and few people actually found it useful so I guess I'll share another script that I wrote that help me creating highpoly faster!

After modeling hard surface stuff for a number of years, I've pick up things from here and there and also through trial and error and I've come up with my preference workflow. It's not a new or breakthrough method or anything like that, it's just a collection of actions combined into a neat UI with some utilities to help along the way, again this was created tailor made for my preference workflow. If this does help anyone else, I'll be really grateful for that :)

Basically it'll apply a Chamfer Modifier and a TurboSmooth Modifier to your mesh. Nothing new. Sure you can add them manually but clicking the setting and property numbers can be time consuming, it'll took few seconds if you do this once during a modeling session, but could add up to hours if you need to do it hundreds of times a session. My usual workflow involving iteration process between mesh modeling and preview it with the Chamfer + TurboSmooth Modifier added to the stack, so it will speedup my workflow quite a bit!

UI screenshot:

MESH CHECK functions:

  • Vert Pole: To check and select your verts that's on a hard edges and connected to more then 4 edges.
  • Edge Hard:  Toggle the Display Hard Edges just to make sure you get the hard edges on the right places!
  • Face SG: To check and select all faces that doesn't have Smoothing Group assigned to them.

HIGH-POLY MESH functions:

  • Secondary Chamfer: Add a secondary micro Chamfer on top of your primary Chamfer.
  • nGon Solver:  Run the nGon Solver script by Miklós Gábor's toolset, RapidTools*

Here's a gif I've recorded to show how it works:

The main point to remember is you need to properly set your Smoothing Group as to where you want your hard edges to be chamfered (the Edge Hard and Face SG utility comes in handy for this). And also don't afraid of nGons! This workflow most of the time prefer an nGon rather then a vert pole that fall on hard edges, Max just don't know what to do with those vert pole, but then again it's all based on case by case basis, some other times the vert pole that selected by the MESH CHECK functions does, in fact, works correctly compared to an nGon solution. I can't really show you what works what not on what situation, use your experience to make the best judgement!

Another thing is that the setting for each mesh (Chamfer amount, TurboSmooth iteration, etc) are saved to that particular mesh via the custom attributes, meaning after you LMB Reset (NOT RMB Reset, that will clear up everything) the custom attributes will remember and auto set the same amount back for that particular mesh, as seen on the last part of the gif animation, so you don't need to remember what setting best for which mesh.

TAKE NOTE: When using Turbo Chamfer, before you click Apply, Max will lock your selection so that weird thing's won't happen. You can manually unlock the selection if you want to.

Enough words and explanation!

You can grab the script >>> HERE <<<

Please leave a comment and let me know what you think, things to add, change, optimize, questions or whenever you found any crash or error. I've been using it for quite a long time and haven't found any issues with it, BUT if you lose some works because of the script, well I won't take any responsibility for it :P

Save your work often people, it's 3ds Max we're talking about here!

* RapidTools not required to run TurboChamfer, it's an additional feature that can be helpful sometimes.

** 3ds Max 2017+

Feel free to share the script with your friends, but please link back to the Gumroad page to download. Thanks!

Hope you'll find it useful!

Freshly Baked M44

Work In Progress / 04 February 2018

Status update from my previous blog entry, the M44 is now fully baked! But just that, no texture yet so far, only normal and AO. Here's the progress and also shows the first time a fully exploded view of the rifle.

As mentioned before, it's not your typical lowpoly current-gen model, the tris count wasn't *that* optimized for a game model, it's at 78.448 tris including 5 bullets, with 2 sheets of a 4k texture. My focus more to quality instead of in-game performance.

While doing this, though, I found it's abit time consuming to set up a parent-child connection from one object to another and match them high-to-low after. The connection was meant for easier posing the rifle later on and also to make sure my high and low both on the exact same location for bake process. And because of that, I wrote a simple MAXscript to help me setup the scene (match parent-child connection and also position between high and low mesh). This might not be any useful for everyone but if anyone want it, here it is:

    allObj = $*
    pairs = #()
    -- collect objs
    for objLow in allObj where (matchPattern pattern:"*_low") do
        objHigh = getNodeByName (substituteString ( "_low" "_high")\
                  exact:true ignoreCase:false all:false
        objHighParent = objHigh.parent
        objLowParent =
                getNodeByName (substituteString ( "_high" "_low")\
                exact:true ignoreCase:false all:false
        pair = #(objHigh, objLow, objLowParent)
        append pairs pair
    for id = 1 to pairs.count do
        pairs[id][2].transform = pairs[id][1].transform -- match transform
        pairs[id][2].parent = pairs[id][3] -- match hierarchy

Pretty simple, but wanted to make this blog post to look more smart then it actually is, so there you go. For anyone trying out the MAXscript just make sure you have set your naming conventions properly as how Painter would see it, nameOfAsset_high will match with nameOfAsset_low, highpoly mesh will be the source for location and hierarchy match-up for your lowpoly mesh. That's it!

The next update for this rifle here probably will be the final one with presentation shots and all on the Portfolio section. Thinking to create a thread over at Polycount to show my smaller progress throughout the texturing phase. Will post the link here if I decided to go with that.

EDIT // Here's the link to the >>> Polycount discussion <<< hope to see you there!

Till next time!

Anatomy Project: M44

Work In Progress / 01 January 2018


To kick things out the first time in 2018 I'd like to share a project I've been working on for quite a while on and off in my free time, only highpoly so far, not worth to put on the Portfolio gallery yet so might as well use this new blog feature to give some kind of preview for it!

Lowpoly in progress..well not so much of a lowpoly current-gen game res, cus that's not the target goal here, it'll be similar with my 1911's anatomy project too where there'll be super generous tris count to emphasis curved surface. 'Optimized highpoly' mesh is more suitable then call it lowpoly mesh, really..

So hope you guys like it and stay tuned for future update, ha!