Adventures in learning Track Modding for AC:
As there seems to be no existing AC track for NJMP-Thunderbolt (though there is one for Lightning), I suppose I will have to write my own. Which means learning how to write tracks for AC. Which means looking at TONS of videos and other tutorials. After poking around quite a bit, I stumbled across a series of Most Excellent tutorials by LilSki, on how he uses high resolution elevation data (Lidar) to build a track. Certainly not the easiest way, but he produces superb tracks.
Unfortunately, LilSki has been doing this for a while, and his tutorial glosses over several points that are tricky for a newbie like me. Also, I sometimes like to have written instructions, instead of/in addition to video. So, I will document my learning experience here, for anyone else who may be interested.
The software tools to start off with are Blender (currently 2.91.0), CloudCompare 2.11.1, and some LAS files to work from. Both of these programs are open source, and can be downloaded for free from the Internet. The best source of LAS data I found is:
https://viewer.nationalmap.gov/basic/#/. Select "Elevation Source Data/Lidar Point Cloud", and zoom the map to the area of interest. Click "Search Products". I got a list of about 40 datafiles in the area of interest. As you move your mouse over each file, it will show you the covered area on the map. NJMP-T straddles 2 data areas, each of which was scanned once in 2008, and again in 2018. I downloaded the two "LAZ" files from 2018.
The data we will be working with consists of millions of points, each with a specific x,y,z position. We will be using CloudCompare (CC) to convert these points into a 3D mesh that Blender can work with. Eventually, Blender will produce the datafiles that the AC track editor needs to create a track.
Fire up CC, and load the 2 LAZ files. You can CTL-click each of them to load them both at the same time. You have to select "LAS File" in the lower R corner to see the files in the selection window. Once you click OK, you will get a Open LAS File dialog box. Just click Apply All. Next, you will get a Global Shift/Scale dialog. Again, click "Yes to all" without changing anything. It will take a bit for the data to be read in. Once it loads, you will see two lines for each data file in the "DB Tree" window at the upper left of the screen, one line for the compressed (LAZ) data, and a second line for the uncompressed data.
If your data is from more than one file (as mine was), the next task is to merge them into a single tile. CTL-click to select each of the "cloud" files (the uncompressed ones). On the toolbar is an icon for "Merge Multiple Clouds" (It is also under the Edit Menu). Click it. It will ask if you want to create a scalar field. Say NO. After a bit, the merge will finish, and there will be just 2 lines in the DB Tree. Now, go down to Properties, under the DB Tree pane, to the Scalar Fields' section, and set 'Active' to 'Intensity'. This should give you a gray-scale picture of your track and the surrounding area.
Select Edit|Edit global shift and scale. This will bring up the Global shift/scale dialog. Set all 3 "shift" coordinates to 0. Click YES.
Select Tools|Point Picking. Click on a spot in the middle of the track map. This will give a set of x,y,z coordinates for that point. If it asks about building an octree, say NO. Click the 'X' in the Upper Right corner to close the picker. Note that the x,y,z coordinates will be visible in the Console window at the bottom of the screen.
Select the cloud file again in the DB Tree window. Select Edit|Apply Transformation. In the dialog that opens, select the Axis,Angle tab. Check the "Apply inverse transformation" box. In the boxes on the Translation line, enter the x, y, and z values that were given by the point picker. You can just put in the integer amounts; you don't need multi-decimal place precision. Click OK.
If the viewport shifts a bit, no worries. Just put your cursor in the box, press-hold the R mouse button, and drag it back to the center.
Next, we are going to isolate the track itself. These data transformations are very CPU-intensive, and the less we need to do, the better. So, select the Segment icon from the ribbon at the top of the window. It's the one that looks like a little pair of scissors. You will get a set of new icons in the URH corner of the workspace. Select Polyline Selection, and click your way around the track. Right-click to finish. Click the "Segment In" icon (the red pentagram on the white background). The parts of the image outside the selected area will disappear. Click the green checkmark to confirm the selection. You should now have 2 clouds in the DB Tree: one for the selected part, and one for the surrounding stuff.
NOW we get to the point of all this: converting the point cloud into a mesh! Select the cloud for the track, select Edit|Mesh|Delaunay 2.5 (XY Plane). For the dialog Triangulate, accept 0 for the max edge length. Click OK. Wait for this step to complete. You should now have another new item under DB Tree: a cloud.segmented.mesh. Click on it. Select Edit|Scalar Fields|Convert to RGB. When it asks about mixing with existing colors, pick NO.
NOW it is time to start writing data files! Starting with our mesh, LilSki recommends saving it in FBX (binary) format. However, that option isn't available when I try to save. So, I save as STL file, instead. This means that "vertex colors will be lost". I have no idea what that means, but it doesn't sound fatal. Un-check the box next to the mesh, and check the box next to the parent. Right click, and select "Toggle visibility" to make it visible. Save this file in PLY (binary) format.
Finally, create a JPG image of the track. Select Display|Render to file. Turn the zoom factor up to 4 (or so), and save as JPG.
That is all for CloudCompare. You should now have 3 files: a 3-D mesh, the point cloud, and a JPG image, all of the same piece of real estate. These files will be imported into Blender to start making the actual track itself. Stay tuned!