4 ms·
Working on a fully automated UV unwrapper for 3D meshes. Its basically the process of flattening a 3D object down to a square. used mainly for texturing. http:/
by quelsolaar 7y ago
Working on a fully automated UV unwrapper for 3D meshes. Its basically the process of flattening a 3D object down to a square. used mainly for texturing. http://www.ministryofflat.com http://www.ministryofflat.com
- icebraining 7y agoPretty cool, and great video, very clear and understandable.
- peteforde 7y agoThis looks really cool, but I don't understand when this process is required in an artistic pipeline. Do people who work in Maya/ZBrush have to export a texture map in order to paint in tools like Substance? Surely it's easier to work directly on a 3D object that can be rotated in space than an unwrapped map of cutout segments. Otherwise, how could you ever line anything up? Don't get me wrong: I understand that the ultimate output of a 3D mesh reshaping and painting process is an obj + jpg + mapping file, as I've worked extensively with systems that output files like this: https://sketchfab.com/3d-models/pete-swagger-walk-a55d807de14a4ba7bdb9977600e7c412 https://sketchfab.com/3d-models/pete-swagger-walk-a55d807de1... We did all of the image packing ourselves, but every tool I've used will output a map based on its own algorithm. So, given that my process is admittedly very different than a character artist, where does the UV unwrapping stage come in for most artists? I feel like I'm missing something obvious.
- quelsolaar 7y agoPolygons are 3D and textures are stored in images (2D). So you need to have each polygon in 3D space correspond to a polygon in 2D image space. One way to think of this is to take a 3D model and unwrapping it on to a 2D sheet. Very much like you would do if you would design paper-craft. A 3D artist usually starts by doing the 3D shape, then they create the UV unwrap, and then finally they paint the 3D model in a 3D paint program. Yes its sort of a invisible part of 3D graphics, but its very tedious, and therefor costly and doesn't contribute anything to the artistic to the asset. A big part of automating the process, is also using it ins situations where no artist is even involved in the process, like when you do 3D scanning, and want to produce good 3D models with textures.
- namibj 7y agoI got great results with mvs-texturing. It's not as efficient with texture area or the number of textures, however. Does your approach scale to large meshes, at least in theory? I.e., what is the limit you deem feasible with 1TB RAM and a 3GHz dual socket, 14 cores each? Say, within 2-5 hours or so.
- quelsolaar 7y agoI have tried it with meshes in the 300-400 meg range and it works fine. Time depends on the kind of geometry.
- peteforde 7y agoThanks so much for this explanation. I had no idea that people couldn't paint their creations in zBrush directly. It has all of those fancy brushes and I thought it was an end-to-end solution. What's more, I'm kind of floored that if you do model something in zBrush that it doesn't generate a texture map for you. I've always been spoiled because our system was clearly abstracting this UV unwrap process completely - we were generating lifelike human avatars and had to come up with our own texture packing scheme. I've heard people discussing unwrapping and never understood what they were on about!
- namibj 7y agoRegarding your twitter question: you can create an anonymous temporary file with no name or backing store since recently (4.x, iirc). You should be able to use dup(2) and unix sockets to send the descriptor over.
- quelsolaar 7y agoThanks! What i cant work out is if/how dup can be made to be owned by a different process. it needs to be only accessible by that process and should be removed once that process dies. I would like to separate the transfer, of the handle, and the translation of the handle.
- namibj 7y agoYeah, you can use sendmsg(2) with special flags to send a file descriptor over a unix socket or iirc also a pipe. It's very useful with kernel-tls or multi-process web servers, to handle no key at all in the worker thread itself or shard processes by something only known after connection establishment, like the HTTP Host header or tls SNI.