Author Topic: Merricksdad's Black Hills Tileset (First Look)  (Read 12260 times)

Legacy_Malagant

  • Sr. Member
  • ****
  • Posts: 391
  • Karma: +0/-0
Merricksdad's Black Hills Tileset (First Look)
« Reply #390 on: September 24, 2015, 07:09:29 am »


               

LoL... It's an old Bard's Tale III: The Thief of Fate reference (which can now be officially filed under the obscure descriptor, I suppose). I used to play this series religiously on an Apple IIc back in the day. I always called it the Neverwinter of my teens. In this particular entry, you have to travel to different themed domains in order to complete your quest. Lucencia was the sky / cloud themed domain.


After this lovely gem showed up years ago, I used to want to do something similar with this entry since BT2 was somewhat unrelated, story-wise. The sky tileset would have been perfect, but for the rainbow roads and stark blue buildings. I also never could find an adequate set for Malefia because I always saw it as a bit Far Realm.



               
               

               
            

Legacy_MerricksDad

  • Hero Member
  • *****
  • Posts: 2105
  • Karma: +0/-0
Merricksdad's Black Hills Tileset (First Look)
« Reply #391 on: September 24, 2015, 12:24:12 pm »


               

Yes that cloud tileset does look both horrifying and very interesting at the same time. It seems though that you could do a texture override hak, just replacing whatever draws the rainbow with another transparent white texture, and then doing the same with whatever makes the blue. I wonder if it would be just two or three textures.


               
               

               
            

Legacy_MerricksDad

  • Hero Member
  • *****
  • Posts: 2105
  • Karma: +0/-0
Merricksdad's Black Hills Tileset (First Look)
« Reply #392 on: September 24, 2015, 12:39:25 pm »


               

So far, the idea of non-similar heights has to stay in the realm of fantasy, or NOT use Sen's method, which severely reduces the tallest elevation you can achieve. I think I will throw that out the window. The only alternative I see is to make a half-height crosser which can be applied to single height changes, or to both single and double height changes. But that adds a strange task and a strange number of tile requirements.


 


So today, instead of messing with unimportant, I will be working on building a script to convert flat vertical faces on +3 and +4 elevation changes to weathered granite. I'll also be setting aside a kit of 16 - 32 shape changing boulders which are meant to fit near or on the edge of +2 elevation changes. In this processes, I need to use my scripts to detect face slope (which I wrote years ago), and that script automatically tells me which slopes I should have as walkable. I'll be modifying that so I can tell it what the maximum slope is for walkmesh grass.


 


I love automation.


 


I really enjoyed last night when I found out how easy it was to automate converting all +1 slopes to smooth inclines. Hopefully granite peaks go as easily. I still need to make a clone of that automation to work on the smooth slope into shallow waters, but that should be just a few lines.


 


Getting close now. If this stays this easy, I will be able to easily include a forested optional terrain for 0 thru +2 quite easily, just by duplicating the tiles and re-texturing the base mesh.


 


The script I have for tree placement takes a clone of the original base mesh, tessellates it 2x, then uses that more complex mesh to determine actual verts to place trees at. It is a very simple way of getting the actual height data of any random place on your mesh. Then it just picks from my tree collection and places a tree. Right now, instead of actually placing a tree, I will be simply adding specifically named dummy nodes, as something like treeA_##, treeB_##, and other identifiers like rubble, shrub, grass, etc. This lets me define the set of bio mass later, and use my other scripts to fill in the blocks later. All I have to do is parent the tree to the dummy and copy the dummy's position/rotation data to the tree.


 


The benefit of doing trees this way is that if large trees are placed (because I don't walkmesh out small volume trees), I can just tessellate the placement region once or twice and then select the accurate region on the base mesh, setting its walkmesh value to nonwalk. Makes it really easy. Almost simple enough to automate.



               
               

               
            

Legacy_Tarot Redhand

  • Hero Member
  • *****
  • Posts: 4165
  • Karma: +0/-0
Merricksdad's Black Hills Tileset (First Look)
« Reply #393 on: September 24, 2015, 02:12:14 pm »


               

Getting close now. If this stays this easy

 


I sincerely hope this isn't a case of famous last words...


 


TR



               
               

               
            

Legacy_MerricksDad

  • Hero Member
  • *****
  • Posts: 2105
  • Karma: +0/-0
Merricksdad's Black Hills Tileset (First Look)
« Reply #394 on: September 24, 2015, 05:23:33 pm »


               

Having some success making granite placeables this morning. Trying to remember all the pwk order and naming. Taking me a bit to get used to again. One thing I notice is that if the pwk plane ends up being below any other walkmesh region, like the tile wok data, then the tile wok data takes over, and the whole pwk is ruined for that entire placeable. This could actually come in handy for something. Otherwise, I am having to set the pwk data higher than 0 so that when my objects get used on the corners of elevation changes they can actually function.


 


zpZ0zZi.png


 


About half of the placeables shown above actually function where placed. Some of them are too close together and cause pathing issues.



               
               

               
            

Legacy_NWN_baba yaga

  • Hero Member
  • *****
  • Posts: 1944
  • Karma: +0/-0
Merricksdad's Black Hills Tileset (First Look)
« Reply #395 on: September 24, 2015, 08:11:31 pm »


               

I realy like your hills there. Awesome stuff '<img'>



               
               

               
            

Legacy_MerricksDad

  • Hero Member
  • *****
  • Posts: 2105
  • Karma: +0/-0
Merricksdad's Black Hills Tileset (First Look)
« Reply #396 on: September 25, 2015, 12:48:58 pm »


               

Spent way too much time sitting down last night. With a second coffee, I ended up sitting still for 6 hours, and I got nearly nothing done in that time.


 


I took the script I had written to smooth the +1 hills, and converted it to a rounding script for +2 hills. That worked fine. Then I took that script and tried to make a random contouring script for +3 and +4 hills. Here's what it does:


 


  1. Selects faces with angle of ascent > 45 (code I wrote a few years ago called selectSteepFaces with threshold variable)

  2.    
  3. Tessellates the selected faces, increasing the polycount of only that region, without moving the edge verts off a plane (to keep adjacent tiles lining up)

  4.    
  5. Selects a random 3/4 of the faces previously tessellated

  6.    
  7. Extrude those faces locally 1m

  8.    
  9. Switch to selection of verts

  10.    
  11. Deselect all verts on outermost edges

  12.    
  13. Add some noise

  14.    
  15. Push out the faces a bit to make the noise more prominent

  16.    
  17. Tessellate those faces a bit more, taking off the edge

  18.    
  19. Switch back to the main mesh body

  20.    
  21. Relax the entirety quite a bit to soften the blocks, keeping the outermost edges fixed

  22.    
  23. Optimize heavily to reduce poly count

  24.    
  25. Smooth to a low face angle

  26.    
  27. Texture map

This works well if the randomly selected faces are adjacent without selecting only 2 which share a vertex. Otherwise, when any vertex is shared by only two selected faces, a mathematical mistake happens in the GMAX process between extrusion and the next tessellation, which separates that twice selected vertex into two. It seems to happen when noise is applied, but there is no evidence to support that, because when the verts are selected and counted in that region, they show the exact quantity of verts you see, not +1. Once the noise-tessellation combo are placed in the modifier stack, the twinning separates randomly, creating a fissure in the mesh surface. The later relaxing only widens the hole, tearing the mesh to pieces.


 


When I did the previous tiles by hand, I specifically chose clumps of adjacent faces, and without even knowing, had prevented this issue. If I go back into the modifier stack and fill in the missing faces on the randomly selected face mod, it corrects the problem 100%. So that means, what I need to do is create a script that, instead of picking randomly, picks adjacent faces to make sure any given vert is shared by at least two adjacent edges, meaning it gets only two or more faces which are adjacent at that vertex. I'll also have to check to make sure any vert with more than 8 shared faces does not have faces selected in two opposite quadrants from that center vert. That is going to be a whole page of math, I fear.


 


An alternative I dreamt last night was to select ALL faces used by a single vert. But even in that scenario, I still have to error check that any other vert elsewhere does not share a face with that selected poly region. Less math, but still pain.


 


While I was getting my coffee this morning, I thought up an idea to select individual groups, rather than a random X groups, and apply the other modifiers to each group separately. If I do that, I can loop it, without further math requirements.


 


I hope it works. If so, this tileset is basically done, minus tweaking the placeables PWK data. I still cannot get ALL placeables to function properly ALL the time. If I modify the PWK plane to rest 1m above the ground, more of them work, but also some that worked previously no longer work. I cannot find a happy medium. Another issue is that some of the placeables are so large (full tile-width) that they cross a tile edge. This is no big deal if they cross an edge where both sides are same-height. But if they cross a height offset boundary, the engine can no longer see any PWK data in that adjacent tile.


 


Basically I need some help, and ideas for the PWK stuff.


 


Another idea I was having was to make bubbly PWK data. I don't know how exactly that affects the tile WOK data, but I am willing to try. Given the z-placement of any placeable with PWK, does it change the area which cannot be traversed? Is only the above-ground region flagged non-walk? I must find out.



               
               

               
            

Legacy_T0r0

  • Sr. Member
  • ****
  • Posts: 380
  • Karma: +0/-0
Merricksdad's Black Hills Tileset (First Look)
« Reply #397 on: September 25, 2015, 02:04:41 pm »


               "The only alternative I see is to make a half-height crosser which can be applied to single height changes, or to both single and double height changes. But that adds a strange task and a strange number of tile requirements."


This is what happens in my project. My hill 0 is height 250, then next jump is 500 more. So hill 1 is 750. However you can put grass next to it (or 1 in from it) and it indents down back to 500 but it automatically places the reverse hill 0 from 750 to 500.   Just kinda worked out that way.  Still testing more for Ill effects. Probably nothing new.
               
               

               
            

Legacy_MerricksDad

  • Hero Member
  • *****
  • Posts: 2105
  • Karma: +0/-0
Merricksdad's Black Hills Tileset (First Look)
« Reply #398 on: September 25, 2015, 06:49:04 pm »


               

Tried the idea of selecting a single vertex and making a group from it this morning. What I did was have gmax select any random face in the already selected region (based on slope). Then I told it to get the verts associated with that face. Then I had it get the faces associated with those verts, which basically expanded the selection to all adjacent faces. Then I had it pass me back the verts for all those faces again, so I could use them later.


 


Very interesting how you can just keep reversing those two functions and eventually flood select the entire mesh. While this did not do exactly what I needed, it was interesting enough to warrant making some new functions for use later.


 


I ended up staring at images on google earth for another hour after that, just so I could get back to the shapes and forms I really want, and try to find some mathematical pattern in the whole thing.


 


Basically what I really need to create something like this...


 


IevRt3V.png


 


... is to select the whole wall and top region, tessellate it, and then move random edges up and down on the top, while moving random edges in and out on the bottom, but I need to make sure I am moving in the correct direction on the x-y plane for wall edges. More experimentation is needed.


 


My guess is to:


 


  • Select wall faces and one square more adjacent, both top and bottom (using those two functions I mentioned above)

  • Tessellate the selection, increasing regions to crack

  • Randomly select some edges, get their planar facing (edge normals), and then shift them.

  • smooth it down a bit with relax

  • Optimize to remove unused cutting edges

  • Smooth face groups

  • Retexture

 


We'll see how that goes. If it works that easy, it will save me all the extra tessellation, face extrusion, and noise issues, I have had in the past.


               
               

               
            

Legacy_MerricksDad

  • Hero Member
  • *****
  • Posts: 2105
  • Karma: +0/-0
Merricksdad's Black Hills Tileset (First Look)
« Reply #399 on: September 25, 2015, 09:26:51 pm »


               

so very close now '<img'>



               
               

               
            

Legacy_Tarot Redhand

  • Hero Member
  • *****
  • Posts: 4165
  • Karma: +0/-0
Merricksdad's Black Hills Tileset (First Look)
« Reply #400 on: September 25, 2015, 11:40:01 pm »


               

and try to find some mathematical pattern in the whole thing.

@MD - Chaos theory? ':whistle:'


 


TR



               
               

               
            

Legacy_MerricksDad

  • Hero Member
  • *****
  • Posts: 2105
  • Karma: +0/-0
Merricksdad's Black Hills Tileset (First Look)
« Reply #401 on: September 26, 2015, 12:29:21 am »


               

Got the pattern, just need to tweak the smoothing/optimize combo. It comes across in the game a little harsh on the seams, and there are a few tiles with some heavy noise marks too close to each other.


 


WgMLBa0.png



               
               

               
            

Legacy_Tarot Redhand

  • Hero Member
  • *****
  • Posts: 4165
  • Karma: +0/-0
Merricksdad's Black Hills Tileset (First Look)
« Reply #402 on: September 26, 2015, 12:55:23 am »


               

The above would be awesome as a snowy tileset with very little adjustment (I had to look twice before realising the white is just untextured!).


 


TR



               
               

               
            

Legacy_MerricksDad

  • Hero Member
  • *****
  • Posts: 2105
  • Karma: +0/-0
Merricksdad's Black Hills Tileset (First Look)
« Reply #403 on: September 26, 2015, 01:46:38 am »


               

Rz8e12y.png


 


hpDOBYM.png



               
               

               
            

Legacy_rjshae

  • Hero Member
  • *****
  • Posts: 553
  • Karma: +0/-0
Merricksdad's Black Hills Tileset (First Look)
« Reply #404 on: September 26, 2015, 02:44:31 am »


               

Surprisingly, it bears a certain resemblance to my unmade bed in the morning... it was a "rocky" sleep. '<img'>