Jump to content

Elektrix

Member
  • Content Count

    61
  • Joined

  • Last Visited

Everything posted by Elektrix

  1. Why You Shouldn't Use This Tutorial: A Preface [Important, please read!] This tutorial does not necessarily create the highest-quality assets for the workshop. I'd encourage not publishing things made here. That being said, I still use this tutorial for things I use privately. Therefore, I have compiled a list of reasons when not to use this tutorial: 1. When you plan on releasing a finished asset to the workshop. This method creates unacceptable texture sizes; workshop assets with higher than 2k textures tend to use a ridiculous amount of ram. 2. When you have more than 15-20k vertices in your model. Frankly, you shouldn't be making any models with this many vertices unless you know what you're doing. 3. When you are making anything other than a building. This method just doesn't work with roads and never will. Please use Blender or 3DS Max, two mainstream modeling softwares, for any professional asset creation. You could even use Sketchup, but UV map in Blender or 3DS. It's not really as hard as it looks. If you're still here, let's begin. Prerequisites Sketchup 2018 or less Blender Cities: Skylines Texture Atlas for Blender. It comes default with Blender; it just needs to be turned on. See the link directly below this ↓ (at least on my computer screen) to learn how to install extensions. SCSH. <-- I made this. It's a Blender extension. Don't know how to install Blender extensions? Look no further than this StackOverflow answer A model you made in Sketchup. Quirks You have to have every visible face textured or the face will be deleted by the script. Solid colors don't play nice with texture baking since they don't contain textures. This is subject to change in a future release so stay tuned. I too want to export solid faces. Any face that you want to be visible must be front-facing (not dark greyish-blue with the default SketchUp material). It won't show up even if the backface texture somehow does miraculously get baked. Smaller objects and buildings will look nicer than larger objects and buildings. That's what's going to happen for everything you make regardless of whether you make it in Sketchup or not. I might have lied about it being four clicks to convert. It's more like seven to ten-ish. That's a lot more clicks, ohmygoshimgoingtodie The Actual Tutorial Step 1: Export your model from Sketchup. I'll be using the .dae format as I am poor and I can't afford Sketchup Pro. Make sure you triangulate all faces and export texture maps in the options menu. Do not use any other options as they can range from unnecessary to destructive. Edit: Make sure everything is exploded before you export. If you don't know what that means then you don't need to worry about it. Step 2: Go to the Scene tab in the parameters menu on the far right. It looks like two primitives and a sun. Go to the bottom and hit "Blank Canvas". It's labelled with a big X. (Or you could hit A-A-X-D really fast, but this isn't a Blender tutorial. Do whatever is comfortable for you.) Import your .dae and hit "Quick Convert" in the panel on the right. It has a star next to it, you can't miss it. Make coffee or do something else while my plugin: creates a big texture atlas using the texture atlas plugin (less than 1 second) uv unwraps your model into the atlas using blender's builtin uv unwrapping algorithm (less than 3 seconds) marks the initial uv map of each mesh as renderable while selecting the new map for the upcoming texture bake (less than 10 seconds) bakes the texture to a 16384x16384 image for maximum resolution (feels like actually forever and felt even longer in testing, but it's only about 3-5 minutes for most) joins all the meshes together (less than 1 second) Step 3: Once the process finishes (again, it will take some time so don't freak out), export your model as a .dae. Make sure your Texture Mode is set to "UV Textures". Step 4: You should be now left with an Import directory with your model and a near-200MB texture named TextureAtlas.png. Now for the love of all that is holy in the world open that bloated texture up in your favorite image manipulation program and scale it down to an acceptable resolution. 2048x2048 (2K) is pretty much going to be acceptable in most cases. The largest size you should try to get away with is about 1MB. Rename the texture to [whatever you named your sketchup model]_d.png and you're done. Import it to C:SL just like any other model, and make sure to scale it up by 2.54. Eh, I've made better. There are a few underlying issues with this model (incorrectly oriented faces causing incorrect textures to be displayed on the stairs and metro sign, MoM trench tracks not working how I thought they did, etc, but this model serves its purpose as a demonstration. Why don't I just render to 4096x4096 in the first place to skip the fourth step? I tested it and I felt that while it took significantly longer to render in 16384x16384, I tended to get better results if I rendered to the full resolution and scaled down later. If someone wants to give a technical explanation I'm all ears. At this point, I assume that Blender's raytracing algorithm will create less detailed results to begin with than the downscaling method used in GIMP or Photoshop. If you would rather use an initial texture size of 4096x4096 and skip this step, use Manual mode (sequentially click each button, and between "Create Atlas; Add All" and "Auto Unwrap to Atlas" go down to the Render tab and scroll to the bottom and change the resolution to whatever you want. Eventually that will be a GUI in my extension; I'm just too lazy to make it right now. How can this method be improved? There are a few things that I'd like to change in the future of the Blender extension especially. In the future, I'd like to be able to bake solid colored faces but that would require a rewrite of a significant portion of the script. I want to be able to generate LODs. At this point, you have to simply repeat the process with a LOD model entirely. Since this is exactly what you have to do when you make 3D models in any other modeling software, I'm more or less fine with the work. I do find that the game-generated LODs are more or less fine for my city, which is why I typically don't make them for personal models like the metro station viewable above. It would be really cool if I could make this into a Sketchup extension. However, learning the ins and outs of texture baking and atlas creation was not really on my list of todos for this semester, especially since I already have college classes to think about and other C:SL-related projects to tackle. I still plan to finish my script that unsubscribes from unused assets and make it understand packs. I still plan to do some simple modding eventually. I'd also love to implement a better UV unwrapping algorithm, as the most important thing here is that the materials are preserved with their correct scaling and not that each face gets its own distinct texture. This would allow for much smaller resolution textures (smaller file sizes) without decreasing texture fidelity. Or, on the other side, similar resolution textures with heightened texture fidelity. Q&A Q: Can I use models from the Sketchup 3D Warehouse? A: For personal use (not for publishing to the steam workshop), always yes. If you plan to publish the asset to the Steam Workshop, please get the permission of the original author first. Q: I'm getting weird black lines on the model in Cities: Skylines. A: The best way I've personally found to get rid of the black lines is to manually subdivide large faces in Sketchup. That way the face can be broken up into different areas of the UV map when the model is imported to Blender. Or you could open up the diffuse texture in your favorite image manipulation program, select by color (choosing black) and delete those pixels, causing transparent areas where the black areas used to be. Then duplicate the layer, select the one underneath the texture, and blur it. This works... sometimes. It should look like this: Q: How do I get textures for solid faces? A: You can use "unique textures" in Sketchup, or you could search online for a solid color texture and make a new texture. This, again, is a limitation that I hope to remove in the future. Q: I don't have my texture in the Import folder after I export? A: Look at the GIF in Step 3 and make sure you're exporting as a .dae. Q: My texture won't load in the game? A: Your texture is most likely not named correctly. Make sure it is marked as a diffuse map for that model by giving it the same name as the model with the suffix _d. It may also be too big. 200 MB is completely unacceptable as a texture size unless you're making something absolutely massive. It may also not be in a power of 2. Acceptable texture dimensions are mixed-and-matched from this list: 256, 512, 1024, 2048, 4096. Q: My model is way too big in tris but it shouldn't be? A: Go into Edit Mode in Blender, select the entire model, and hit Remove Doubles. You can search for it in the Space menu if you don't know where to find the button. If your faces are incorreclty oriented in Sketchup you'll end up with a garbled mess which is why I didn't automate that portion. Q: How can I manually UV map since 4K res is too big? A: Use manual mode (sequentially click the bottom buttons) and skip "Auto Unwrap to Atlas" and instead substitute manual UV mapping (if you so chose to torture yourself like that). It's not fun to manually unwrap Sketchup models in Blender, so you're kinda better off starting off in Blender to begin with and modeling the whole thing there. Q: My textures are still low res? A: You'll definitely not want super long faces. That doesn't play well with Blender's UV unwrapping algorithm (for obvious reasons?). Manually subdivide those faces in Sketchup or manually UV map in Blender. If you have an absolutely MASSIVE model then you might not want 4K textures, but to be quite honest that's all you really should be using, so... All right, hopefully that covers everything. This is my first time making my own post on Simtropolis instead of commenting on someone else's, so I hope everything here is correctly formatted and factual. Also, hopefully this tutorial will help people other than just me If you have any questions or tips or comments I'm all ears. I consider myself to be ridiculously lazy so it is in my best interest to implement anything possible to save myself and other people time and most importantly effort.
  2. Network Skins 2 | Alpha 3

    Awesome!
  3. @jumonjii Not entirely sure how to say this well. Have you searched the workshop at all? The first seven assets when I searched "planning" with the roads filtered are exactly what you're asking for.
  4. it's likely that you didn't save user settings. you probably just can't find the tool, it's under the scene tab in blender 2.79. going to be updating this tutorial severely.
  5. you have too many polygons, the tool is overloaded and will produce bad results. use a planar decimate modifier until you're well under 20k tris.
  6. Well, I decided to make a simple mod finally: It allows users to select a series of nodes they want to be smoothed in any order and smooth them out linearly. If anyone wants to test it out before I finalize it and publish it, (first of all thank you so much! I need to find and fix as many bugs as possible!) you can either download the beta from this post (or from Github) and install it manually, or friend me on Steam and subscribe to it there (I have the beta version uploaded and marked as friends only). Here is the source code in its current state (unrefined and definitely not polished). I've had a few smaller issues that are not technically too important to the final development and release of the mod, but I've been confused about: 1. How do I include custom icons for buttons? I experimented with SamsamTS's ResourceLoader.cs (used in MoveIt and other mods by him), but I simply couldn't get it to work correctly in my setup so I eventually gave up. And ultimately, I'm not even sure if I have the right to use his ResourceLoader (even with credit), and I'd hate to get my first uploaded mod taken down. 2. How do I use non-textured UIPanels correctly? Whenever I don't specify a bgSprite texture for UIPanels, I can no longer locate them in the ModTools Scene Explorer or using UIView.Find("PanelName"), yet the cinematic camera button has an invisible UIPanel behind it and seems to be normal and working fine. All I really want is for all the elements to not be subject to the same events as the parent element. I have a bunch of other ideas for simple mods once I get this one polished and done, so I figure I'll just post them and any other future assets I create in this thread. Sorry if I sound rushed or anything, it's nearly midnight where I live and I'm pretty tired (although classes are finally over for winter so I won't be tired for long!). Thanks for any help. All My Other C:SL Projects Sketchup to Cities: Skylines Helper + Tutorial JavaScript to create Steam collections of unused assets NodeTools.dll
  7. All right, cool! I'm still really enjoying using the mod, and the elliptical roundabouts are a nice touch! I'm currently testing the new version out on a savegame, here are some things that I noticed: Easy to fix: Decimal +/- (On the digit row on top of the keyboard) do not increase the radius of the circle but the numpad (far right) +/- do. If the window is open over a node when you click on one of the roundabout types (or anything else for that matter), the node under the window is selected whether you like it or not. This can be fixed by restricting what mouse positions are open to raytracing. If the mouse is over the UI window, simply don't allow the tool to be used. One can select pedestrian path nodes even though roundabouts don't work properly on them. Pressing "back" on Step 2/3 of the elliptic roundabout generator goes back to the very beginning, not to the previous step, and there's no clear way to return to the previous step. Easy to fix: The window does not disappear when you enter cinematic camera mode. Parenting the window to something that does disappear should resolve the issue. If the radii on the ellipse are equal to each other, then normal circle mode should be used (if that's not being done already). In my opinion, holding a modifier key while pressing +/- should allow you to change the major/minor radii of the ellipse instead of increasing both at once. (Not really a bug report, but something I wished I had while using the mod)
  8. Very Bad Graphics Problem

    After industries, my graphics settings reset to "low" for all settings; make sure that they're set correctly. You can use mods like Dynamic Resolution to get rid of a few of the jagged edges, and Tree LOD Fix should help with the blurry trees. As for the roads looking ugly when looked at from grazing angles, use Sharp Textures on higher settings to fix this effect for the most part.
  9. Ain't it cool? It was made by @Strdate. I've already used it several times in my game and it works like a charm! It is way better than the faulty method I was using before. I'd definitely recommend subscribing to it.
  10. Before I begin, are you using ILSpy? If so, are you aware of the Analyze feature? Right click on any method, property, or field you're not sure about and it should bring you back to its declaration. (I just realized that I responded to this post backwards, sorry ) 4. UI is honestly a pain in the rear and I always have had at least one issue with it for both of my current mods. I'd suggest using ModTools to get field values of UI that you want to "copy", and since you mentioned boformer's tutorials I'd suggest looking at SamsamTS' UIUtils that is mentioned briefly in Tutorial 4 to get a better idea of the inner workings of the stuff. I'm not really sure how the Unity GUI specifically works with this game, though-- I've always found ColossalFramework.UI to differ from generic UnityUI in very subtle and annoying ways. 3. MAX_SEGMENTS_PER_NODE is 8, although netNode.GetSegment() with a higher number should return 0 anyway, so you're fine to keep it as 12 if you don't feel like updating it, since you're already doing a nullcheck. 2. Lol, I'm happy to help wherever I can. As for the tangent function, I haven't personally tried it out, but the first overload: public Vector2 Tangent(float t) at t=0f should give you the first of the two directional vectors. Beziers are basically just a graph of a parametric curve function with respect to time on the interval 0 to 1, so I'd make an educated guess and say that the same function at t=1f should give you the second directional vector. If that doesn't give you the correct directional vectors, try instantiating new vectors based on the control points of the Bezier curves (so one vector from Bezier.a to Bezier.b and the other from Bezier.d to Bezier.c) and using those as directional vectors. The vectors may or may not need to be normalized as well. (I honestly have no idea.) Otherwise, I have no idea, sorry 1.Awesome, I'm going to use that a ton! Have you considered adding the ability to change what road is used, like a dropdown or something?
  11. The reason why exporting straight from Blender tends to have less tris is because Sketchup tends to create duplicate vertices when exporting .dae or .obj models (for unknown reasons, but I think it's likely because of the way texturing works internally). If I remember correctly, all you have to do to get the tris down after exporting is just to hit Remove Doubles in edit mode after you've re-mapped the shape, although that process may need to occur slightly sooner in the process as I haven't done it in a while. From one format to another I believe the difference is negligible and would be resolved with Remove Doubles anyway. I use .dae here because it's in the free version of Sketchup, but the process could be used with .obj or .fbx exports as well. As for texturing, I've found that if models I make in Blender that I UV map manually tend to look best and are optimized well at 2nx2m pixels, then typically a Sketchup version created with my plugin looks best and is best optimized at 2n+2x2m+2 pixels, and the larger texture size is typically passable, in terms of RAM consumption. I rarely have textures (2K or 4K for personal use) that are much greater in size than maybe 2 MB. But ultimately, the objectively best texturing work and UV mapping (at least at this stage of the tools available to us) is done by hand. Sorry for the hurried response, I'm between classes currently
  12. What I currently have (which neither works nor even compiles) is this: ushort segmentId = m_hover; NetInfo prefab = m_netInfo; Type SegmentDataManager = m_networkSkinsAssembly.GetType("NetworkSkins.Data.SegmentDataManager"); object networkSkins = Activator.CreateInstance(SegmentDataManager); var segmentData = SegmentDataManager.GetField("SegmentToSegmentDataMap").GetValue(networkSkins)[segmentId]; MethodInfo m = SegmentDataManager.GetMethod("SetActiveOptions"); m.Invoke(networkSkins, new object[] { prefab, segmentData }); My main issue is getting the segment data. I'm honestly not sure how to get at it. I've tried the above method (which doesn't compile) and I also tried casting the SegmentToSegmentDataMap to something other than a generic object, but I wasn't quite sure what to cast it to, since its actual type is SegmentData[] which is a class from Network Skins. I feel like I'm probably doing the whole thing wrong, as I'm honestly not really familiar with reflection at all. In other news, I'm trying to merge Segment Slope Smoother with Quboid's new version of Move It, which is going much better overall; it's nearly done, and I'll probably submit a PR by the weekend.
  13. You can find out if a segment is straight arbitrarily by using NetSegment.IsStraight() with no parameters. That will save a lot of calculation. Net segments can also be defined as a cubic bezier with the middle points (bezier.b and bezier.c) being found by the function NetSegment.CalculateMiddlePoints, so you're in luck, because you don't have to use much complex math. I tried to explain how to do at least the intersection process, but I couldn't even understand my own explanations, so here's some code that roughly finds the intersection point and places to split each NetSegment: // First segment data NetSegment yourSegmentHere; Bezier3 bezier; // Second segment data NetSegment yourSecondSegmentHere; Bezier3 secondBezier; // Turn the segment data into a Bezier2 for easier calculations supported by the game bezier.a = NetManager.instance.m_nodes.m_buffer[yourSegmentHere.m_startNode].position; bezier.d = NetManager.instance.m_nodes.m_buffer[yourSegmentHere.m_endNode].position; bool smoothStart = (Singleton<NetManager>.instance.m_nodes.m_buffer[yourSegmentHere.m_startNode].m_flags & NetNode.Flags.Middle) != NetNode.Flags.None; bool smoothEnd = (Singleton<NetManager>.instance.m_nodes.m_buffer[yourSegmentHere.m_endNode].m_flags & NetNode.Flags.Middle) != NetNode.Flags.None; yourSegmentHere.CalculateMiddlePoints(bezier.a, yourSegmentHere.m_startDirection, bezier.d, yourSegmentHere.m_endDirection, smoothStart, smoothEnd, out Vector3 bezier.b, out Vector3 bezier.c); Bezier2 xz = Bezier2.XZ(bezier); // Second segment: secondBezier.a = NetManager.instance.m_nodes.m_buffer[yourSecondSegmentHere.m_startNode].position; secondBezier.d = NetManager.instance.m_nodes.m_buffer[yourSecondSegmentHere.m_endNode].position; bool smoothStart = (Singleton<NetManager>.instance.m_nodes.m_buffer[yourSecondSegmentHere.m_startNode].m_flags & NetNode.Flags.Middle) != NetNode.Flags.None; bool smoothEnd = (Singleton<NetManager>.instance.m_nodes.m_buffer[yourSecondSegmentHere.m_endNode].m_flags & NetNode.Flags.Middle) != NetNode.Flags.None; yourSegmentHere.CalculateMiddlePoints(secondBezier.a, yourSecondSegmentHere.m_startDirection, secondBezier.d, yourSecondSegmentHere.m_endDirection, smoothStart, smoothEnd, out Vector3 bezier.b, out Vector3 bezier.c); Bezier2 xz2 = Bezier2.XZ(secondBezier); if(!xz.Intersect(xz2, out float t1, out float t2, 5)){ // can adjust final parameter "to taste". 5-8 should probably be fine although I haven't tested this to find out. return; } Vector2 intersectionPoint = xz.Position(t1); // you will now have two time-based variables, t1, and t2, that are the parametric intersection times for the respective beziers. Then you can split the beziers at their respective points using Bezier2.Divide and create new NetSegments based on the resulting data. // you also have the coordinates of the place where the segments intersect. The rest would be relatively simple, but I don't want to write your mod for you Psst! I'd suggest taking a look at NetTool.CreateNode for physically placing the new node and segments. Happy modding, I'm excited to see what you make!
  14. I'm not quite sure how to programmatically detect when specific networks should be "hidden" or not; else, I would have already included a checkbox that enables "dev mode" so that normal people won't have access to these offending prefabs. On the other hand, I would hate to not be able to select MoM tracks anymore, because they're technically hidden too. If I can find a way to do that, I will make said update because I've already received a few very questionable bug reports on both mods. Ultimately I agree with AmiPolizeiFunk though. That's the caveat with using many mods: they introduce the probability of breaking your game that the vanilla game is specifically fine-tuned not to offer. If users refuse to live with the fact that one can very possibly break something when using an (in-some-cases-advanced) mod in an advanced or unintended fashion, then they should probably go back to the vanilla game or use mods that don't offer said experience. Anyway, as for Network Skins compatibility, I too would be interested in that; I suppose I misunderstood how it worked internally (although I didn't take a look at the source so I didn't really educate myself well enough). I'll take a look at it soon and hopefully make an update of some sort (I really need to figure out making the icon draggable anyway).
  15. Yeah, that's more or less what I have now: public NetInfo FindDefaultElevation(NetInfo info){ for (uint i = 0; i < PrefabCollection<NetInfo>.LoadedCount(); i++) { NetInfo prefab = PrefabCollection<NetInfo>.GetLoaded(i); if((AssetEditorRoadUtils.TryGetBridge(prefab) != null && AssetEditorRoadUtils.TryGetBridge(prefab).name == info.name) || (AssetEditorRoadUtils.TryGetElevated(prefab) != null && AssetEditorRoadUtils.TryGetElevated(prefab).name == info.name) || (AssetEditorRoadUtils.TryGetSlope(prefab) != null && AssetEditorRoadUtils.TryGetSlope(prefab).name == info.name) || (AssetEditorRoadUtils.TryGetTunnel(prefab) != null && AssetEditorRoadUtils.TryGetTunnel(prefab).name == info.name) ){ return prefab; } } return info; } Additionally, I didn't get the promotional pictures done in time to release in 40 minutes and I'm honestly super tired from some other work, so I'll have to do them tomorrow (or later today depending on where one may live), and I'll release it later. Also, happy 2019. On an unrelated note, I've discovered a weird quirk when loading external .dll libraries alongside mod executables: if you return to the main menu and turn off a mod that uses the same external .dll library in a different place, the library is turned off for the other mods too. I got super confused when I saw the no-icons fallback version of the mod on my screen after reloading. January 1 edit: I can't upload anything to the Steam workshop. Whenever I try to upload, the workshop makes 30 blank and permanently hidden assets on my profile. I looked up the issue to see if anyone else had it, and other people do. I'm not really sure how to fix this, as I tried uploading it manually through the ModTools console and still came up with blank assets. Rats!
  16. Well, I had figured that since Move It had a copy and paste feature, other thing-pickers wouldn’t really be necessary. That being said, I figure it wouldn’t be that hard to make another part of this mod, and as I’ve already stolen one of your ideas I see no reason why I can’t steal more...
  17. Yes; at this point I have the following code to turn those segments back to the default elevation after searching and failing to find a built-in method that does it: string correctedName = m_netInfo.name .Replace("Elevated", "") .Replace("Bridge", "") .Replace("Tunnel", "") .Replace("Slope", ""); NetInfo correctedInfo = PrefabCollection<NetInfo>.FindLoaded(correctedName); if (correctedInfo == null) return; m_netInfo = correctedInfo; m_netTool.Prefab = m_netInfo; The only thing that is currently bothering me is 1) incorrectly named elevations of modded roads and 2) metro tunnels. I really wish there were a simple hook to find the default for any given NetInfo, but I can't seem to figure out how the game does it in NetTool. I'm currently looking through NetAI to find something like it as it has some promising functions (as well as going through ElectricityManager for that other project). Phone edit: I think it’s in RoadAI. I can check the current NetInfo against each of the prefabs there and then choose the default accordingly. I’ll look some more (and make sure that I have it totally figured out) when I have ILSpy at home and not just text files on my phone. Phone Edit #2: I was at home for a brief second and had a chance to assure that what I think I saw exists. It turns out that there’s a simple hook to get every elevation for nets except the default one, so I’ve reverse engineered that function and hopefully gotten what I think will be the default elevation, although I did not have time to test it.
  18. Net Picker Mod! Since I have half a trillion subscribed roads and it takes forever to scroll to them in my browser I'm once again making a simple mod to facilitate my laziness. I can't really take credit for the idea though; it was spoken of in passing by AmiPolizeiFunk, so... thanks, I stole your idea :). This mod is basically a color picker, but instead of colors, you can pick net types. (You can click on a road to select its type and then use it.) Here's me using it in REALLY REALLY LOW RES (be warned!) (The game looks awful because I'm on my modding computer and I don't have any graphical mods installed.) This is a very simple mod and it took less than two days of off-and-on writing, testing, and bugfixing to finish; I'm actually surprised it's not in the base game already. The UI integrates with Segment Slope Smoother's panel and if Segment Slope Smoother is not subscribed then it creates its own. Hooray for compatibility! I plan on releasing it at midnight on January 1st so that it's the first mod of the year (at least in my time zone). Speaking of SSS, it received a bugfix; I was unaware that the Default Tool had to be re-enabled if another custom tool is used... you would think that it would be obvious to me, but apparently not.
  19. Thanks boformer, that worked wonderfully! I now happily have custom icons. I worked on it and played with it a bit more today and I'm happy to say I have released it.
  20. I will repeat: @i509VCB Sorry, I had finals and other personal obligations that caused me not to be able to respond in a timely manner, so I apologize if you're still confused. You can already do this using manual mode. Hit the first two buttons in manual mode, then go to the Render tab (has a camera on it), scroll to the bottom, and change xRes and yRes (which should be 16384 and 16384) to whatever resolution you want before you bake. Then you can go through the rest of the Manual buttons sequentially or do the process manually from there. As for automatic UV stacking, that would require me to write my own UV unwrapping algorithm which I would rather not have to bother with as Blender's algorithm is already quite complicated as it is. However, I will do some cursory research on UV automation for Blender and if it's possible I might make a project on it. Heck, I'm on break, I really don't have much better things to do anyway. One thing that I will most certainly be implementing in the near future is an automatic mesh splitter by texture. Basically, if a material that was applied in Sketchup has suffix _rotors then unwrapping and baking will be applied separately and all rotors sections will become their own mesh so that a submesh can be created so that we can get working windows. That's a longwinded way of saying that I'm attempting to add rotors and additive shader support in a straightforward manner. I should have a POC up hopefully at the end of the day. Maybe.
  21. Unless this has changed since the last time I researched it, 3ds Max is not free for non-students or educators, which is why I don't really consider it a long-term viable solution even though it is certainly a valid way to port assets and its UV unwrapping algorithm is far better than that of Blender. I will most certainly not be paying upwards of $200/month for it after I get my degree as that's not really a price that I can afford in the foreseeable future and I suspect that unless it's a major priority many others won't be subscribing to it either if they're on a tight budget. That's why I used Blender here— not only is it easier to automate with short Python scripts (bringing users nearer to a one-click solution), but it is also free for everyone. The application itself is also much smaller (I believe it's a difference of several GB last update of 3ds Max?) and for users with limited file space, it's also important to budget that. However, I may be wrong; I haven't used 3ds Max in quite some time, having preferred Blender immensely for versatility and extendability (and load time on my computer ). I respectfully disagree; forcing users to believe that for some reason or another Blender/3ds Max and an ultimate standard of perfection are necessary for any "legitimate" asset creation is not only discouraging, but has, I personally believe, created the large divide in quality that is evident on the Steam workshop, so I feel that the current method isn't necessarily the right way to start either. This high quality abundant throughout the community is preferable, yes; but it's not necessarily easy for new creators without much/any knowledge of 3D modelling+texturing to be acclimated to the community. Not that I have ever been disappointed by the incredible quality of the workshop, or that I think there are no newcomers to the community whatsoever who are skilled at modeling and texturing, or that I think newcomers should be pandered to, or that I think publishing this tutorial will solve the issue, or that I think learning Blender or a related tool is that hard. I just think it's an entirely artificial divide that is unnecessary in a game modding community. For job applications and work, sure, but this is a community for hobbyists modding an individual game that we play for fun. If someone publishes an item to the workshop that any individual feels is not to their standard of quality, I see no reason why they can't simply dislike the asset or not subscribe to/follow the person. I don't wish to cause any animosity or argument, and I don't wish to sound arrogant or demeaning in any way; I just would like to explain my position here. Would you like me to update the tutorial with a disclaimer as to what cannot and should not be made in Sketchup? That may offer a solution that everyone is fine with. @i509VCB: I currently create illumination and specular maps by setting all windows to an absolutely ridiculously colored texture (like hot pink or in the below gif light blue) that is close to a solid color that I can easily spot in generated maps. Since the faces with said texture stand out so well, I can either manually select them or select by color and fill those areas with white (window). That will make a specular map for many purposes. The texture will be overridden by the window texture anyway. Then it's just a matter of filling each window with greyscale colors for the illumination map or creating a textured illumination map if you know your textured map well. Generating normal maps, specular maps, or illumination maps using baking requires a bit more knowledge of Blender than I assume potential users of the plugin have. Textures in Sketchup only have diffuse components so you would need to generate each other component manually or using image editing and then apply them to each respective material. Not that it's impossible to automate in some circumstances, but I didn't really think it was necessary or viable. Edit: The reason why you were unable to see the textures in the Blender window is because you were very likely still in Material display mode. Change this option at the bottom of the 3D view:
  22. I completely agree with you, 4K is entirely unacceptable for well-mapped assets and suggests that your model needs to be better optimized. Since writing that part of the tutorial, I've changed the method in which I scale down textures and after having recently tested it again I can confirm that the difference between 4K and 2K is negligible and frankly unnecessary for most models. I will be updating the tutorial accordingly. The reason why I used 4K to begin with was because at the time of writing that part (back in November), I was using a very bad downscaling algorithm and/or was baking the textures directly to 2K (producing worse results). I updated part of it when I started baking to 16K and scaling down, but forgot to update the final res, I suppose. Blender's UV map generation doesn't produce well-optimized maps, so I can say with definite certainty that 99% of the time going under 2048x1024 is going to look ugly for most buildings unless you're UV mapping by hand (which is possible but not recommended for Sketchup). It's also fair to note that if optimization is what you're going for, it's a lot better to do things traditionally and by hand. I wouldn't recommend Sketchup for anything other than creating scale buildings or whatever happens to be in your imagination. It's versatile and easy to use, but it's certainly not an industry-grade 3D modeling application. If you're doing anything else (road modding, tree making, etc) it's better to use Blender or 3DS Max. This tutorial is called "the easiest way" for a reason, and me writing it was much less "let's ruin the C:SL workshop by introducing bloated and awful assets stolen from the 3D Warehouse" and much more "wow, I finally finished a way for people not skilled at 3d modeling or texturing to make what they want for C:SL". I hope that this will promote the second, and not the first.
  23. Hello @muska, I just released a tutorial here on porting Sketchup models with their textures to Cities: Skylines so you may still be able to use that model. It looks wonderful, I wish you luck!
×