• My idea for the far future

    A good vision.

    Early in my cultivation efforts I went to a tiled approach. I decided on 0.1x0.1 tiles. I created a utility that once I entered the center coordinates of a tile it spat out a set of bat files and power shell scripts to download the OSM file, download image file for tree autodetect, generate elevation contours, run scenProc, run osm2AFSobject, and deploy the results.

    I decided on the 0.1 degree tile size because it was more user friendly than the AFS hex tile convention for names and coordinates.

    When AeroScenery came out I contemplated switching to the AFS hex tile convention but have not gone there (yet). You really need a map driven interface to give usability and visibility of the cultivation state for hex tiles.

    Any cultivation integration framework needs to be highly adaptable. For example as I am flying if I see an annoying cultivation glitch, I use my Flight Path Recorder and Google Earth to determine exactly where in which cultivation tile the discrepancy lies. I can then update the OSM or configuration file as required and add that tile to the Cultivate_These_Tiles batch file to run later. In my experience cultivation is an iterative process that is never really done.

    Everybody has their own criteria on what "good enough" means. Or their own idea of what aspects of cultivation are important. For me trees are important. I use auto detect for trees to give a realistic sparse distribution at elevation and elevation contours to vary the tree species with elevation.

    But autogen buildings leave me cold. Orbx True Earth is a step in the right direction, but I an not ready yet to give up the rich variation of the ortho image roof textures for the handful of stock textures. Even in commercial DLC's I have replaced most of the ortho images with higher resolution.

    osm2AFSobject was developed because significant objects in the landscape are important to me, but again we need to work on the textures.

    So in summary, I agree that more automation of scenery development is a good thing , but the core technologies are not yet at the state that there is a one size fits all solution.

    A black box approach can only provide average results.

    /Stu

    i7-6700K CPU @ 4.00GHz | ASUS Z170-A | 16Gb DDR4 | Samsung SSD 950 PRO NVME M.2 256GB | Samsung SSD 850 EVO 1TB | GeForce GTX 1080 Ti on GP102-A GPU | Oculus CV1 | Windows 10

  • Yes, Stu you are right, one can put a lot of effort into a perfect cultivation.

    But then I think to myself: I am not ORBX which needs to earn money with it.

    However I am willing to put more efforts to locations that I know and love, then into others.

    Do you think such a small size of 0.1 deg (about 5km in Germany) is really needed?

    I found that a tile 10 (about 23 km) is still small enough to be loaded on the fly.

    Cheers, Thomas


  • The choice of 0.1 was more a question of convenience than anything else. A tile of 1.0 degree was too big and anything in between was awkward for specifying coordinates by hand. Other people seem to have selected the same size for much the same reasons.

    If there is support for cultivation from a map driven interface in the style of AeroScenery , then the awkward coordinates are not an issue. It comes down to optimal loading size. There have been discussions on optimal cultivation tile size for scenery load in other threads and I think the consensus is that for dense cultivation (particularly trees) smaller is better (even down to level 13). If the interface and cultivation modules are well integrated it should be irrelevant how many tiles are generated.

    On a related topic. Currently the [size] parameter is hard coded to 5000. I should probably expose that in the XML in case people do generate different tile sizes.

    /Stu

    i7-6700K CPU @ 4.00GHz | ASUS Z170-A | 16Gb DDR4 | Samsung SSD 950 PRO NVME M.2 256GB | Samsung SSD 850 EVO 1TB | GeForce GTX 1080 Ti on GP102-A GPU | Oculus CV1 | Windows 10

  • Released version 0.3

    Added concept of derived tags to extract additional OSM data in a form easily used for object model selection.

    i7-6700K CPU @ 4.00GHz | ASUS Z170-A | 16Gb DDR4 | Samsung SSD 950 PRO NVME M.2 256GB | Samsung SSD 850 EVO 1TB | GeForce GTX 1080 Ti on GP102-A GPU | Oculus CV1 | Windows 10

  • Thank you Stu for this update.

    What a nice variety of automated assigned possible model sizes!

    Am am still working to understand all your new commands / parameters.

    I will assign them to my own scripts and will report later about my tries.

    If someone prefers the manual in German, I'll attach it here ( .html and .md format).

  • Hello Stu,

    I played now quite a bit with version 0.3.

    Most of it is running very fine!

    I think I found a small bug:

    if the scenery is small and only contains ways, but no nodes, then I get this error message:

    #------------------------------------------------------------------------------------------

    # wayId=564837261 building:yes

    #------------------------------------------------------------------------------------------

    #------------------------------------------------------------------------------------------

    # wayId=595751587 building:yes

    #------------------------------------------------------------------------------------------

    No nodes detected within bounds. No tsc generated.

    The same happens, if nodes are within the OSM, but the XML does not request one.

    No tsc is generated then.


    I also tried to play with the derivedLenth parameter.

    I tried the test.OSM with a modified test.xml:

    I looked up the way lenghts of the 4 tanks in JOSM.

    They are 129, 98, 81, 56m.

    However none of the conditions triggered.

    Could you have a look please, what would be the correct parameters?

    I do all this in preparition when the building direction is implemented.

    I would like to see churches and houses to be replaced by real objects, not cultivation.

    With the derivedDiameter parameter I had partial success, but not deterministic:. That means I could not find out, why some houses triggered and others not.

    These are xref objects, converted into tmb by Phil for his FScloudPort project.

    So all airport objects are available this way.

    Cheers, Thomas


  • They are 129, 98, 81, 56m.

    Those raw length values would round to 130 100 80 60 assuming my length calculation agrees with JOSM.

    So the only valid map entry would be 130, but it should have detected that one at least.

    As you might of noticed there were no test cases for derivedLength since I did not think of a scenario.

    I'll have a look to if there is any issue

    i7-6700K CPU @ 4.00GHz | ASUS Z170-A | 16Gb DDR4 | Samsung SSD 950 PRO NVME M.2 256GB | Samsung SSD 850 EVO 1TB | GeForce GTX 1080 Ti on GP102-A GPU | Oculus CV1 | Windows 10

  • Released version 0.4

    Major change is rebranding as ObjectGen (had to sack the entire marketing department )

    - Added support for large OSM files. Allows bounding box override to be entered as argument to process subsections of OSM file.

    Optimization for large node list processing.

    - Added variability percentages for animation attributes to avoid "lock-step" effect on large groups of animated objects (ie wind farms)

    See readme and UserGuide


    ObjectGen

    i7-6700K CPU @ 4.00GHz | ASUS Z170-A | 16Gb DDR4 | Samsung SSD 950 PRO NVME M.2 256GB | Samsung SSD 850 EVO 1TB | GeForce GTX 1080 Ti on GP102-A GPU | Oculus CV1 | Windows 10

  • Sorry for the marketing people. Very expensive department.

    I would say the tool does not generate objects, it rather places them.

    Aerofly Object Placer

    Regards,

    Thomas

    i7-14700KF @ 5.6 GHz, Geforce RTX 4090, 32MB RAM, 1TB SSD M.2, 1TB SSD M.2, 2TB SSD M.2, 32" Monitor 4K, Pimax Crystal

  • Hi Stu,

    again a big step forward with the time scale variation in wind parks.

    Do I have to understand the Round parameter in the way, that i.e. waylength is devided by the round faktor?

    Then you compare the result against the mapEntry value?

    Also very nice, the 3D-Digits in the testfile.

    Can you tell me how you generated the digit models?

    by the way, these two are incidentially swapped:

    superb view:

    Cheers, Thomas


  • Do I have to understand the Round parameter in the way, that i.e. waylength is devided by the round faktor?

    Then you compare the result against the mapEntry value?

    For wayLength, Diameter (indirectly via wayLength) and roundedOSMtag the values are divided by the roundTo value, rounded to the nearest integer and multiplied by the roundTo value.

    PS: for me the test.bat only works, if the content is modified to:

    must be some Windows setting because it runs as shipped for me.

    Can you tell me how you generated the digit models?

    SketchUp has a 3DText menu/toolbar option. Enter text at origin, paint texture, scale, export as dae, run through modelconverterX to tgi, run through contentConverter to tmb, copy tmb to object library (they all use the same ttx), add entry to xml.

    Once I got into batch production mode they took about 15-20 seconds each.

    i7-6700K CPU @ 4.00GHz | ASUS Z170-A | 16Gb DDR4 | Samsung SSD 950 PRO NVME M.2 256GB | Samsung SSD 850 EVO 1TB | GeForce GTX 1080 Ti on GP102-A GPU | Oculus CV1 | Windows 10

  • Thanks Stu for the receipe!

    Is there maybe a bug in the derivedWayLenght calculation?

    When derivedWayLenght is the only selection, then the final multiplication with the RoundTo value does not seem to happen.

    In combination with derivedDiameter however it does. From the tst.tsc:

    Cheers, Thomas


  • PS: The only critical part in the example.xml file, which needs attention is this line:


    <relativePathPrefix>"..\..\..\..\objects\"</relativePathPrefix> (correct, if your objects folder is 4 folders higher in your directory tree then the tsc file.)


    <relativePathPrefix>"..\objects\"</relativePathPrefix> (if your objects folder is 1 folder higher in your directory tree.)


    <relativePathPrefix>"objects\"</relativePathPrefix> (if your objects folder is in the same folder as the tsc file)


    everything else can be left alone for the beginning.

    Very helpful clarification Tom!

  • Is there maybe a bug in the derivedWayLenght calculation?

    Eagle eyes.

    You are correct I missed a multiply after the round.

    In my haste to release I adjusted the test case rather than the code to get the expected result.

    In test case 0.3.1.1 the wayLength was correct so I incorrectly concluded that I set incorrect test criteria in 0.3.1.2.

    pushed a patch with the fix.

    i7-6700K CPU @ 4.00GHz | ASUS Z170-A | 16Gb DDR4 | Samsung SSD 950 PRO NVME M.2 256GB | Samsung SSD 850 EVO 1TB | GeForce GTX 1080 Ti on GP102-A GPU | Oculus CV1 | Windows 10

    Edited once, last by lenidcamper (March 17, 2019 at 1:00 PM).

  • Autogen Ships:

    The script looks for the key="seamark:type" value="distance_mark" to position a ship.

    I converted the ship models with a 50% ratio to run into the opposite direction.


    Storage Tank Script:

    Chimneys:

    Cheers, Thomas


    Edited 2 times, last by TomSimMuc (March 18, 2019 at 12:18 PM).

  • Autogen Ships:

    Tom

    I am impressed with what you have been able to do with ObjectGen !!

    You have pushed it a lot far than I ever expected (providing great beta testing along the way.)

    I guess I will have to hire you as my marketing department.;)

    /Stu

    i7-6700K CPU @ 4.00GHz | ASUS Z170-A | 16Gb DDR4 | Samsung SSD 950 PRO NVME M.2 256GB | Samsung SSD 850 EVO 1TB | GeForce GTX 1080 Ti on GP102-A GPU | Oculus CV1 | Windows 10

  • Stu, would your power pylon orientation algorithm also work for traffic signals?

    It looks like traffic signals are just Nodes but those Nodes are included in a street Way. Can your parser locate a Way that contains a traffic_signals Node and then calculate the heading of the Way to be used as a derived tag for the traffic_signals Node?

    Seems like it would need 2 levels of parsing, one to get all the traffic_signals Nodes, and a second to find those same nodes in street Ways.

  • Maybe an easier option would be to detect other nearby traffic_signals and use those additional nodes to determine orientation:

    4 signals in a group = 90 degrees difference for each one

    2 signals in a group = 180 degrees difference

    1 signal = default North-South