Home Contests & Challenges Archives Game Art Workshops

Workshop #3 - SyncViewS

polycounter lvl 13
Offline / Send Message
SyncViewS polycounter lvl 13
Hi guys, here's my entry, a Straight Pipe Wrench by Ridgid. It's 24" (60 cm) long and weighs around 6 lb. (2.7 Kg) being it in aluminum. Right now I'm still blocking it out, and as the model develops, I may add details like a mop wrapped around the hand grip, or some bludgeoning item grasped by the claw, to make it more appealing for a FPS melee weapon (maybe Unreal Plumber III :)

Wrench_01.jpg

Replies

  • Pedro Amorim
    Looking good man!
    This is the base for the highpoly?
  • SyncViewS
    Offline / Send Message
    SyncViewS polycounter lvl 13
    Yes, it is. It's the starting point. I like to get some references then block out the whole object to get the idea of dimensions, proportions and relation between different parts. The previous image shows a very early stage. Currently the main body is almost finished, I'm refining details in smoothed shading, the claw part is at a good point and the regulation ring is ready for bake. I'll post some updates later as soon as everything works.

    As the main model is almost completed, I'm starting to collect ideas about what to stick inside the claw. The idea I like best is to wrap a chain made by big rings around the head a couple of times with extremities hold by the claw. Another one is to have a big bolt with a nut. Another one, since this is a wrench for pipes, to have a short piece of tube cut like the extremity of a syringe needle. (Am I too gory? ;) Let me know what you like and your ideas.

    By the way, this workshop rocks! The amount of workload is just perfect. I love the idea to do something fairly simple, but appealing, from concept to game ready prop. In this way every aspect can be mastered, done and redone until it turns out well. I can do quite decent high poly models, but every further step is a sort of voodoo, not mentioning the huge question mark about texturing. I'll need your guide and advice. Thanks.
  • OBlastradiusO
    Offline / Send Message
    OBlastradiusO polycounter lvl 11
    Looking good so far Sync. I like your process. I'm still trying to figure out what weapon I'm gonna model.
  • Pedro Amorim
    doesn't need to be a weapon per se. you can make a DIY kinda weapon.
    make some pipes, attach something to it. You know..
    A melee weapon could be a rope with rocks.

    Loose your imagination. Think of rage, and try to see what kind of weapons you could make with stuff you could find in a dump or a junkyard :)
  • SyncViewS
    Offline / Send Message
    SyncViewS polycounter lvl 13
    Here is the finished high poly model from 3ds Max. Next step is to build the low poly model. When I have a clear idea about the number of triangles required for the wrench I'll determine what kind of add-on put into the claw: the chain is quite heavy, while bolts and pipes are less expensive.

    Before baking it, or during that step, I'll try a passage in a sculpting app to beat the wrench a bit and add major scratches and so on. I'd like to learn how to add details in the finished normal map too, so I'll save some details for that.

    The model is completed but lacks writings and manufacturer's logo inside the handle and the claw. I'd like to put something nice, with floating geometry, using MoP's nondestructive technique, so I'm open to ideas.

    The line along the whole body isn't a smoothing mistake but the reproduction of imperfection of aluminum casting and draft angle to extract the piece from the die. Comments and critiques are welcome. Thanks.

    Here is the model in OBJ format.

    Wrench_02.jpg
  • IronHawk
    Offline / Send Message
    IronHawk polycounter lvl 10
    looks good but i think the top of the wrench where you went thin should go fat. the slide and is the thin and then it comes out near the teeth.
  • Pedro Amorim
    Damn man! very nice!
    Thanks for posting the OBJ aswell. That's what this workshops are all about :)
  • Mechadus
    looks really nice so far. There are some really interesting shapes. i think most of my comments will be fixed when you get around to normal mapping it, but great start! I gots to get mah shit in gear :P

    -N
  • SyncViewS
    Offline / Send Message
    SyncViewS polycounter lvl 13
    Thanks guys, I'm currently working on the low poly, and once obvious edges has gone, those supporting the global shape in smooth, it becomes quite hard to judge what to keep and what not. The hook is a real pain, since I'd like to keep the gear teeth, but they're expensive, so I guess I'll try to preserve strictly the visible ones. If I cut it straight, don't have any clue about how will the normal projection would work, but hey, isn't it the purpose of workshops?

    @ IronHawk: The product I linked is a different wrench size, a 14", while I'm working on a 24", so proportion could look slightly different. Anyway I guess I'll beef it up a little.

    @ bitmap: You discovered and announced IllusionCatalyst on this board more than one year ago, you know, I like to share. Give what you know and get what you don't, that's learning from each other.

    @ Mechadus: Is it so hard to get a good normal map? I don't really know, let's see what happens when I feed xNormal with the wrench (disasters expected).
  • Pedro Amorim
    You have 3000 tris, so try to make the rough lowpoly and then keep adding tris until you are satisfied :)
  • SyncViewS
    Offline / Send Message
    SyncViewS polycounter lvl 13
    I just finished the low poly of the wrench and unwrapped it, but I'm struggling a bit with UV layout having to deal with some long and thin islands I don't want to split.

    I was thinking about using a non-square texture like 1024x512. So I got some questions:

    1- Assuming the texture is 2:1 x:y ratio, I guess I have to pack everything in the lower half of UV space, from [0, 0] to [1, 0.5]. Is it right?

    2- When I apply the texture (in 3ds Max) simply set V tile to 2 and V offset to 0.25. Is the same in game engines? Marmoset too? (I still have to try it)

    3- Can I use even more stretched formats, like 1024x256? Can it cause problems? Is it uncommon at all?

    And not related to texture dimensions:

    4- Is it better working at target resolution from the beginning, or could be better working on a multiple, then scale as last pass in Ps?

    Thanks
  • EarthQuake
    what i do when uving textures that arent 1:1 is arange them in the top half, or whatever, and then when i am done scale them exactly 200% so it fills the entire range. You can "trick" max into using on a section of the uvs, but that wont export to a game engine correctly. I also think in max you can set the UV ratio, and it will handle it all perfectly including rotating correctly and such.
  • SyncViewS
    Offline / Send Message
    SyncViewS polycounter lvl 13
    Thanks EQ, if I get it right, maps MUST ALWAYS be square to work in game engines and such. I thought scaling the UV 200% in one direction was another kind of wasted space, since you got a texture resolution doubled in one direction, which seems quite useless, but I don't know how this translates into reality.

    I guess I'll try filling the whole UV space by scaling and rotating islands when I decide what to fit into the claw, since I got 270 tris left and can spare some more for almost hidden parts.

    Here is the low poly model, already tested for normal maps creation in xNormal. It produced nice and clean results. I'll post new renders as soon as UVs are fixed. There are some apparently wasted tris on the symmetry plane, but I voluntarily kept them to help the unwrapping.

    Here is the low poly model in OBJ format, still without unwrapped UVs.

    Wrench_03.jpg
  • EarthQuake
    SyncViewS wrote: »
    Thanks EQ, if I get it right, maps MUST ALWAYS be square to work in game engines and such. I thought scaling the UV 200% in one direction was another kind of wasted space, since you got a texture resolution doubled in one direction, which seems quite useless, but I don't know how this translates into reality.

    I guess I'll try filling the whole UV space by scaling and rotating islands when I decide what to fit into the claw, since I got 270 tris left and can spare some more for almost hidden parts.

    Well, the thing is, you map it to the entire square(by scaling it 200% in one direction), and the square "Stretches" to fit your texture res, say 1024x512, there is no wasted space in doing this.
  • SyncViewS
    Offline / Send Message
    SyncViewS polycounter lvl 13
    Alright, I think I'm starting to understand :) The texture actually is, say 1024x512, when the engine loads it, "stretches" the texture to a square, so the UVs must match that stretched format, and as you said, there's no wasted texture space. I got it wrong before, is it "right" now? Thanks for explanation and patience, I'm a real newbie on this things.
  • Havok
    Offline / Send Message
    Havok polycounter lvl 14
    Looks great so far man. Git them UVs dun ;).

    What I do for non-square textures is first fill half of the UV space and then stretch 200% (just like EQ said) and when rendering the UV template choose your size as 1024x512 and it should come out perfectly sized. Not sure if I missed something in the conversation and If I'm giving misinformation. Let me know if I am :).
  • SyncViewS
    Offline / Send Message
    SyncViewS polycounter lvl 13
    Well, I think I got the UVs thing, but need some trials before being absolutely sure. I love to be on workshops :D

    Thanks Havok, it is a nice tip to allow having stretched UVs and don't mind them anymore, I'll put it into action if needed after adding last piece of geometry in the model.

    Here it is. After trying some solutions, this is the one I like best. It is a piece of threaded pipe fastened to the wrench by two big bolts, since the wrench is for grabbing pipes and cannot hold something by itself. Pipe extremities are cut and shaped to add the maximum damage to the wrench weight. It is a concept to convey the message that it is a weapon, that's conceived to bring pain, by first sight. Textures should help a lot.

    Right now it is under defined, just a concept. I should scrape together a bunch of tris from almost hidden parts in the jaw to make it look better (read fearsome).

    I wish to know your opinion about current design. Let me know your ideas too. Thank you.

    Wrench_04.jpg
  • Havok
    Offline / Send Message
    Havok polycounter lvl 14
    Looks good, man. I know this is just a concept but instead of having them perfectly broken like that, have some of the sticking out parts jagged, smaller, etc. just to vary it a little. You probably wont do this but when texturing maybe you could give the ends a sort of orange tone to make it look like the user has heated it to make it more painful, kinda like this:

    iron.jpg

    Just an idea but keep it up!
  • Marnik
    Offline / Send Message
    Marnik polycounter lvl 8
    Havok wrote: »
    Looks good, man. I know this is just a concept but instead of having them perfectly broken like that, have some of the sticking out parts jagged, smaller, etc. just to vary it a little. You probably wont do this but when texturing maybe you could give the ends a sort of orange tone to make it look like the user has heated it to make it more painful, kinda like this:

    iron.jpg

    Just an idea but keep it up!

    This makes me miss my welding days hardcore =[

    *sniffle* I miss you arc welding, and you too oxyacetylene, and even you, MIG. T_T
  • SyncViewS
    Offline / Send Message
    SyncViewS polycounter lvl 13
    The "spiked pipe" is just a concept, but right now I'm doing it high poly, and still like the quite simple five point design because I think of it as something done with a small abrasive saw in a garage (like Pedro said). I don't have enough tris left to make it much more random, but I think a pass in a sculpting app would bring out the manufacture, and would turn out quite well... At least I hope.

    About the heating... well, you're evil :D Your reference image is really great and even if the pipe won't stay heated like that for a long time, since it's not that massive, it would look really well. If I got time, at the end, I'd like to experiment with that glowing, and if future concepts allow it, I'll definitely take it into account. I love the color gradient left on metals by heating. Thank you.
  • Havok
    Offline / Send Message
    Havok polycounter lvl 14
    Marnik, if you need a shoulder to cry on, I'm always here for you :(.

    Sync - Haha, wow, I didn't think you were gonna see it as a good idea. No problem I guess :D. Also if you are goin for a manufactured look than by all means keep what you have :).
  • SyncViewS
    Offline / Send Message
    SyncViewS polycounter lvl 13
    A small update. I just finished the full model and the low poly. Before posting them I'd like to pass through some sculpting, so the high poly needs a review to make its topology a little more even. I know I'm doing a lot of unnecessary steps, but I like to experiment, and next time I'll think ahead.

    Meanwhile here is the current UV layout, as I said it's 2:1, so I guess I'll go for a 1024x512, or 2048x1024 to make it look better as it would be my first finished game model. It is the best layout I could pack after unwrapping everything and normalizing clusters. I know there's quite a lot of unused space, but I feel like I've really done my best. Next time I hope would be better.

    Out of curiosity do maps like 1448x724 exist in games? It is almost the same as 1024^2 pixels and has aspect 2:1. If it makes sense I'd go for it, please let me know.

    Wrench_05.jpg
  • Havok
    Offline / Send Message
    Havok polycounter lvl 14
    No, always powers of two. They range from 64x64, 128x128, 256x256, 512x512, 1024x1024, and so on.

    The UV isn't bad at all. The only sort of blanks places are at the top left and middle right. Now you want to scale it vertically to fit the square well and when you export the map, just use the right size and run with it!!!
  • EarthQuake
    SyncViewS wrote: »
    Alright, I think I'm starting to understand :) The texture actually is, say 1024x512, when the engine loads it, "stretches" the texture to a square, so the UVs must match that stretched format, and as you said, there's no wasted texture space. I got it wrong before, is it "right" now? Thanks for explanation and patience, I'm a real newbie on this things.

    Almost but not quite!
    When the engine loads a non-square texture, it stretches the UVS to fit the texture, the other way around would be quite wasteful memory wise =)
  • EarthQuake
    Havok wrote: »
    No, always powers of two. They range from 64x64, 128x128, 256x256, 512x512, 1024x1024, and so on.

    The UV isn't bad at all. The only sort of blanks places are at the top left and middle right. Now you want to scale it vertically to fit the square well and when you export the map, just use the right size and run with it!!!

    Just to clarify, you can do any power of 2 X any power of two, so:

    64x1024
    256x512
    16x4096
    1024x1024
    2048x128

    etc etc etc, these are all valid resolutions.

    Your uv layout looks fine too, with such a simple shape its hard to get full UV usage out of it, i think the amount of wasted space you have there now is totally acceptable. Scale it up to fit the entire square and call it done!
  • Havok
    Offline / Send Message
    Havok polycounter lvl 14
    EarthQuake wrote: »
    Just to clarify, you can do any power of 2 X any power of two, so:

    64x1024
    256x512
    16x4096
    1024x1024
    2048x128

    etc etc etc, these are all valid resolutions.

    Yea, I should have told him that. Thanks for clarifying...
  • SyncViewS
    Offline / Send Message
    SyncViewS polycounter lvl 13
    Thanks guys, I think it's clear now. I'll stretch it by 200% in V and call it done, then I'll render the layout nu-scaled as Havok suggested (thanks) to start texturing as soon as I baked normals from the (still to do) sculpted model. Reading UVs are good enough cheers me up. There's still a lot of "unknown" work to do, so I'm glad to be able to move firmly on.

    @ Havok: I've been thinking of your idea of incandescent pipe extremities, and came up with some sort of black magic that could keep it heating, but I'd like to do it in a good way, trying to make sense, with runes symbols and so on. So I guess I'll do some concepts about it, and if it doesn't look good enough, discard it for this time. I hate when the word "magic" pops up just to justify the impossible.
  • Havok
    Offline / Send Message
    Havok polycounter lvl 14
    No problem dude. I recently started trying to help people and I'm damn glad I did :).

    Rune symbols could be pretty cool and I know what you mean about "magic" being used to explain impossible situations. Another idea (while being too late and too much with the restrictions at hand) could be some sort of attachment that when a trigger is pressed, two flames shoot out of small pipes to heat the ends of the larger pipe. Just experiment and see what keeps your boat floating ;).
  • SyncViewS
    Offline / Send Message
    SyncViewS polycounter lvl 13
    Had to make some steps back because of not so well planned work. There was to finish the low poly on UV side, now they're fixed and properly stretched.

    Get final unwrapped low poly model here.

    I decided to sculpt subtle surface details as well as wearing on the model, so I must fix the high poly model to a make it more suitable for high level subdivision, which means removing n-gons, trying to have the maximum number of quads, keep their aspect as square as possible, and even in size. It is obviously impossible on a mechanical model, but allowed to a certain degree. Details to be sculpted on hard surfaces require to work at high subdivision levels only, so the quad distribution becomes a little less important.

    Wanting a very bad worn wrench, I went through a lot of scratching. First I made the standard tool roughness and emphasized the dye opening line along the whole model, then sprayed scratches all over with different sizes with a custom alpha, a lot of very small signs, decreasing in number as they grew bigger, then took some of them and reworked by hand, since metal usually doesn't disappear because of a scratch, but it's simply shifted by side. Last passage has been to deform the surface slightly here and there to let it look like it was smashed, and brake normals regularity. Pipes end have been cut by a coarse saw, then kept into acid, which gave them the raw look.

    Next passage was to export every single piece and bake its normals. Once they were all done, a single map was composed.

    Next was the AO generation. Man it required hours... and reminded me of about eight years ago when rendering first GI scenes in Cinema4D on a Celeron 466 MHz.

    Last for this update was the Cavity Map generation. Not so fast as Normals, but much faster than AO.

    I'm quite satisfied of the outcome, considering this is the first time I reach this step in a complete model. I see the pipe could have had some more polys, but that's the mistake I made to think about it at the very last, having to deal with a bunch of tris. A little more concept and design on the initial phase could have helped a lot.

    Next step is texturing and gives me shivers, as I've never done it, except for some casual decals on design models... Any advice is more than welcome!

    Here are some renders and maps showing the results.

    Wrench_06.jpg
    Wrench_07.jpg
    Wrench_08.jpg
  • Pedro Amorim
    Man you are off to a great start!
    With a nice texture this can be a great portfolio piece!
    Keep going!
  • SyncViewS
    Offline / Send Message
    SyncViewS polycounter lvl 13
    Here is latest update: the Diffuse Map. It has been quite a challenge, but in the end I'm quite happy with the outcome. Not completely sure about washed blood around the pipe and nuts, but I guess it works somehow. I wanted the wrench really beaten and aged, and it seems right.

    Next step is a good Specular Map. Right now it is rendered with a standard uniform very low specular and metal seems a bit like concrete, but it should turn out well with a right map. Any advice and suggestion is really welcome. (Thanks Pedro :) )

    Wrench_09.jpg
  • SyncViewS
    Offline / Send Message
    SyncViewS polycounter lvl 13
    Workshop #3 Completed!

    Here is the last update, rendered in Marmoset (awesome! thanks guys). Some minor updates on the Diffuse map, added Specular map. I hope you like it. Thanks for the opportunity to create a full asset in this workshop, I've been breaking many "first time" along the way. Thanks to everyone who stop by and left a message or an explanation.

    Wrench_10.jpg
    Wrench_11.jpg
  • Calabi
    Offline / Send Message
    Calabi polycounter lvl 12
    Thats looks great, gongratz. I'm still stuck on the uving, its so boring and taking ages to sort all the little bits out.
  • stimpack
    Offline / Send Message
    stimpack polycounter lvl 10
    Just a thought for next time. Some of the details you modeled into the low could have been handled by the normal map, and then those tri's used to help round out the bottom of the handle. Everything is so nice a beveled but that spot. Mayb just go in and bevel those just for the fun of it =D

    sharp work
  • Pedro Amorim
    oh damn!
    i need to finish mine!!!!
    I LOOK LIKE A LAZY BUM!
    Congrats!
  • poopinmymouth
    Offline / Send Message
    poopinmymouth polycounter lvl 19
    Nice high res and bake. I think the red portion isn't quite working yet. It goes a bit orange towards the bottom, and it has so much removed, and in ways that don't quite match how real wear/tear would happen. For example, it looks kind of like the paint cracking that happens on old painted walls, especially below the main vice grip part. I'd keep it more solid, and only wear it away on the edges, and try to keep the red less orange and more continuous. If you do discoloration, I'd tend more towards darkening and increasing red, or even going blue. If you go orange, maybe emulate a bit of rust, but not an orange-ing of the paint color itself.

    The "back" rounded bit of the top, should probably have zero red paint left, as using it as a weapon would quickly remove it down to the bare metal, and probably have more intense denting as well.

    Top notch work though.
  • SyncViewS
    Offline / Send Message
    SyncViewS polycounter lvl 13
    Thank you guys! I really needed and appreciate feedback on this.

    @ stimpack: You're right, the lower part is a bit chopped by low polys, I don't like it very much too, but it's a choice I had to do when harvesting tris here and there to make the pipe and bolts. As you can see first low poly had it more rounded. I thought, as the model is a FPS weapon, it isn't likely to be seen very much in the lower part, so I took quite a lot of tris from it.

    @ poopinmymouth: Great hints! I see what you're meaning, and have to adjust quite a lot, but I guess it worth. You're right, it shouldn't go toward orange, but more likely to magenta/bluish color, as it happens to paints "baked" by the sun. It seems Marmoset added a little bit of warm tones too. Should have a little less color variation too, as the painted metal do. The rust is a super-fake visual effect as an aluminum wrench would NEVER rust, anyway I liked it and think it would give more character to the piece. I see it should be more worn around the edges and less in planar protected parts, as where the sticker lays. Touching the sculpted model now, would mean redo all the maps and adjust the low poly accordingly, a big rework.

    @ Calabi: Hold on man! It's really rewarding.

    @ bitmap: You'll never look lazy, there's a cog waiting for you!

    In the end, I'm not done with this cute wrench. Let's tweak it and see how it turns out. Thanks again! :)
  • SyncViewS
    Offline / Send Message
    SyncViewS polycounter lvl 13
    Just a note about the updating process. I spent a while modifying current textures, but they never looked right because scratches weren't in the right place: unvarnished spots were essentially unscratched while a lot of them were over painted zones...

    To make it simple I took two steps back: I'm redoing completely the sculpted model adding tearing and wearing where needed and matching the new diffuse map. I've already re-optimized the low-poly model, adding some triangles in the lower part to make it smoother, taken from overlapped surfaces between pipe and wrench.

    I'm currently finishing to re-scratch everything, then a new texture work waits. I want to really deserve that "Top notch work" from you, Ben!

    I'll be away for a few days, but I'll finish and post the new work soon. Thanks again for your tips, they made me learn smarter techniques during the redoing process too.
  • SyncViewS
    Offline / Send Message
    SyncViewS polycounter lvl 13
    Workshop #3 Completed! (Take two... Maybe?)

    Here is the latest update. I've redone almost everything (sculpt, low, uvs, bake, textures) except for hi poly model. Now it makes more sense, less fancy color variations, and I decided to go for a different feel: more weapon, see blood crusts, less aged tool, (can't) see rust.

    To be completely honest I quite like best the first version, but maybe is something emotional, being my first.

    Here is the latest unwrapped lo poly model. Enjoy.

    Looking forward to undertaking next workshop! Thank you :)

    Wrench_12.jpg
    Wrench_13.jpg
  • Bad Spleen
    Excellent work, what more can I say.

    -Adam
  • Calabi
    Offline / Send Message
    Calabi polycounter lvl 12
    Its really good, thanks for the model and how did you do the writing with it?

    Are the textures photo resources?
  • SyncViewS
    Offline / Send Message
    SyncViewS polycounter lvl 13
    The writings inside the handle are done in ZBrush and baked from High to Lo with normal maps in xNormal.

    I made a white text on black background in a square format image to create an alpha stencil. It had slightly blurred edges to avoid hard transition during sculpting.

    Imported in ZBrush as alpha, converted to stencil, then placed in the right spot. At highest subdivision level, raised it with the layer brush with stroke set to freehand and low Z intensity.

    Hidden everything except for the text area with a small frame all around, under Tool > Deformation gave about 10 times 100% Smooth, as it is light at high subdivision levels.

    That's it. It is the first step to do, before any other surface work because smooth would destroy anything else in the text area.

    Thank you for appreciation :)

    EDIT: Forgot to mention textures are hand/procedurally painted except for a quite subtle rust texture used to render blood crusts. It's from CG Textures under category Metal > Bare > MetalBare0015.
  • indavisual
    Offline / Send Message
    indavisual polycounter lvl 17
    Looks great. Here are a few suggestions of my own. I would actually model into your low poly large dents where the wrench would take a lot of hard impacts and paint in the damage. The silhouette on your wrench is that of a brand new wrench. Also you should change the coloration on the handle where the oils of your hand would affect it. The color is just too perfect on the handle. If your character is wearing a ring there may be some scratches to indicate that as well. Just things to think about when planning out the history of a prop. Great work though. These are all just suggestions to push it a little bit further.
  • Nistrum
    Offline / Send Message
    Nistrum polycounter lvl 9
    much much much much better. im loving the new texture :) you might want to add a tiny bit more paint loss along the raised edge ofthe handle.. as this would see alot of action, although i like how it is now.. so try it subtle and see how it pans out :)
  • monkeyboy_garth
    Offline / Send Message
    monkeyboy_garth polycounter lvl 9
    Yah...textures look waaay better now - good work!
  • SyncViewS
    Offline / Send Message
    SyncViewS polycounter lvl 13
    Thank you sir!

    To be honest I'm not fully satisfied by the outcome, but I learnt a lot by doing AND redoing the whole detailing+texturing process, which is the purpose of these workshops, so it's right to let it go and put the experience gained in the next piece. I hope these workshops will go on, as they're a great opportunity to get better, exchange knowledge and be a little pushed to finish things :)
  • Pedro Jatob
    Offline / Send Message
    Pedro Jatob polycounter lvl 8
    Very nice model/ textures... well done man..
  • Skamberin
    Offline / Send Message
    Skamberin polycounter lvl 14
    Reading through this thread was great. Great progress and really good outcome, especially the texturing. Thing looks it would hurt a lot!
    These workshops are pretty great :)
Sign In or Register to comment.