Fine-tuned tree generator in photogen

This commit is contained in:
Marcus Str. 2024-12-20 21:40:55 +01:00
parent 5f214308c4
commit 3de9058cc6
3 changed files with 23 additions and 26 deletions

View File

@ -252,14 +252,14 @@ mstr_mask_blur = [
("amenity", "school", 1),
("highway", "pedestrian", 12),
# Z-Order 4
("highway", "motorway", 1),
("highway", "primary", 1),
("highway", "secondary", 1),
("highway", "tertiary", 1),
("highway", "unclassified", 1),
("highway", "living_street", 1),
("highway", "residential", 1),
("highway", "service", 1),
("highway", "motorway", 0.5),
("highway", "primary", 0.5),
("highway", "secondary", 0.5),
("highway", "tertiary", 0.5),
("highway", "unclassified", 0.5),
("highway", "living_street", 0.5),
("highway", "residential", 0.5),
("highway", "service", 0.5),
("highway", "footway", 2),
("highway", "track", 2),
("highway", "path", 2),

View File

@ -567,18 +567,18 @@ class mstr_layergen:
d = randrange(41, 61)
layer_comp_pix[x, y] = ( d,d,d,a[3] )
if self._tag == "highway" and self._value != "motorway":
d = randrange(0, 6)
d = randrange(0, 31)
dr = 80+d
dg = 80+d
db = 85+d
da = a[3]
da = 255
layer_comp_pix[x, y] = ( dr,dg,db,da )
if self._tag == "highway" and self._value == "motorway":
d = randrange(0, 46)
dr = 47+d
dg = 58+d
db = 60+d
layer_comp_pix[x, y] = ( dr,dg,db,a[3] )
layer_comp_pix[x, y] = ( dr,dg,db,255 )
if self._tag == "highway" and (self._value == "footway" or self._value == "track" or self._value == "path"):
dr = randrange(158, 183)
dg = randrange(143, 178)

View File

@ -225,6 +225,11 @@ class mstr_photogen:
os.remove(mstr_datafolder + "z_orthographic/orthos/" + self._latlngfld + "/" + str(self._ty) + "_" + str(self._tx) + ".png")
# Clear cache
cache = glob.glob(mstr_datafolder + "_cache/*" + str(self._lat) + "-" + str(self._ty) + "_" + str(self._lng) + "-" + str(self._tx) + "*.png")
for f in range(len(cache)):
os.remove(cache[f])
# Now generate the normal map for this ortho.
# But only if this is enabled.
@ -252,7 +257,7 @@ class mstr_photogen:
# Generates some random tree.
# We will now move away from using pre-made trees...
# they didn't look so great
def generate_tree(self, bccolor=[(0,0,0)]):
def generate_tree(self, bccolor=None):
sx = randrange(18, 31)
sy = randrange(18, 31)
@ -272,7 +277,7 @@ class mstr_photogen:
bc = []
bcp = 0
if bccolor[0] == 0:
if bccolor == None:
bc = [
(36, 50, 52),
(30, 41, 39),
@ -302,6 +307,7 @@ class mstr_photogen:
bcp = randrange(0, len(bc))
else:
bc = bccolor
bcp = randrange(0, len(bc))
treedraw = ImageDraw.Draw(tree)
while ptsdrawn < treepts + 1:
@ -361,25 +367,16 @@ class mstr_photogen:
forest = curlyr
# Find the average color of the forest layer
frstavg = [0,0,0]
frstclr = []
frstpix = None
if forest != -1:
numusedpix = 0
frstpix = layers[forest].load()
avg=[0,0,0]
for y in range(0, self._imgsize):
for x in range(0, self._imgsize):
frs = frstpix[x,y]
if frs[3] > 0:
avg[0] = avg[0] + frs[0]
avg[1] = avg[1] + frs[1]
avg[2] = avg[2] + frs[2]
numusedpix = numusedpix + 1
# Calculate and set average
frstavg[0] = int(avg[0] / numusedpix)
frstavg[1] = int(avg[1] / numusedpix)
frstavg[2] = int(avg[2] / numusedpix)
c = ( frs[0]-30, frs[1]-30, frs[2]-30 )
frstclr.append(c)
# Walk through list of layers to decide where to add the trees
@ -398,7 +395,7 @@ class mstr_photogen:
lp = lyrmask[lx,ly]
wp = wtrpix[lx,ly]
if lp[3] == 255 and wp[3] == 0: # Exclude water bodies from tree placement
tree = self.generate_tree(bccolor=[(frstavg[0], frstavg[1], frstavg[2])])
tree = self.generate_tree(frstclr)
trees.alpha_composite(tree, (lx, ly))
tree_shadow = Image.new("RGBA", (self._imgsize, self._imgsize))