Elliott Wang shared the workflow behind the Ebon Fang project, explained how the wings were created, and talked about texturing using the PBR approach.
Hello! My name is Elliott Wang and I am a Character Artist who recently graduated from Vertex School's Game Arts Program. My journey into 3D art began a year ago at the start of Vertex School – I had been completely new to the field before then. However, as a huge consumer of video games my entire life, I’d often entertained the thought of contributing to the games that I enjoy so much. Learning all the tools of the trade was challenging, but practicing art as a hobby prior to Vertex made things a little more manageable.
Before Ebon Fang, I created two greatswords and a knight of the Ebon Fang (please forgive the lack of creativity here). I planned at the start to have a unified body of work, and thankfully Ryan Kingslien let that plan come to fruition.
The first step was committing to a transition from 2D to 3D for more work opportunities. I looked up a bunch of bootcamps, and Vertex stood out to me with its affordability and choice of mentors. I went through a short interview process, and the rest is history. As an online school, Vertex is flexible for people working part-time or full-time simultaneously and for people all across the world.
Term 1 was an introduction to 3D, which follows a typical university class structure. There’s a syllabus and a set of assignments that hone in on the fundamentals. The second and third terms are where things get really fun: we split into character or environment paths and began our mentorship with artists working in the industry. The cohort that I belonged to was small, so I felt connected to all my peers and mentors in the program. Omar Aweidah and Anthony Musich are phenomenal teachers who were with me every step of the way from concept to render with my last two projects. The insight that these artists offer into the industry along with their assistance with each student’s individual problems is critically valuable. For someone with no connections trying to get started, there is no better opportunity.
Everyone knows that there is an abundance of amazing free learning resources online, but without guidance from Vertex, I wouldn’t know what I needed to know. I wouldn’t be confident that what I was doing was ‘right’ or an industry standard.
The Ebon Fang Project
The Diablo and Final Fantasy franchises are a great source of inspiration for me. My work is mainly fantasy themed, and as my mentors jokingly said, "A dragon is an inevitable subject that every artist will work on in this genre." Naturally, I had to get this dragon out of the way. I wanted to incorporate more eastern elements like fur, a mammalian nose, feathered wings, and a serpentine body. Hraesvelgr from Final Fantasy XIV is my favorite depiction of a dragon in any media, and I wanted to try to make something similar. My research also led me to reference lions and raccoons for anatomy and various birds and reptiles for the wings, mouth, and scales.
All of my projects at Vertex were original concepts, and I felt more comfortable starting out in 2D. In this case, I did a quick sketch and moved on as I wanted to make many adjustments and design decisions in ZBrush. As you can see, the sculpt ended up being quite a bit different, with the only remaining detail being the line of action. It’s rare liberty to play both the role of concept artist and character artist, so I took the opportunity to enjoy it.
I started off with the dog base mesh native to ZBrush. I adjusted the proportions and separated the primary forms into major groups such as horns, head, arms, etc. This would make sculpting more manageable since the high poly would eventually reach around 60 million polys. Working with many subtools is also generally simpler and more flexible than working with less. Custom brushes were used for the sculpted hair and feathers, but otherwise, the scales were all made using brushes native to ZBrush. We arrive at the end result through multiple layers of detailing across the whole model. Some scales got actual geometry in the low poly to match the high poly silhouette, but most were baked into the normal map.
I knew that the wings would be the most annoying part to work on. Areas, in particular, that would give me trouble without adequate planning were the wing parts. Square Enix's artist(s) modeled their wings on Hraesvelgr by splitting them into multiple thin slivers rather than thick blocks. The pivot point of these parts needs to be thin to prevent undesirable clipping when the wing folds. I took a similar approach, though my blocks are thicker to give the wing a full look in any pose.
Ideally, I think it would animate and look best, and even be easiest to model, if each feather were a separate mesh, but it’s all up to your budget. Also, I keep calling my wings feathered but they’re more like hardened hair. The tertiary details don’t match actual feathers, the secondary form of the wings is just in the shape of feathers.
I sculpted the wings in their maximum spread pose, forelimbs in A pose, and mouth open. Layers are an excellent tool to work non-destructively, and I also used them to preview and work the model in different positions. Crocodiles have divots in their jaws for larger teeth to slide into when closed, and a major divot can be seen in the lower jaw of my dragon for the upper fang. There is also an indent in the roof of the mouth for the lower teeth to move into, while the upper teeth slide into the space between the gums and lips. I think it’s important for details to appear intentional, even if you don’t thoughtfully plan for them. I apply this philosophy across the entire model.
I actually enjoy retopology to an extent. I mainly use Quad Draw in Maya and incorporate strategies that are more efficient than drawing one face at a time. I establish face loops first, then cover large areas in between and add edges to them where appropriate. It’s a welcome phase change where things become predictable and you just have to put in the time. It’s rewarding figuring out how to retopologize cleanly for deformations and for pride. To prevent Maya from stalling, I Quad Draw the decimated mesh in parts, then connect them all together at the end.
I used a UDIM workflow and stacked UV shells for the wings. In order to cut down on the number of UDIMs and awkward cuts, my wings are at 8k resolution while the rest of the body is at 4k. At 4k resolution, the massive wing parts would have to be split into many UV sets if I wanted to keep a consistent texel density across the model. There was also a bit of wasted space at 4k resolution, and going to 8k allowed me to utilize the spaces in between.
For baking, I love using Handplane 3d. For larger projects with tons of parts, I don’t need to spend a ridiculous amount of time decimating down my high poly. I run two passes at different cage values, 1% and 5%, and composite the maps in Photoshop to clean up any baking artifacts I get. Handplane 3d does not support UDIMs though, which is slightly problematic. For the purpose of baking, I’ll just move all the UVs into the 0-1 space temporarily. At the same time, parts of the mesh contained in a UV set will be split off into separate objects and the vertices at the border will be averaged.
I follow the PBR approach, and all texturing is done in Substance 3D Painter. It supports UDIMs and allows me to paint across UV sets that would otherwise be different materials in Maya. If I were to assign a different material to each UV set, I would then have to copy and paste any textures shared across all the different materials used.
The curvature map I get from baking is essential for speeding up the texturing process, otherwise, I’d be painting everything by hand which is absolutely nuts. I use curvature generators to get a quick base, then hand paint from there. To reduce the number of layers, I combine base albedo, roughness, and metallic together, then add variation when needed. Many folders and layers have paint modifiers added for masking purposes. I did not make a clown pass my dragon because it wasn’t necessary. There weren’t any parts that needed clean color id selections besides the claws and sculpted fur.
The crevices between the scales (the exposed skin parts) are lighter than the scales themselves, and you can see this in many reptiles. I overemphasized this detail to make the scales stand out more. A cavity map will add any illusion of depth necessary to the crevices during render.
Ultimately, the texturing process is also a bunch of mostly small, simple changes stacked together to produce something much more complex.
I typically start with a three-point lighting setup – key, fill, rim – and add more as needed. Marmoset makes this process a breeze, though Unreal Engine works just as well. When presenting, I usually plan for a cover shot, detail shots, then a few breakdowns. Dramatic lighting can make your render look more realistic and eye-catching if that is your goal, but showing detail is usually expected. Here is a comparison of lighting changes for the sake of presenting detail. I was told to think like an illustrator during this phase. I mainly use light to emphasize depth in my render rather than use it to show or hide detail.
For the cover shot of my dragon, there was a lot of editing done in Photoshop. The final result is the 5th iteration, with previous attempts being too red overall, poorly lit, or just nonsensical. I rendered the dragon with a transparent background, placed it into a blurred sky background, adjusted the color balance of the background to match the lighting, and added embers to the foreground. Noise and motion blur filters create a sense of motion – as if the shot was a frame taken from a cinematic.
I originally planned on using sculpted fur like Hraesvelgr’s model but decided hair cards would look better during the texturing phase, so I added them after everything was done. Laying hair cards over the sculpted fur somewhat reduced the coverage needed, though not needing to account for sculpted fur would have made the retopology process much, much simpler. To generate the textures for the hair cards I used Fibershop, to place the hair cards I used a Maya plug-in called GS CurveTools.
If there’s one thing I would do differently, it would be to not sculpt the hair with the main body as one contiguous mesh. I cannot overstate how bad of an idea that was. It only served to make retopology complicated. Better yet, I shouldn’t have even sculpted hair if I was going to do hair cards. I also spent a while figuring out how to best approach modeling the wing. While the low poly clumped the feathers together, there was no reason to sculpt the high poly the same way. Making each feather its own subtool would have saved a ton of time and effort.
Fortunately, some would-be problems were avoided thanks to active feedback from my mentors. As this was also my third project, some mistakes were avoided because I’d learned from my previous work. I should be careful calling approaches mistakes as they might just be a method that I don’t prefer. A recurring observation I’ve made on my 3D journey is that there are many ways to arrive at an end result. How you choose to get there is up to you.
Thank you, Vertex School and 80 Level, for the opportunity to show my work!