[WIP] Planet Generator Tool
Moderators: Moderators for English X Forum, Scripting / Modding Moderators
[WIP] Planet Generator Tool
X4 has a great shader system for planets that allows very easy randomization, and I finally made a "procedural generator" for planets in XSLT (with a bit of Python for tiny mesh edits). This is in very early stages and will do much more over time, such as create atmospheres, aurora, hopefully orbits, and so on. I thought some folks here might like to see this as well, so here is a quick showcase of some new planets!
https://www.youtube.com/watch?v=8ZdlOQbYVyM
https://www.youtube.com/watch?v=8ZdlOQbYVyM
Care to see what I've been creating? https://www.youtube.com/user/ytubrute
Re: [WIP] Planet Generator Tool
nice. i was re-watching your old videos, particularly this planetary atmosphere flight:
https://www.youtube.com/watch?v=PJrGCLmrjtM
and it got me thinking.
how close to planets can we build stations?
can we build stations in a planet's atmosphere?
i've not done any of the new terraforming missions, so i don't know if that allows us to build stations in a planet's atmosphere.
https://www.youtube.com/watch?v=PJrGCLmrjtM
and it got me thinking.
how close to planets can we build stations?
can we build stations in a planet's atmosphere?
i've not done any of the new terraforming missions, so i don't know if that allows us to build stations in a planet's atmosphere.
Mods: RPG: Reputations and Professions, Social Standings and Citizenships, Crime has Consequences, Alternatives to Death. Missions/NPCs: Emergent Missions, NPC Reactions, Mod Parts Trader, High-sec Rooms are Locked, Hacking Outcomes, More Generic Missions, Waypoint Fields for Deployment. Others: Auto-cam, Friendly Fire Tweaks, Teleport From Transporter Room, Wear and Tear. QoL: Trade Analytics, Loot Mining, Ship Scanner, Signal Leak Hunter, Station Scanner, Surface Element Targeting, etc.
Re: [WIP] Planet Generator Tool
Well I believe the default parameters make any ship explode if that close to a X4 planet. It can be done with a simple mod, and collision mesh changes may also do the trick (but that's much harder if modding anyways). It was done in XR very close to the "surface" because that surface is "fake"--not the actual planet but an extra part on top. I'm sure we can do without that these days so long as that level of detail isn't expected. I don't think any terraforming missions allow atmospheric stations, but we really need them!kuertee wrote: ↑Thu, 21. Oct 21, 04:13nice. i was re-watching your old videos, particularly this planetary atmosphere flight:
https://www.youtube.com/watch?v=PJrGCLmrjtM
and it got me thinking.
how close to planets can we build stations?
can we build stations in a planet's atmosphere?
i've not done any of the new terraforming missions, so i don't know if that allows us to build stations in a planet's atmosphere.
Care to see what I've been creating? https://www.youtube.com/user/ytubrute
-
- Posts: 89
- Joined: Tue, 11. Feb 20, 18:56
Re: [WIP] Planet Generator Tool
Impressive as always !
I'm really curious to where it could lead.
I read that it's a bit of python but is it mostly XML for the rest ?
Is it quite like creating new sectors ?
I'm really curious to where it could lead.
I read that it's a bit of python but is it mostly XML for the rest ?
Is it quite like creating new sectors ?
Re: [WIP] Planet Generator Tool
Thanks! Yeah honestly the Python part is just for preparing the meshes (doing binary edits to replace material references, which cannot be changed in the XML). It is almost entirely done with XSLT for major speed, which is essentially XML with for-loops and other powerful generation/editing abilities. Check my tiny mod here for a very simple example: https://www.nexusmods.com/xrebirth/mods/550Mystershow wrote: ↑Thu, 21. Oct 21, 21:19Impressive as always !
I'm really curious to where it could lead.
I read that it's a bit of python but is it mostly XML for the rest ?
Is it quite like creating new sectors ?
Generating these planets now is even easier than creating sectors (which I also automate with XSLT). Once the material refs in the meshes are ready, all you must do is randomize the planet material within proper limits. Then of course you need to place the planet, which is normally done in the Cluster_ component file. Make sense? All this could be done manually, of course, but that would take far, far longer.
This could lead to a lot. I just got orbits working, but those are much harder to change. Let me know if you have specific ideas. First I expect to prepare it for use on this tool's output, but it could be used to auto-generate new planets in existing sectors, etc. https://github.com/Celludriel/X4_Univer ... tion_Tool/
Care to see what I've been creating? https://www.youtube.com/user/ytubrute
-
- Posts: 89
- Joined: Tue, 11. Feb 20, 18:56
Re: [WIP] Planet Generator Tool
I see, I've took a look at the files from "XPANed Sectors Advanced" mod because I've wanted to create my own sector.
I wanted to remove some gas clouds ans add some shooting star (like in Rhys's Defiance).
I've specially wanted to create a feeling I had back in X3 on the way to Kingdom End.
Sectors fill with pirates and really oppressive, leading to a dark and quiet sector with a few boron station and ending in Kingdom End. It was such a relief to be there after all that.
Editing files isn't that much work, I've redone some mods to my taste (Recruitment Service Extended for example), but to understand what each line means and what they do or look like in game is.
Glad to know it can be done easier an quickier ^^
I really like the environnment in X:R, it was really immersive, I remember seeing a video about someone editing the highway path by xml to make it like in X:R.
For orbit, Radiant Heaven was really nice and a change from space.
For ideas, I'll think about it, there are certainly some really nice possibility like having multiple moons around a planet
I wanted to remove some gas clouds ans add some shooting star (like in Rhys's Defiance).
I've specially wanted to create a feeling I had back in X3 on the way to Kingdom End.
Sectors fill with pirates and really oppressive, leading to a dark and quiet sector with a few boron station and ending in Kingdom End. It was such a relief to be there after all that.
Editing files isn't that much work, I've redone some mods to my taste (Recruitment Service Extended for example), but to understand what each line means and what they do or look like in game is.
Glad to know it can be done easier an quickier ^^
I really like the environnment in X:R, it was really immersive, I remember seeing a video about someone editing the highway path by xml to make it like in X:R.
For orbit, Radiant Heaven was really nice and a change from space.
For ideas, I'll think about it, there are certainly some really nice possibility like having multiple moons around a planet
Re: [WIP] Planet Generator Tool
I am very interested in your work. I edited many planets in my mod but it was a terribly long work of trial and error. Despite the engine's huge potential I am quite disappointed by how the vanilla planets look and how the systems are made, a step back from Rebirth (which was ok despite at a very small scale). I stopped my modding because of how long it takes to manually edit the xml. Was waiting for when EGO releases some tool as a planet editor or a galaxy editor. Hope I can use your editor before.
Re: [WIP] Planet Generator Tool
Great--I recognize your name! I am still working on this and will likely port to a blender addon in python. Does that sound easily usable to you? You wouldn't need blender or python experience, although I suspect you have it! XSLT is the best for XML-focused work, but it's not nearly as good as python for randomization, and with python I can just create an addon that's a button click for users.Realspace wrote: ↑Fri, 5. Nov 21, 12:38I am very interested in your work. I edited many planets in my mod but it was a terribly long work of trial and error. Despite the engine's huge potential I am quite disappointed by how the vanilla planets look and how the systems are made, a step back from Rebirth (which was ok despite at a very small scale). I stopped my modding because of how long it takes to manually edit the xml. Was waiting for when EGO releases some tool as a planet editor or a galaxy editor. Hope I can use your editor before.
Egosoft is working on official tools, but I'm not sure they'll make anything quite like this tool. This is for outputting any number of planets with random looks (the planet shader system in X4 makes generating these so much easier) and placing them in a cluster, possibly with orbits if I finish my limited animation generator! This does sound quite handy for saving you lots of time.
Care to see what I've been creating? https://www.youtube.com/user/ytubrute
-
- Posts: 89
- Joined: Tue, 11. Feb 20, 18:56
Re: [WIP] Planet Generator Tool
So much potential from this thread
Re: [WIP] Planet Generator Tool
I’ll post separately about this when I can, but I just made a new animation from scratch in blender and my new scripts worked to export it to the game. Kind of a big deal.
Care to see what I've been creating? https://www.youtube.com/user/ytubrute
Re: [WIP] Planet Generator Tool
wow! congrats! have been scanning through your discord conversations. even if i understood only 0.5% of them, i knew you guys were doing something special.
Mods: RPG: Reputations and Professions, Social Standings and Citizenships, Crime has Consequences, Alternatives to Death. Missions/NPCs: Emergent Missions, NPC Reactions, Mod Parts Trader, High-sec Rooms are Locked, Hacking Outcomes, More Generic Missions, Waypoint Fields for Deployment. Others: Auto-cam, Friendly Fire Tweaks, Teleport From Transporter Room, Wear and Tear. QoL: Trade Analytics, Loot Mining, Ship Scanner, Signal Leak Hunter, Station Scanner, Surface Element Targeting, etc.
Re: [WIP] Planet Generator Tool
we need a good step-by-step guide for those of us who are bad with python and other stuff like that
congrats in finally breaking this thing, can be a big push for mods with proper tutorial
Re: [WIP] Planet Generator Tool
Just let me know some ways you want to use it and I will explain. I may split up the few buttons a bit more also. The last two are the ones to press, in order, if you just want to test exporting a blender animation to ani. I assume you’ll already have the part name set as appropriate—that gets added to the output. Then the output is put in your target folder with a generic name for now.
Care to see what I've been creating? https://www.youtube.com/user/ytubrute
Re: [WIP] Planet Generator Tool
Wow, that would be great. I've started modding again after 5.0 is out. I love this game but again the simulation aspect is so UNIMMERSIVE. I've almost completed a better ship's behaviour, more inertia and less "instant" accelerations. But planets remain very disappointing. Firstly in their aspect, they are a step back from my modded X3 FL. The way they are generated is good but the engine lacks another layer to look ok, it uses normal maps to create the details. You definetly feel they are fake, just by look. I could achieve better illlusion of planets in X3 by just using overlayed mapped diff textures. Editing sectors is another thing I am doing and have seen f.i. in Jupiter there are orbiting moons. There was a similar example in Rebirth's omicron lyra, but it was only one or two moons not all. Orbiting planets would be a great additional illusion.tomchk wrote: ↑Fri, 5. Nov 21, 17:10Great--I recognize your name! I am still working on this and will likely port to a blender addon in python. Does that sound easily usable to you? You wouldn't need blender or python experience, although I suspect you have it! XSLT is the best for XML-focused work, but it's not nearly as good as python for randomization, and with python I can just create an addon that's a button click for users.Realspace wrote: ↑Fri, 5. Nov 21, 12:38I am very interested in your work. I edited many planets in my mod but it was a terribly long work of trial and error. Despite the engine's huge potential I am quite disappointed by how the vanilla planets look and how the systems are made, a step back from Rebirth (which was ok despite at a very small scale). I stopped my modding because of how long it takes to manually edit the xml. Was waiting for when EGO releases some tool as a planet editor or a galaxy editor. Hope I can use your editor before.
Egosoft is working on official tools, but I'm not sure they'll make anything quite like this tool. This is for outputting any number of planets with random looks (the planet shader system in X4 makes generating these so much easier) and placing them in a cluster, possibly with orbits if I finish my limited animation generator! This does sound quite handy for saving you lots of time.
The question...can I use the tool to only look planets in Blender and edit them? I have to load the game after each modification I do, this is terribly... terribly time consuming
Re: [WIP] Planet Generator Tool
Good question. You can definitely load clusters with planets in Blender, but I don't recall if all the textures work correctly. I think so, as they do work for ships. I haven't ported over the actual generation of planets to Blender/python yet, but I believe my addon does already let you generate orbits for anything already in a cluster. The relevant code there is at https://github.com/tomchk/X4_gen_region ... cluster.pyRealspace wrote: ↑Wed, 16. Mar 22, 16:48Wow, that would be great. I've started modding again after 5.0 is out. I love this game but again the simulation aspect is so UNIMMERSIVE. I've almost completed a better ship's behaviour, more inertia and less "instant" accelerations. But planets remain very disappointing. Firstly in their aspect, they are a step back from my modded X3 FL. The way they are generated is good but the engine lacks another layer to look ok, it uses normal maps to create the details. You definetly feel they are fake, just by look. I could achieve better illlusion of planets in X3 by just using overlayed mapped diff textures. Editing sectors is another thing I am doing and have seen f.i. in Jupiter there are orbiting moons. There was a similar example in Rebirth's omicron lyra, but it was only one or two moons not all. Orbiting planets would be a great additional illusion.tomchk wrote: ↑Fri, 5. Nov 21, 17:10Great--I recognize your name! I am still working on this and will likely port to a blender addon in python. Does that sound easily usable to you? You wouldn't need blender or python experience, although I suspect you have it! XSLT is the best for XML-focused work, but it's not nearly as good as python for randomization, and with python I can just create an addon that's a button click for users.Realspace wrote: ↑Fri, 5. Nov 21, 12:38I am very interested in your work. I edited many planets in my mod but it was a terribly long work of trial and error. Despite the engine's huge potential I am quite disappointed by how the vanilla planets look and how the systems are made, a step back from Rebirth (which was ok despite at a very small scale). I stopped my modding because of how long it takes to manually edit the xml. Was waiting for when EGO releases some tool as a planet editor or a galaxy editor. Hope I can use your editor before.
The question...can I use the tool to only look planets in Blender and edit them? I have to load the game after each modification I do, this is terribly... terribly time consuming
https://github.com/tomchk/X4_gen_regions
Once I port the planet generation, I think you could open its output in Blender. Let me know if you try what's there so far. The most important part of the XSLT for planet generation is this:
Code: Select all
<material name="{concat($thisPlanetSize,$thisPos)}"
shader="{$shaders/shader[random-number-generator($thisSeed)?permute(1 to count($shaders/shader))[min(($thisPos,count($shaders/shader)))]]}"
blendmode="NONE" preview="none">
<properties>
<property type="BitMap" name="diffuse_map" value="{($materialProperties/property[lower-case(@name)=lower-case('diffuse_map')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('diffuse_map')]))[$thisLoop]]}" />
<property type="BitMap" name="diffuse_detail_map" value="{($materialProperties/property[lower-case(@name)=lower-case('diffuse_detail_map')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('diffuse_detail_map')]))[$thisLoop]]}" />
<property type="Float" name="diffuse_detail_tiling" value="{($materialProperties/property[lower-case(@name)=lower-case('diffuse_detail_tiling')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('diffuse_detail_tiling')]))[$thisLoop]]}"/>
<property type="Float" name="diffuse_detail_tiling_v" value="{($materialProperties/property[lower-case(@name)=lower-case('diffuse_detail_tiling_v')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('diffuse_detail_tiling_v')]))[$thisLoop]]}"/>
<property type="Float" name="diffuse_detailStr" value="{($materialProperties/property[lower-case(@name)=lower-case('diffuse_detailStr')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('diffuse_detailStr')]))[$thisLoop]]}" />
<property type="Float" name="diffuseStr" value="{($materialProperties/property[lower-case(@name)=lower-case('diffuseStr')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('diffuseStr')]))[$thisLoop]]}" />
<property type="Float" name="DiffOffsetU" value="{($materialProperties/property[lower-case(@name)=lower-case('DiffOffsetU')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('DiffOffsetU')]))[$thisLoop]]}" />
<xsl:copy-of select="($materialProperties/property[lower-case(@name)=lower-case('color_emissive')])[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('color_emissive')]))[$thisLoop]]"/>
<property type="Float" name="AnisoX" value="{($materialProperties/property[lower-case(@name)=lower-case('AnisoX')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('AnisoX')]))[$thisLoop]]}" />
<property type="Float" name="AnisoY" value="{($materialProperties/property[lower-case(@name)=lower-case('AnisoY')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('AnisoY')]))[$thisLoop]]}" />
<property type="BitMap" name="polar_map" value="{($materialProperties/property[lower-case(@name)=lower-case('polar_map')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('polar_map')]))[$thisLoop]]}" />
<xsl:copy-of select="($materialProperties/property[lower-case(@name)=lower-case('color_water')])[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('color_water')]))[$thisLoop]]"/>
<property type="BitMap" name="color_height_map" value="{($materialProperties/property[lower-case(@name)=lower-case('color_height_map')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('color_height_map')]))[$thisLoop]]}" />
<property type="Float" name="color_heightStr" value="{($materialProperties/property[lower-case(@name)=lower-case('color_heightStr')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('color_heightStr')]))[$thisLoop]]}" />
<property type="BitMap" name="color_climate_map" value="{($materialProperties/property[lower-case(@name)=lower-case('color_climate_map')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('color_climate_map')]))[$thisLoop]]}" />
<property type="Float" name="color_climateStr" value="{($materialProperties/property[lower-case(@name)=lower-case('color_climateStr')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('color_climateStr')]))[$thisLoop]]}" />
<property type="BitMap" name="citymap_map" value="{($materialProperties/property[lower-case(@name)=lower-case('citymap_map')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('citymap_map')]))[$thisLoop]]}" />
<property type="Float" name="citymapStr" value="{($materialProperties/property[lower-case(@name)=lower-case('citymapStr')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('citymapStr')]))[$thisLoop]]}" />
<property type="BitMap" name="color_glow_map" value="{($materialProperties/property[lower-case(@name)=lower-case('color_glow_map')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('color_glow_map')]))[$thisLoop]]}" />
<property type="Float" name="citymap_tiling" value="{($materialProperties/property[lower-case(@name)=lower-case('citymap_tiling')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('citymap_tiling')]))[$thisLoop]]}" />
<property type="Float" name="citymap_tiling_v" value="{($materialProperties/property[lower-case(@name)=lower-case('citymap_tiling_v')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('citymap_tiling_v')]))[$thisLoop]]}" />
<property type="Float" name="citymapStr" value="{($materialProperties/property[lower-case(@name)=lower-case('citymapStr')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('citymapStr')]))[$thisLoop]]}" />
<property type="Float" name="citylevel" value="{($materialProperties/property[lower-case(@name)=lower-case('citylevel')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('citylevel')]))[$thisLoop]]}" />
<property type="Float" name="color_glowStr" value="{($materialProperties/property[lower-case(@name)=lower-case('color_glowStr')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('color_glowStr')]))[$thisLoop]]}" />
<property type="BitMap" name="normal_map" value="{($materialProperties/property[lower-case(@name)=lower-case('normal_map')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('normal_map')]))[$thisLoop]]}" />
<property type="Float" name="normalStr" value="{($materialProperties/property[lower-case(@name)=lower-case('normalStr')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('normalStr')]))[$thisLoop]]}" />
<property type="BitMap" name="normal_detail_map" value="{($materialProperties/property[lower-case(@name)=lower-case('normal_detail_map')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('normal_detail_map')]))[$thisLoop]]}" />
<property type="Float" name="normal_detail_tiling" value="{($materialProperties/property[lower-case(@name)=lower-case('normal_detail_tiling')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('normal_detail_tiling')]))[$thisLoop]]}" />
<property type="Float" name="normal_detail_tiling_v" value="{($materialProperties/property[lower-case(@name)=lower-case('normal_detail_tiling_v')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('normal_detail_tiling_v')]))[$thisLoop]]}" />
<property type="Float" name="normal_detailStr" value="{($materialProperties/property[lower-case(@name)=lower-case('normal_detailStr')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('normal_detailStr')]))[$thisLoop]]}" />
<xsl:copy-of select="$thisLoopValues/property"/>
<!-- <property type="Float" name="fOuterRadius" value="{($materialProperties/property[lower-case(@name)=lower-case('fOuterRadius')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('fOuterRadius')]))[$thisLoop]]}" />
<property type="Float" name="fInnerRadius" value="{($materialProperties/property[lower-case(@name)=lower-case('fInnerRadius')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('fInnerRadius')]))[$thisLoop]]}" /> -->
<property type="Float" name="PolarScale" value="{($materialProperties/property[lower-case(@name)=lower-case('PolarScale')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('PolarScale')]))[$thisLoop]]}" />
<property type="Float" name="waterlevel" value="{($materialProperties/property[lower-case(@name)=lower-case('waterlevel')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('waterlevel')]))[$thisLoop]]}" />
<property type="Float" name="fdensity" value="{($materialProperties/property[lower-case(@name)=lower-case('fdensity')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('fdensity')]))[$thisLoop]]}" />
<property type="Float" name="m_ESun" value="{($materialProperties/property[lower-case(@name)=lower-case('m_ESun')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('m_ESun')]))[$thisLoop]]}" />
<xsl:copy-of select="($materialProperties/property[lower-case(@name)=lower-case('color_atmo')])[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('color_atmo')]))[$thisLoop]]"/>
<property type="Float" name="cloudcutoff" value="{($materialProperties/property[lower-case(@name)=lower-case('cloudcutoff')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('cloudcutoff')]))[$thisLoop]]}" />
<property type="Float" name="densecutoff" value="{($materialProperties/property[lower-case(@name)=lower-case('densecutoff')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('densecutoff')]))[$thisLoop]]}" />
<property type="BitMap" name="clouds_mask_map" value="{($materialProperties/property[lower-case(@name)=lower-case('clouds_mask_map')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('clouds_mask_map')]))[$thisLoop]]}" />
<property type="Float" name="clouds_maskStr" value="{($materialProperties/property[lower-case(@name)=lower-case('clouds_maskStr')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('clouds_maskStr')]))[$thisLoop]]}" />
<property type="BitMap" name="clouds_detail_mask_map" value="{($materialProperties/property[lower-case(@name)=lower-case('clouds_detail_mask_map')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('clouds_detail_mask_map')]))[$thisLoop]]}" />
<property type="Float" name="clouds_detail_mask_tiling" value="{($materialProperties/property[lower-case(@name)=lower-case('clouds_detail_mask_tiling')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('clouds_detail_mask_tiling')]))[$thisLoop]]}" />
<property type="Float" name="clouds_detail_mask_tiling_v" value="{($materialProperties/property[lower-case(@name)=lower-case('clouds_detail_mask_tiling_v')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('clouds_detail_mask_tiling_v')]))[$thisLoop]]}" />
<property type="Float" name="clouds_detail_maskStr" value="{($materialProperties/property[lower-case(@name)=lower-case('clouds_detail_maskStr')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('clouds_detail_maskStr')]))[$thisLoop]]}" />
<property type="BitMap" name="cloudmap_map" value="{($materialProperties/property[lower-case(@name)=lower-case('cloudmap_map')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('cloudmap_map')]))[$thisLoop]]}" />
<property type="BitMap" name="densecloudmap_map" value="{($materialProperties/property[lower-case(@name)=lower-case('densecloudmap_map')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('densecloudmap_map')]))[$thisLoop]]}" />
<property type="Float" name="base_contrast_shift" value="{($materialProperties/property[lower-case(@name)=lower-case('base_contrast_shift')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('base_contrast_shift')]))[$thisLoop]]}" />
<property type="Float" name="base_saturation_shift" value="{($materialProperties/property[lower-case(@name)=lower-case('base_saturation_shift')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('base_saturation_shift')]))[$thisLoop]]}" />
<property type="Float" name="base_brightness_shift" value="{($materialProperties/property[lower-case(@name)=lower-case('base_brightness_shift')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('base_brightness_shift')]))[$thisLoop]]}" />
<property type="Float" name="base_hue_shift" value="{($materialProperties/property[lower-case(@name)=lower-case('base_hue_shift')]/@value)[random-number-generator($thisSeed)?permute(1 to count($materialProperties/property[lower-case(@name)=lower-case('base_hue_shift')]))[$thisLoop]]}" />
</properties>
<variations />
<areas />
</material>
Care to see what I've been creating? https://www.youtube.com/user/ytubrute