1 | #!BPY |
---|
2 | """ |
---|
3 | Name: 'A.N.T.Landscape v.1.03' |
---|
4 | Blender: 234 |
---|
5 | Group: 'Add' |
---|
6 | Tip: 'Create a landscape mesh.' |
---|
7 | """ |
---|
8 | |
---|
9 | |
---|
10 | ########################################################################## |
---|
11 | ## : A.N.T.(Another Noise Tool) Landscape 1.03 VCol. |
---|
12 | ## : Jimmy Hazevoet : Jan./Oct. 2005 |
---|
13 | ########################################################################## |
---|
14 | #------------------------------------------------------------------------# |
---|
15 | ## v.1.03 : NEW: Mesh 'VertexColor' gradient. |
---|
16 | ## : Use new 'Mesh Modifier' (Blender2.38+) for SubSurf. |
---|
17 | ## : Some new Effect and Filter stuff. |
---|
18 | #------------------------------------------------------------------------# |
---|
19 | ########################################################################## |
---|
20 | |
---|
21 | import Blender |
---|
22 | from Blender import * |
---|
23 | from Blender.Noise import * |
---|
24 | from math import * |
---|
25 | from Blender.Draw import * |
---|
26 | from Blender.BGL import * |
---|
27 | from Blender import Scene |
---|
28 | sc=Scene.getCurrent() |
---|
29 | |
---|
30 | # color stuff #------------------------------ |
---|
31 | ############################################# |
---|
32 | vcolours = Create(1) |
---|
33 | ColScreen = Create(0) |
---|
34 | preGrad = Create(0) |
---|
35 | newheight = Create(0.50) |
---|
36 | EVB_H = 125 |
---|
37 | EVB_R = 150 |
---|
38 | EVB_G = 200 |
---|
39 | EVB_B = 250 |
---|
40 | EVB_DEL = 300 |
---|
41 | EV_NEW = 5 |
---|
42 | EV_NOEVENT = 1 |
---|
43 | colorcontrols=[] |
---|
44 | |
---|
45 | colors = ( |
---|
46 | #default ### [ h, r, g, b] ### |
---|
47 | [[ 1.0, 227, 228, 231], [ 0.70, 96, 98, 97], [ 0.003, 76, 99, 27], [ 0.20, 96, 74, 23], [ 0.0, 11, 35, 84], [-1.0, 11, 35, 84]], |
---|
48 | #natural |
---|
49 | [[ 1.00, 200, 200, 200], [ 0.70, 159, 159, 159], [ 0.20, 157, 131, 67], [ 0.003, 85, 108, 67], [0.0, 3, 71, 109], [-1.0, 2, 39, 89]], |
---|
50 | #dry |
---|
51 | [[ 1.00, 169, 115, 54], [ 0.1, 187, 146, 37], [ 0.0, 132, 137, 54], [-1.0, 132, 137, 54]], |
---|
52 | #red |
---|
53 | [ [ 1.0 , 249, 225, 163],[ 0.5 , 239, 195, 103], [ 0.25, 214, 115, 72], [ 0.0, 100, 40, 25], [ -1.0, 0, 0, 0]], |
---|
54 | #stone |
---|
55 | [[ 1.0 , 236, 219, 196], [ 0.7, 190, 179, 171], [ 0.35, 174, 180, 170], [ 0.0, 114, 114, 114], [ -1.0, 0, 0, 0]], |
---|
56 | #grayscale |
---|
57 | [[ 1.0, 255, 255, 255], [ 0.0, 0, 0, 0], [-1.0, 0, 0, 0]] |
---|
58 | ) |
---|
59 | |
---|
60 | # Linear color gradient computation from: BDi_0.0.3.py |
---|
61 | def col_gradient(value, col1, col2): |
---|
62 | delta = (value-col1[0]) / (col2[0]-col1[0]) |
---|
63 | jitter = random() * 0.05 * delta |
---|
64 | if (delta+jitter)<1.0: delta = delta+jitter |
---|
65 | else: delta = delta-jitter |
---|
66 | gg=col1[2]+(col2[2]-col1[2])*delta |
---|
67 | bb=col1[3]+(col2[3]-col1[3])*delta |
---|
68 | rr=col1[1]+(col2[1]-col1[1])*delta |
---|
69 | return ( NMesh.Col(int(round(rr)),int(round(gg)),int(round(bb))) ), ( ((round(rr)),(round(gg)),(round(bb))) ) |
---|
70 | |
---|
71 | ###################################################### |
---|
72 | #------------------------------ |
---|
73 | def reset(): |
---|
74 | global NSize, iScale, invert, FalTyp, Fall, FalHard, offset, slev, plev, pslope, platnoise, edgesatsea |
---|
75 | global RaPos, RaSiz, RaHgh, RaCha, RaTyp, Noise_Type, Noise_Basis |
---|
76 | global Distortion_Noise, Damnt, VFunc, VExp, VDep |
---|
77 | global Ha, La, Oc, Of, Ga, Ri, Ri_S, Ri_B, Depth, Hard, Amp, Freq, Lx, Ly, Lz, Sx, Sy |
---|
78 | global FX, EffectZ, FXnoise, FXblend, Flt, FilterZ, filtF, filtG, lower, upper |
---|
79 | global fxSize, fxSx, fxSy, fxLx, fxLy, fxIntens, fxOfst, fxgrad, fxA, fxB, fxC, fxD |
---|
80 | |
---|
81 | RaPos = Create(1); RaSiz = Create(0); RaHgh = Create(0); RaCha = Create(0); RaTyp = Create(0) |
---|
82 | FalTyp = Create( 2 ); Fall = Create( 1.0 ); FalHard = Create( 1.0 ) |
---|
83 | plev = Create( 1.0 ); slev = Create( 0.0 ); edgesatsea = Create(0); pslope = Create(0); platnoise = Create(0) |
---|
84 | NSize = Create(1.0); iScale = Create(0.25); invert = Create(0); offset = Create(0.0) |
---|
85 | Sx = Create(1.0); Sy = Create(1.0); Lx = Create(0.0); Ly = Create(0.0); Lz = Create(0.0) |
---|
86 | Noise_Type = Create(3); Noise_Basis = Create(0) |
---|
87 | Oc = Create(5.0); La = Create(3.0); Ha = Create(1.0); Ga = Create(1.0); Of = Create(1.0) |
---|
88 | Ri = Create(1.0); Ri_S = Create(1.0); Ri_B = Create(0) |
---|
89 | Depth = Create(2); Hard = Create(0); Amp = Create(0.5); Freq = Create(2.0) |
---|
90 | Distortion_Noise = Create(0); Damnt = Create(2.0) |
---|
91 | VFunc = Create(0); VExp = Create(2.5); VDep = Create(0) |
---|
92 | FX = Create(0); EffectZ = Create(0); fxgrad = Create(0); fxA = Create(2); fxB = Create(0); fxC = Create(1.0); fxD = Create(2.0) |
---|
93 | fxSize = Create(1.0); fxSx = Create(1.0); fxSy = Create(1.0); fxLx = Create(0.0); fxLy = Create(0.0) |
---|
94 | fxIntens= Create(0.25); fxOfst = Create(0.0); FXnoise = Create(0); FXblend = Create(1) |
---|
95 | Flt = Create(0); FilterZ = Create(0); filtF = Create(1.0); filtG = Create(0.25); lower = Create(0.0); upper = Create(1.0) |
---|
96 | reset() |
---|
97 | #------------------------------ |
---|
98 | def resetMe(): |
---|
99 | global MEName, preset, pview, Auto_Update, Quality, resolution, Q_T, smooth, Rseed, RanMod |
---|
100 | MEName = Create("Landscape"); preset = Create(0); pview = Create(0) |
---|
101 | Auto_Update = Create(1); Quality = Create(3); resolution = Create(50) |
---|
102 | Q_T = Create(0); smooth = Create(0) |
---|
103 | RanMod = Create(0); Rseed = Create(0) |
---|
104 | resetMe() |
---|
105 | |
---|
106 | ### Presets ---------------------------------- |
---|
107 | #------------------------------ |
---|
108 | def Preset_Noise(): |
---|
109 | global preset, NSize, Lx, Ly, Lz, Sx, Sy, iScale, invert, offset, slev, plev, pslope, platnoise, FalTyp, Fall, FalHard |
---|
110 | global Noise_Type, Noise_Basis, Distortion_Noise, Damnt, Distortion_Noise |
---|
111 | global Ha, La, Oc, Of, Ga, Depth, Hard, Amp, Freq, VFunc, VDep, Ri, Ri_S, Ri_B |
---|
112 | global FX, EffectZ, FXblend, FXnoise, FXblend, FilterZ, filtF, filtG, Flt |
---|
113 | global fxSize, fxSx, fxSy, fxLx, fxLy, fxIntens, fxOfst |
---|
114 | |
---|
115 | if preset.val >2: ## randomise position ## |
---|
116 | Lx = Create( 0.0+(random() * 1000 ) ); Ly = Create( 0.0+(random() * 1000 ) ); Lz = Create( 0.0+(random() * 1000 ) ) |
---|
117 | if preset.val == 2: # Original |
---|
118 | Noise_Type = Create(5); NSize = Create(0.25); iScale = Create(0.1); FalTyp = Create(0); Oc = Create(2.0); La = Create(2.0) |
---|
119 | elif preset.val == 3: # Blender hills |
---|
120 | Noise_Type = Create(5); Depth = Create(2) |
---|
121 | elif preset.val == 4: # Stones hills |
---|
122 | NSize = Create(0.5); Of = Create(0.9); FX = Create(1); EffectZ = Create(8); FXblend = Create(9); fxIntens = Create(0.125); fxOfst = Create(0.1); fxSize = Create(3.0) |
---|
123 | elif preset.val == 5: # Round hills |
---|
124 | Noise_Type = Create(6); VFunc = Create(1); iScale = Create(0.5); invert = Create(1); offset = Create(-0.25); NSize = Create(0.5) |
---|
125 | elif preset.val == 6: # Plateau |
---|
126 | Noise_Basis = Create(3); NSize = Create(0.5); iScale = Create(0.5); plev = Create(0.25); pslope = Create(1); slev = Create(-0.25); FalTyp = Create(1) |
---|
127 | EffectZ = Create(7); FXblend = Create(2); platnoise = Create(1) |
---|
128 | elif preset.val == 7: # Shattered |
---|
129 | Noise_Type = Create(2); Noise_Basis = Create(7); Of = Create(2.0); Ga = Create(2.0); NSize = Create(0.25); offset = Create(-0.25); FalHard = Create(2.5) |
---|
130 | elif preset.val == 8: # Chaotic |
---|
131 | NSize = Create(0.25); Oc = Create(6.0); La = Create(2.0); Ha = Create(0.8); Of = Create(0.4) |
---|
132 | elif preset.val == 9: # RidgedMF |
---|
133 | Noise_Type = Create(1); La = Create(2.0); Ha = Create(0.8); Ga = Create(2.5) |
---|
134 | elif preset.val == 10: # Distorted hTerrain |
---|
135 | Noise_Type = Create(13); Ri = Create(-1.0); Ri_S = Create(0.75); Ri_B = Create(3) |
---|
136 | elif preset.val == 11: # Cauliflower |
---|
137 | Noise_Type = Create(2); Noise_Basis = Create(3); La = Create(5.0); Ga = Create(5.0); iScale = Create(0.35); invert = Create(1); NSize = Create(0.5); FalTyp = Create(1) |
---|
138 | elif preset.val == 12: # Ridges |
---|
139 | Noise_Type = Create(4); Noise_Basis = Create(3); NSize = Create(0.5); iScale = Create(0.5); offset = Create(0.1); Ha = Create(1.5) |
---|
140 | elif preset.val == 13: # Crystalline |
---|
141 | Noise_Type = Create(2); Noise_Basis = Create(4); iScale = Create(0.75); invert = Create(1); offset = Create(0.25) |
---|
142 | elif preset.val == 14: # Warped |
---|
143 | NSize = Create(0.5); Of = Create(0.5); Flt = Create(1); FilterZ = Create(1) |
---|
144 | elif preset.val == 15: # ChebyTech |
---|
145 | Noise_Type = Create(6); VFunc = Create(3); VDep = Create(1); FalTyp = Create(0); plev = Create(0.2); NSize = Create(0.25); iScale = Create(0.6) |
---|
146 | elif preset.val == 16: # CellNoise |
---|
147 | Noise_Type = Create(5); Noise_Basis = Create(9); FalHard = Create(10.0) |
---|
148 | elif preset.val == 17: # Canyon |
---|
149 | NSize = Create(0.5); plev = Create(0.25); platnoise = Create(1); FalHard = Create(2.5); iScale = Create(0.5); offset = Create(-0.25); FilterZ = Create(3) |
---|
150 | elif preset.val == 18: # Ring o Rock |
---|
151 | Noise_Type = Create(2); Noise_Basis = Create(7); Of = Create(2.0); Ga = Create(2.0); NSize = Create(0.5); offset = Create(-0.6) |
---|
152 | iScale = Create(0.5); FX = Create(1); EffectZ = Create(2); FXblend = Create(2) |
---|
153 | elif preset.val == 19: # xtreme Peaks |
---|
154 | Noise_Type = Create(10); iScale = Create(0.5); Flt = Create(1); FilterZ = Create(2) |
---|
155 | elif preset.val == 20: # hardturb |
---|
156 | Noise_Type = Create(5); Hard = Create(1); Depth = Create(3); Amp = Create(0.65); invert = Create(1); offset = Create(0.5); iScale = Create(0.5); FalTyp = Create(1) |
---|
157 | elif preset.val == 21: # Cliff |
---|
158 | FalTyp = Create(0); platnoise = Create(1); iScale = Create(0.5); FX = Create(1); EffectZ = Create(4); FXblend = Create(2) |
---|
159 | fxIntens= Create(1.0); fxSx = Create(0.0); fxSy = Create(0.5) |
---|
160 | |
---|
161 | ## Randomise ------------------------------------------------------ |
---|
162 | ###----------------------------------- |
---|
163 | def Random_N(): |
---|
164 | global iScale, invert, offset, NSize |
---|
165 | global RaPos, RaSiz, RaCha, RaHgh, RaTyp, Rseed |
---|
166 | global Noise_Type, Noise_Basis, Distortion_Noise, VFunc |
---|
167 | global Lx, Ly, Lz, Sx, Sy, Ha, La, Oc, Of, Ga, Ri, Ri_S, Ri_B |
---|
168 | global Depth, Hard, Amp, Freq, Damnt, VExp, VDep |
---|
169 | |
---|
170 | setRandomSeed(Rseed.val) |
---|
171 | inv1=inv2=1 |
---|
172 | randinv_one = int( random() * 2) |
---|
173 | if randinv_one == 1: inv1=-1 |
---|
174 | randinv_two = int( random() * 2) |
---|
175 | if randinv_two == 1: inv2=-1 |
---|
176 | # randomise Position #-------------------------------- |
---|
177 | if RaPos.val == 1: |
---|
178 | Lx = Create( (random() * 1000.0 ) * inv1 ); Ly = Create( (random() * 1000.0 ) * inv2 ); Lz = Create( (random() * 1000.0 ) * inv2 ) |
---|
179 | # randomise Size #------------------------------------ |
---|
180 | if RaSiz.val == 1: |
---|
181 | NSize = Create( 0.1+(random() * 1.0 ) ); Sx = Create( 1.0+(random() * 0.5 ) ); Sy = Create( 1.0+(random() * 0.5 ) ) |
---|
182 | # randomise Height #---------------------------------- |
---|
183 | if RaHgh.val == 1: |
---|
184 | iScale = Create( 0.1+( random() * 1.0 ) ); invert = Create( int( random() * 2) ); offset = Create( (random() * 0.10 ) * inv2 ) |
---|
185 | # randomise Character #-------------------------------- |
---|
186 | if RaCha.val == 1: |
---|
187 | Oc = Create( 1.0+( random() * 7.0 ) ); La = Create( 1.0+( random() * 5.0 ) ); Ga = Create( 0.5+( random() * 5.5 ) ); Ha = Create( 0.5+( random() * 1.5 ) ); Of = Create( 0.5+( random() * 1.0 ) ) |
---|
188 | Ri = Create( 0.2+( random() * 1.0 ) * inv1); Ri_S = Create( 0.3+( random() * 0.9 ) ); Ri_B = Create( int( random() * 10) ) |
---|
189 | Depth = Create( int( random() * 10) ); Hard = Create( int( random() * 2) ); Amp = Create( 0.25+( random() * 1.0 ) ); Freq = Create( 0.5+( random() * 2.5 ) ) |
---|
190 | Distortion_Noise = Create( int( random() * 10) ); Damnt = Create( 0.5+( random() * 3.0 ) ) |
---|
191 | VFunc = Create( int( random() * 7) ); VDep = Create( int( random() * 3) ); VExp = Create( ( random() * 10.0 ) ) |
---|
192 | # randomise Type #----------------------------------- |
---|
193 | if RaTyp.val == 1: |
---|
194 | Noise_Type = Create( int( random() * 10) ); Noise_Basis = Create( int( random() * 10) ) |
---|
195 | |
---|
196 | ## Noise -------------------------------------------------------- |
---|
197 | ###----------------------------------- |
---|
198 | def Noise_func(x,y,z): |
---|
199 | global iScale, invert, offset, NSize, Sx, Sy, Lx, Ly, Lz, Noise_Type, Noise_Basis |
---|
200 | global Distortion_Noise, Damnt, VFunc, VExp, VDep |
---|
201 | global Ha, La, Oc, Of, Ga, Ri, Ri_S, Ri_B, Depth, Hard, Amp, Freq |
---|
202 | |
---|
203 | x1 = ( x / Sx.val / NSize.val + Lx.val ) |
---|
204 | y1 = ( y / Sy.val / NSize.val + Ly.val ) |
---|
205 | z1 = ( z * 1.0 + Lz.val ) |
---|
206 | Basis = Noise_Basis.val |
---|
207 | if Basis == 9: Basis = 14 |
---|
208 | if Noise_Type.val == 0: |
---|
209 | nz = multiFractal((x1,y1,z1),Ha.val, La.val, Oc.val, Basis) |
---|
210 | elif Noise_Type.val == 1: |
---|
211 | nz = ridgedMFractal((x1,y1,z1),Ha.val, La.val, Oc.val, Of.val, Ga.val, Basis) |
---|
212 | elif Noise_Type.val == 2: |
---|
213 | nz = hybridMFractal((x1,y1,z1),Ha.val, La.val, Oc.val, Of.val, Ga.val, Basis) |
---|
214 | elif Noise_Type.val == 3: |
---|
215 | nz = heteroTerrain((x1,y1,z1),Ha.val, La.val, Oc.val, Of.val, Basis) |
---|
216 | elif Noise_Type.val == 4: |
---|
217 | nz = fBm((x1,y1,z1),Ha.val, La.val, Oc.val, Basis) |
---|
218 | elif Noise_Type.val == 5: |
---|
219 | nz = turbulence((x1,y1,z1),1+Depth.val, Hard.val, Basis,Amp.val,Freq.val)+1.0 |
---|
220 | elif Noise_Type.val == 6: |
---|
221 | nz = voronoi((x1,y1,z1),VFunc.val,VExp.val)[0][VDep.val] |
---|
222 | elif Noise_Type.val == 7: |
---|
223 | vlBasis = Distortion_Noise.val |
---|
224 | if vlBasis == 9: vlBasis = 14 |
---|
225 | distortion = Damnt.val |
---|
226 | nz = vlNoise((x1,y1,z1), distortion, vlBasis, Basis)+1 |
---|
227 | elif Noise_Type.val == 8: |
---|
228 | nz = noise((x1,y1,z1),Basis) |
---|
229 | elif Noise_Type.val == 9: |
---|
230 | nz = cellNoise((x1,y1,z1)) |
---|
231 | elif Noise_Type.val == 10: |
---|
232 | ht = heteroTerrain((x1,y1,z1),Ha.val, La.val, Oc.val, Of.val, Basis) |
---|
233 | nz = (Dist( ( ht**2),( ht**2) )**2)*0.025 |
---|
234 | elif Noise_Type.val == 11: |
---|
235 | ht = heteroTerrain((x1,y1,z1),Ha.val, La.val, Oc.val, Of.val, Basis) |
---|
236 | ca = WaveFunc( ht , Ri.val , (0.1/Ri.val*pi) , 1 ) |
---|
237 | nz = BModFunc( ht , ca , 1 )*2.0 |
---|
238 | elif Noise_Type.val == 12: |
---|
239 | ribasis = Ri_B.val |
---|
240 | if ribasis == 9: ribasis = 14 |
---|
241 | nz = heteroTerrain((x1,y1,z1),Ha.val, La.val, Oc.val, Of.val, Basis) |
---|
242 | nz += Ri.val*ridgedMFractal((x1/Ri_S.val,y1/Ri_S.val,z1),Ha.val,La.val,Oc.val,Of.val,Ga.val,ribasis) |
---|
243 | elif Noise_Type.val == 13: |
---|
244 | ribasis = Ri_B.val |
---|
245 | if ribasis == 9: ribasis = 14 |
---|
246 | vlBasis = Distortion_Noise.val |
---|
247 | if vlBasis == 9: vlBasis = 14 |
---|
248 | distortion = Damnt.val |
---|
249 | nz = heteroTerrain((x1,y1,z1),Ha.val, La.val, Oc.val, Of.val, Basis) |
---|
250 | nz += Ri.val*vlNoise((x1/Ri_S.val,y1/Ri_S.val,z1),distortion,vlBasis,ribasis) |
---|
251 | else: |
---|
252 | nt1 = (turbulence(( x1 , y1 , z1), 0, 1, 1, 0.5, 2.0 )*5-0.25) |
---|
253 | nt2 = (turbulence(( x1 , y1 , z1),1+Depth.val, Hard.val, Basis,Amp.val,Freq.val)*0.1) |
---|
254 | nz = ( ClipFunc( nt1, 0.0, 0.25 ) + (nt1*0.05) + nt2 )*4.0 |
---|
255 | if invert.val == 1: |
---|
256 | nz *= iScale.val/2 |
---|
257 | z = -nz + iScale.val |
---|
258 | else: z = nz * iScale.val/2 |
---|
259 | z += offset.val |
---|
260 | |
---|
261 | return x,y,z |
---|
262 | |
---|
263 | ## Effects ----------------------------------------------- |
---|
264 | ###------------------------------------------ |
---|
265 | def StonesFunc(x,y,z): |
---|
266 | return x,y, ClipFunc( (noise((10*x,10*y,z),1)*0.75-0.25), 0.0, 0.25 ) |
---|
267 | def SparseCracksFunc(x,y,z): |
---|
268 | return x,y, ClipFunc( (turbulence((x*2,y*2,z),0,1,1,0.5,2.0 )*4-0.25), 0.0, 0.25 ) |
---|
269 | def CratersFunc(x,y,z): |
---|
270 | return x,y, ClipFunc( (noise((2*x,2*y,z),3)*1.0+0.5), -0.5, 0.0 ) |
---|
271 | def SawFunc(x,y,z): |
---|
272 | wa1 = WaveFunc( x+y , 1.0 , 1.0, 3 ) |
---|
273 | wa2 = WaveFunc( (y+wa1*0.5) , 1.0 , 1.0, 3 ) |
---|
274 | return x,y, BModFunc( x*wa2, y*wa1, 7 ) |
---|
275 | def Dist(x,y): |
---|
276 | return sqrt( (x*x)+(y*y) ) |
---|
277 | def ClipFunc( input, ClipMin, ClipMax ): |
---|
278 | if ( input < ClipMin ): input = ClipMin |
---|
279 | if ( input > ClipMax ): input = ClipMax |
---|
280 | return input |
---|
281 | def maxFunc( c1, c2 ): |
---|
282 | if ( c1 > c2 ): c2 = c1 |
---|
283 | return c2 |
---|
284 | def minFunc( c1, c2 ): |
---|
285 | if ( c1 < c2 ): c2 = c1 |
---|
286 | return c2 |
---|
287 | ###----------------------------------- |
---|
288 | def BModFunc( c1, c2, bmod ): |
---|
289 | if bmod == 0: return ( c2 ) #0 c2 |
---|
290 | elif bmod == 1: return ( c1*(1.0-0.5) + c2*0.5 ) #1 blend |
---|
291 | elif bmod == 2: return ( c1 + c2 ) #2 add |
---|
292 | elif bmod == 3: return ( c1 - c2 ) #3 subtract |
---|
293 | elif bmod == 4: return ( c1 * c2 ) #4 multiply |
---|
294 | elif bmod == 5: return (abs( c1 - c2 )) #5 difference |
---|
295 | elif bmod == 6: return 1.0-((1.0-c1)*(1.0-c2)/1.0) #6 screen |
---|
296 | elif bmod == 7: return ( c1 + c2 ) % 1.0 #7 add modulo |
---|
297 | elif bmod == 8: return minFunc( c1, c2 ) #8 min |
---|
298 | elif bmod == 9: return maxFunc( c1, c2 ) #9 max |
---|
299 | #### elif bmod == 10: #10 warp |
---|
300 | else: return ( c1 ) #11 c1 |
---|
301 | ###----------------------------------- |
---|
302 | def WaveFunc( input, numb, scale, type ): |
---|
303 | if type == 1: return ( sin( input * numb*pi ) * scale ) |
---|
304 | elif type == 2: return ( cos( input * numb*pi ) * scale ) |
---|
305 | elif type == 3: return ( ( input * numb ) % 1.0 * scale ) |
---|
306 | elif type == 4: return ( int( input * numb ) * scale ) / ( numb ) |
---|
307 | else: return ( ( input * numb*pi ) * scale ) |
---|
308 | |
---|
309 | ###----------------------------------- |
---|
310 | def Z_Effect(x,y,z): |
---|
311 | global EffectZ, FXnoise, FXblend |
---|
312 | global fxSize, fxSx, fxSy, fxLx, fxLy, fxIntens, fxOfst, fxgrad, fxA, fxB, fxC, fxD |
---|
313 | |
---|
314 | basis = FXnoise.val |
---|
315 | if basis == 9: basis = 14 |
---|
316 | Nfunc = Noise_func(x,y,z) |
---|
317 | if EffectZ.val == 0: z = Nfunc[2] |
---|
318 | else: |
---|
319 | phi = 3.14159265359 |
---|
320 | x2 = ( x * fxSize.val * fxSx.val - fxLx.val ) |
---|
321 | y2 = ( y * fxSize.val * fxSy.val - fxLy.val ) |
---|
322 | if EffectZ.val == 1: ez = ( x * sin( Dist( x2,y2 ) * phi*2 ) - y * cos( Dist( x2,y2 ) * phi*2 ) ) |
---|
323 | elif EffectZ.val == 2: ez = sin( -Dist( x2,y2 ) * phi*2 ) |
---|
324 | elif EffectZ.val == 3: ez = sin( ( x2 * phi ) + sin( y2 * phi ) ) |
---|
325 | elif EffectZ.val == 4: ez = sin( x2*phi + y2*phi ) |
---|
326 | elif EffectZ.val == 5: ez = cos( x2 * phi ) * sin( y2 * phi ) |
---|
327 | elif EffectZ.val == 6: ez = BModFunc(WaveFunc(y2,1.0,1.0,3), WaveFunc(x2,1.0,1.0,3), 1 ) |
---|
328 | elif EffectZ.val in [7,8,9,10]: |
---|
329 | if EffectZ.val == 7: nz = SawFunc(x2,y2,0.0) |
---|
330 | elif EffectZ.val == 8: nz = StonesFunc(x2,y2,0.0) |
---|
331 | elif EffectZ.val == 9: nz = CratersFunc(x2,y2,0.0) |
---|
332 | elif EffectZ.val == 10: nz = SparseCracksFunc(x2,y2,0.0) |
---|
333 | ez = nz[2] |
---|
334 | elif EffectZ.val == 11: |
---|
335 | ez = turbulence((x2+2.0,y2-2.0,0.0),1+fxA.val, fxB.val, basis, 0.5,2.0)+1.0 |
---|
336 | elif EffectZ.val == 12: |
---|
337 | ez = multiFractal((x2,y2,0.0),fxC.val, fxD.val, fxA.val, basis) |
---|
338 | elif EffectZ.val == 13: |
---|
339 | bs = fxA.val |
---|
340 | if bs == 9: bs = 14 |
---|
341 | ez = vlNoise((x2,y2,0.0), fxC.val, bs, basis)+1 |
---|
342 | elif EffectZ.val == 14: |
---|
343 | value = (x2*x2 + y2*y2)/0.5 |
---|
344 | if value > 1.0: radg = 0.0 |
---|
345 | radg = 1.0 - value |
---|
346 | grad = [ x2, -x2, y2, -y2, radg ] |
---|
347 | ez = grad[ fxgrad.val ] |
---|
348 | elif EffectZ.val == 15: |
---|
349 | ez = ( fxSize.val * random() ) |
---|
350 | |
---|
351 | ez *= fxIntens.val |
---|
352 | ez += fxOfst.val |
---|
353 | Nfunc=Noise_func(x,y,z) |
---|
354 | if FXblend.val == 10: |
---|
355 | Wfunc = Noise_func( x-ez, y-ez, 0.0 ) |
---|
356 | z = Wfunc[2] |
---|
357 | else: |
---|
358 | z = BModFunc( Nfunc[2], ez , FXblend.val ) |
---|
359 | return x,y,z |
---|
360 | |
---|
361 | ## Filters ------------------------- |
---|
362 | ###----------------------------------- |
---|
363 | def Z_Filter(x,y,z): |
---|
364 | global Flt, FilterZ, filtF, filtG, lower, upper |
---|
365 | |
---|
366 | Efunc = Z_Effect(x,y,z) |
---|
367 | if FilterZ.val == 0: z = Efunc[2] |
---|
368 | elif FilterZ.val == 1: |
---|
369 | zn = Z_Effect(x,y,z) |
---|
370 | Sfunc = Z_Effect(x-(zn[2]*filtF.val+filtG.val), y-(zn[2]*filtF.val+filtG.val), z ) |
---|
371 | z = Sfunc[2] |
---|
372 | elif FilterZ.val == 2: |
---|
373 | z = (Dist( (Efunc[2]**2),(Efunc[2]**2) )**2)*2.0 |
---|
374 | elif FilterZ.val in [3,4,5,6,7]: |
---|
375 | canion1 = ( Efunc[2], (filtF.val*10.0), (0.1/(filtF.val*10.0)*pi), 2 , Efunc[2], 2 ) |
---|
376 | canion2 = ( (Dist( Efunc[2]**2 ,Efunc[2]**2 )**2),(filtF.val*10.0),(0.1/(filtF.val*10.0)*pi),1 , (Dist( Efunc[2]**2 ,Efunc[2]**2 )**2),2 ) |
---|
377 | sawf = ( Efunc[2], filtF.val*1.0, filtG.val , 3 , 0, 0 ) |
---|
378 | poster = ( Efunc[2]*2.0, filtF.val*20.0 , filtG.val*2.0 ,4 , 0, 0) |
---|
379 | posternoise = ( Efunc[2]*2.0, filtF.val*20.0 , filtG.val*2.0 ,4 , Efunc[2]*2.0, 1) |
---|
380 | FiltType = ( 0,0,0, canion1, canion2, sawf, poster, posternoise ) |
---|
381 | FTyp = FiltType[ FilterZ.val ] |
---|
382 | Wa = WaveFunc( FTyp[0], FTyp[1], FTyp[2], FTyp[3] ) |
---|
383 | z = BModFunc( FTyp[4] , Wa , FTyp[5] ) |
---|
384 | elif FilterZ.val == 8: |
---|
385 | z = SmoothStep( Efunc[2], lower.val, upper.val )*filtF.val |
---|
386 | return x,y,z |
---|
387 | ###----------------------------------- |
---|
388 | def SmoothStep( input, low, up ): |
---|
389 | value = input |
---|
390 | if value < low: return 0.0 |
---|
391 | elif value > up: return 1.0 |
---|
392 | else: |
---|
393 | delta = up - low |
---|
394 | if fabs(delta) > 0.000001: |
---|
395 | value = (value - low) / delta |
---|
396 | return value * value * (3.0 - 2.0 * value) |
---|
397 | else: |
---|
398 | if value > up: |
---|
399 | return 1.0 |
---|
400 | |
---|
401 | ## Limit height -------------------------------------------------------- |
---|
402 | ###----------------------------------- |
---|
403 | def Z_Limit(x,y,z): |
---|
404 | global FalTyp, Fall, FalHard, slev, edgesatsea, plev, pslope, platnoise |
---|
405 | |
---|
406 | plateau = plev.val; sealevel = slev.val |
---|
407 | if edgesatsea.val == 1: |
---|
408 | edgesatsealevel = slev.val |
---|
409 | else: |
---|
410 | edgesatsealevel = 0.0 |
---|
411 | |
---|
412 | Ffunc = Z_Filter(x,y,z) |
---|
413 | height = Ffunc[2] - edgesatsealevel |
---|
414 | if FalTyp.val != 0: |
---|
415 | if FalTyp.val == 2: fha = 2*FalHard.val |
---|
416 | else: fha = 1*FalHard.val |
---|
417 | distype = ( sqrt((x*x + y*y)**fha), sqrt((x*x)**fha+(y*y)**fha), sqrt(y*y)**fha, sqrt(x*x)**fha ) |
---|
418 | dist = distype[ FalTyp.val-1 ] |
---|
419 | height = Ffunc[2] - edgesatsealevel |
---|
420 | radius = 1.0 * Fall.val |
---|
421 | if( dist < radius ): |
---|
422 | dist = dist / radius |
---|
423 | dist = ( (dist) * (dist) * ( 3-2*(dist) ) ) |
---|
424 | z = ( height - height * dist ) + edgesatsealevel |
---|
425 | else: z = edgesatsealevel |
---|
426 | else: z = Ffunc[2] |
---|
427 | |
---|
428 | Nfunc = Noise_func(x,y,z) |
---|
429 | flatnoise = Nfunc[2] * 0.1 |
---|
430 | slope = abs( (x/pi-1)*(y/pi+1) ) |
---|
431 | if pslope.val == 1: |
---|
432 | if platnoise.val == 1: |
---|
433 | if ( z > plateau * slope + flatnoise ): z = plateau * slope + flatnoise |
---|
434 | else: |
---|
435 | if ( z > plateau * slope ): z = plateau * slope |
---|
436 | if pslope.val == 0: |
---|
437 | if platnoise.val == 1: |
---|
438 | if ( z > plateau + flatnoise ): z = plateau + flatnoise |
---|
439 | else: |
---|
440 | if ( z > plateau ): z = plateau |
---|
441 | if ( z < sealevel ): z = sealevel |
---|
442 | |
---|
443 | return x,y,z |
---|
444 | |
---|
445 | ## Mesh ----------------------------------------------------------- |
---|
446 | ###----------------------------------- |
---|
447 | def Crea(): |
---|
448 | global MEName, Quality, resolution, Q_T, smooth, submode, sub, vcolours, preGrad |
---|
449 | |
---|
450 | reso = ( 32+1, 50+1, 64+1, 100+1, 128+1, 150+1, 200+1, 256+1, 512+1, resolution.val+1 ) |
---|
451 | n = reso[ Quality.val ] |
---|
452 | |
---|
453 | try: |
---|
454 | o=Object.Get('Terrainn') |
---|
455 | me=o.getData() |
---|
456 | UPDATE=1 |
---|
457 | except: |
---|
458 | o=Object.New('Mesh','Terrainn') |
---|
459 | sc.link(o) |
---|
460 | me = NMesh.GetRaw() |
---|
461 | UPDATE=0 |
---|
462 | |
---|
463 | me.verts=[] |
---|
464 | me.faces=[] |
---|
465 | COL=[] |
---|
466 | height = 0 |
---|
467 | # Vertices ----------------------------------- |
---|
468 | i=j=h=0.0 |
---|
469 | for i in range(0, n, 1): |
---|
470 | i = i-(n-1)/2 |
---|
471 | i = i*2.0/(n-1) |
---|
472 | for j in range(0, n, 1): |
---|
473 | j = j-(n-1)/2 |
---|
474 | j = j*2.0/(n-1) |
---|
475 | Result = Z_Limit(i,j,h) |
---|
476 | height = Result[2] |
---|
477 | v=NMesh.Vert(i, j, height) |
---|
478 | me.verts.append(v) |
---|
479 | #----------------------------------- |
---|
480 | for cc in range(len(colors[ preGrad.val ])): |
---|
481 | if ( height > colors[ preGrad.val ][cc][0]): |
---|
482 | COL.append( col_gradient( height ,colors[ preGrad.val ][cc],colors[ preGrad.val ][cc-1])[0] ) |
---|
483 | break |
---|
484 | me.hasVertexColours(1) |
---|
485 | ##-------------------------------------- |
---|
486 | if Q_T.val == 1: |
---|
487 | for i in range(n-1): |
---|
488 | for j in range(n-1): |
---|
489 | f = NMesh.Face() |
---|
490 | f.v.append(me.verts[n*i+j]) |
---|
491 | f.v.append(me.verts[n*(i+1)+j]) |
---|
492 | f.v.append(me.verts[n*i+(j+1)]) |
---|
493 | if vcolours.val !=0: |
---|
494 | f.col.append(COL[n*i+j]) |
---|
495 | f.col.append(COL[n*(i+1)+j]) |
---|
496 | f.col.append(COL[n*i+(j+1)]) |
---|
497 | f.smooth = smooth.val |
---|
498 | me.faces.append(f) |
---|
499 | f = NMesh.Face() |
---|
500 | f.v.append(me.verts[n*i+(j+1)]) |
---|
501 | f.v.append(me.verts[n*(i+1)+j]) |
---|
502 | f.v.append(me.verts[n*(i+1)+(j+1)]) |
---|
503 | if vcolours.val !=0: |
---|
504 | f.col.append(COL[n*i+(j+1)]) |
---|
505 | f.col.append(COL[n*(i+1)+j]) |
---|
506 | f.col.append(COL[n*(i+1)+(j+1)]) |
---|
507 | f.smooth = smooth.val |
---|
508 | me.faces.append(f) |
---|
509 | else: |
---|
510 | for i in range(n-1): |
---|
511 | for j in range(n-1): |
---|
512 | f= NMesh.Face() |
---|
513 | f.v.append(me.verts[i*n+j]) |
---|
514 | f.v.append(me.verts[(i+1)*n+j]) |
---|
515 | f.v.append(me.verts[(i+1)*n+j+1]) |
---|
516 | f.v.append(me.verts[i*n+j+1]) |
---|
517 | if vcolours.val !=0: |
---|
518 | f.col.append(COL[i*n+j]) |
---|
519 | f.col.append(COL[(i+1)*n+j]) |
---|
520 | f.col.append(COL[(i+1)*n+j+1]) |
---|
521 | f.col.append(COL[i*n+j+1]) |
---|
522 | f.smooth = smooth.val |
---|
523 | me.faces.append(f) |
---|
524 | |
---|
525 | if UPDATE : |
---|
526 | me.update() |
---|
527 | else : |
---|
528 | o.link(me) |
---|
529 | o.makeDisplayList() |
---|
530 | Blender.Redraw() |
---|
531 | |
---|
532 | |
---|
533 | ### G.U.I. , Preview --------------------------- |
---|
534 | #---------------------------------------------------------------------- |
---|
535 | def Preview_Noise(): |
---|
536 | global pview, preGrad |
---|
537 | for x in range(-64, 64): |
---|
538 | for y in range(-64, 64): |
---|
539 | poco = Z_Limit(x/64.0, y/64.0, 0.0) |
---|
540 | if pview.val == 1: |
---|
541 | r,g,b = (poco[2]+1)/2 , (poco[2]+1)/2 , (poco[2]+1)/2 |
---|
542 | glColor3f(r,g,b) |
---|
543 | elif pview.val == 2: |
---|
544 | r,g,b = (poco[2]) , (poco[2]) , (poco[2]) |
---|
545 | glColor3f(r,g,b) |
---|
546 | elif pview.val == 3: |
---|
547 | for cc in range(len(colors[ preGrad.val ])): |
---|
548 | if ( poco[2] > colors[ preGrad.val ][cc][0]): |
---|
549 | r,g,b = (col_gradient( poco[2] ,colors[ preGrad.val ][cc],colors[ preGrad.val ][cc-1] )[1] ) |
---|
550 | break |
---|
551 | glColor3f(r/255.0,g/255.0,b/255.0) |
---|
552 | |
---|
553 | glRecti(x+135, y+307, x+136, y+308) |
---|
554 | #------------------------------------ |
---|
555 | def ColBox(x,y, w, h, r, g, b): |
---|
556 | glColor3f(r, g, b) |
---|
557 | glRecti(x, y, w, h) |
---|
558 | ###----------------------------------- |
---|
559 | def GUI(): |
---|
560 | global MEName, preset, pview, Auto_Update, Quality, resolution, Q_T, smooth, submode, sub |
---|
561 | global NSize, iScale, invert, FalTyp, Fall, FalHard, offset, Lx, Ly, Lz, Sx, Sy, slev, plev |
---|
562 | global RaPos, RaSiz, RaHgh, RaCha, RaTyp, Rseed, RanMod, Flt, FilterZ, filtF, filtG, lower, upper |
---|
563 | global Noise_Type, Noise_Basis, Distortion_Noise, Damnt, VFunc, VExp, VDep |
---|
564 | global Ha, La, Oc, Of, Ga, Ri, Ri_S, Ri_B, Depth, Hard, Amp, Freq |
---|
565 | global FX, EffectZ, FXnoise, FXblend, fxSize, fxSx, fxSy, fxLx, fxLy |
---|
566 | global fxIntens, fxOfst, fxgrad, fxA, fxB, fxC, fxD |
---|
567 | global pslope, platnoise, edgesatsea |
---|
568 | global vcolours, ColScreen, colorcontrols, colsel, curcol, preGrad, newheight |
---|
569 | |
---|
570 | BGL.glClearColor(0.66, 0.66, 0.66, 1) |
---|
571 | BGL.glClear(BGL.GL_COLOR_BUFFER_BIT) |
---|
572 | glColor3f(0.73,0.73,0.73) |
---|
573 | glRecti(5, 5, 265, 227) |
---|
574 | glColor3f(0.61,0.61,0.61) |
---|
575 | if pview.val !=0: |
---|
576 | glRecti(5, 225, 265, 390) |
---|
577 | Preview_Noise() |
---|
578 | else: |
---|
579 | glRecti(5, 225, 265, 242) |
---|
580 | glColor3f(1.0,1.0,1.0) |
---|
581 | glRasterPos2d(140, 230) |
---|
582 | Text("A.N.T.Landscape 1.03",'small') |
---|
583 | |
---|
584 | colorcontrols = [[], [], [], []] |
---|
585 | ## Colors ##----------------------------------- |
---|
586 | if ( ColScreen.val == 1 ): |
---|
587 | ColScreen = Toggle("Col.",EV_NOEVENT, 160,205, 30,15, ColScreen.val,"Change colors") |
---|
588 | Button("Update", 103, 195, 205, 45, 15,"Update mesh.") |
---|
589 | #---------------------------------------------- |
---|
590 | glColor3f(1.0,0.0,0.0); glRasterPos2d(10, 190); Text("Red",'small') |
---|
591 | glColor3f(0.0,1.0,0.0); glRasterPos2d(60, 190); Text("Green",'small') |
---|
592 | glColor3f(0.0,0.0,1.0); glRasterPos2d(110, 190); Text("Blue",'small') |
---|
593 | glColor3f(0.0,0.0,0.0); glRasterPos2d(195, 190); Text("Height",'small') |
---|
594 | #---------------------------------------------- |
---|
595 | for c in range ( len(colors[ preGrad.val ]) ): |
---|
596 | #- Height --------------------------------------- |
---|
597 | if ( c != ( len(colors[ preGrad.val ]) -1 ) ): |
---|
598 | ccontrol = Create(colors[ preGrad.val ][c][0]) |
---|
599 | ccontrol = Number("", EVB_H+c, 195, 170-20*c, 45, 15, ccontrol.val, -1.0, 1.0, "Color above this Height") |
---|
600 | colorcontrols[0].append(ccontrol) |
---|
601 | #- Red --------------------------------------- |
---|
602 | ccontrol = Create(colors[ preGrad.val ][c][1]) |
---|
603 | ccontrol = Number("", EVB_R+c, 10, 170-20*c, 45, 15, ccontrol.val, 0, 255, "Red") |
---|
604 | colorcontrols[1].append(ccontrol) |
---|
605 | #- Green --------------------------------------- |
---|
606 | ccontrol = Create(colors[ preGrad.val ][c][2]) |
---|
607 | ccontrol = Number("", EVB_G+c, 60, 170-20*c, 45, 15, ccontrol.val, 0, 255, "Green") |
---|
608 | colorcontrols[2].append(ccontrol) |
---|
609 | #- Blue --------------------------------------- |
---|
610 | ccontrol = Create(colors[ preGrad.val ][c][3]) |
---|
611 | ccontrol = Number("", EVB_B+c, 110, 170-20*c, 45, 15, ccontrol.val, 0, 255, "Blue") |
---|
612 | colorcontrols[3].append(ccontrol) |
---|
613 | #- Col ------------------------------------- |
---|
614 | ColBox( 160,185-20*c, 190,170-20*c, (colors[ preGrad.val ][c][1])/255.0, (colors[ preGrad.val ][c][2])/255.0, (colors[ preGrad.val ][c][3])/255.0 ) |
---|
615 | #- Delete ---------------------------------- |
---|
616 | if (c!=0) and (c!=(len(colors[ preGrad.val ])-1)): |
---|
617 | PushButton("X", EVB_DEL+c , 245,170-20*c, 15,15, "Remove color") |
---|
618 | |
---|
619 | #- Add New ------------------------------------ |
---|
620 | Button("Add",EV_NEW, 60, 205, 45, 15, "Add new color at given height") |
---|
621 | newheight = Number("", EV_NOEVENT+c, 110, 205, 45, 15, newheight.val, -1.0, 1.0, "Height for new color") |
---|
622 | #- Preset grad's ------------------------------ |
---|
623 | gradsmnu = "Gradients %t|Default %x0|Natural %x1|Dry %x2|Red %x3|Stone %x4|Greyscale %x5" |
---|
624 | preGrad = Menu(gradsmnu,EV_NOEVENT, 10,205, 45,15, preGrad.val,"Preset gradients") |
---|
625 | else: |
---|
626 | ColScreen = Toggle("Colors",EV_NOEVENT, 140,205, 60,15, ColScreen.val,"Change colors") |
---|
627 | vcolours = Toggle("VertCol.", 102,210,205,50,15, vcolours.val,"Faces : Enable VertexColors.") |
---|
628 | ## Noise ## |
---|
629 | FX = Toggle( "Effects" ,31,10,205,60,15,FX.val,"Effects") |
---|
630 | Flt = Toggle( "Filters" ,32,70,205,60,15,Flt.val,"Filter") |
---|
631 | nbasis = "Noise Basis%t|Blender Original%x0|Original Perlin%x1|Improved Perlin%x2|Voronoi_F1%x3|Voronoi_F2%x4|Voronoi_F3%x5|Voronoi_F4%x6|Voronoi_F2-F1%x7|Voronoi Crackle%x8|CellNoise%x9" |
---|
632 | ntype = "Noise Type's %t|multiFractal %x0|ridgedMFractal %x1|hybridMFractal %x2|heteroTerrain %x3|fBm %x4|turbulence %x5|Voronoi %x6|DistortedNoise %x7|noise %x8|cellNoise %x9| %l|Peaked hTerrain %x10|Layered hTerrain %x11|hTerrain + ridgedMF %x12|hTerrain + DistortedN %x13|turbulence Cracks %x14" |
---|
633 | votype = "Voronoi%t|Distance %x0|Distance Squared %x1|Manhattan %x2|Chebychev %x3|Minkovsky 1/2 %x4|Minkovsky 4 %x5|Minkovsky %x6" |
---|
634 | if FX.val !=1 and Flt.val !=1: |
---|
635 | Noise_Type = Menu(ntype,102,10,60,120,20, Noise_Type.val, "Noise Type") |
---|
636 | if Noise_Type.val == 6: |
---|
637 | VFunc = Menu(votype, 102, 10,85,120,15, VFunc.val) |
---|
638 | elif Noise_Type.val != 9: |
---|
639 | Noise_Basis = Menu(nbasis,102,10,85, 120, 15, Noise_Basis.val, "Noise Basis") |
---|
640 | if Noise_Type.val in [0,1,2,3,4, 10,11,12,13]: |
---|
641 | Oc = Slider("Octs: ", 102, 10,180,120,15, Oc.val,0.0,8.0 ,0, "Musgrave: Octaves") |
---|
642 | La = Slider("Lacu: ", 102, 10,165,120,15, La.val,0.0,6.0 ,0, "Musgrave: Lacunarity") |
---|
643 | Ha = Slider("H: ", 102, 10,150,120,15, Ha.val,0.0,2.0 ,0, "Musgrave: H") |
---|
644 | if Noise_Type.val in [1,2,12]: |
---|
645 | Ga = Slider("Gain: ", 102, 10,120,120,15, Ga.val,0.0,6.0 ,0, "Musgrave: Gain") |
---|
646 | if Noise_Type.val in [1,2,3,10,11,12,13]: |
---|
647 | Of = Slider("Ofst: ", 102, 10,135,120,15, Of.val,0.0,6.0 ,0, "Musgrave: Offset") |
---|
648 | if Noise_Type.val == 11: |
---|
649 | Ri = Number("Layers:", 102, 10,120,120,15, Ri.val,0.0,10.0 ,"number of Layers") |
---|
650 | if Noise_Type.val == 12: |
---|
651 | Ri = Number(":", 102, 10,105,50,15, Ri.val,-2.0,2.0 ,"ridgedMF intensity") |
---|
652 | Ri_S = Number(":", 102, 60,105,50,15, Ri_S.val,0.001,10.0 ,"ridgedMF Size") |
---|
653 | Ri_B = Menu(nbasis, 102, 110,105,20,15, Ri_B.val,"ridgedMF Noise basis"+" = "+str(int(Ri_B.val)) ) |
---|
654 | elif Noise_Type.val == 13: |
---|
655 | Ri = Number(":", 102, 10,105,40,15, Ri.val,-2.0,2.0 ,"Distortion intensity") |
---|
656 | Ri_S = Number(":", 102, 50,105,40,15, Ri_S.val,0.001,10.0 ,"Distortion Size") |
---|
657 | Damnt = Number("Distortion: ",102,90,105,40,15, Damnt.val, 0.0,10.0,"Distortion amount") |
---|
658 | Ri_B = Menu(nbasis, 102, 10,120,60,15, Ri_B.val,"Distortion Noise basis") |
---|
659 | Distortion_Noise = Menu(nbasis ,102,70,120,60,15, Distortion_Noise.val, "Distortion Noise") |
---|
660 | elif Noise_Type.val in [5,14]: |
---|
661 | if Hard.val == 0: Hardtext ="Soft" |
---|
662 | elif Hard.val == 1: Hardtext ="Hard" |
---|
663 | Hard = Toggle( Hardtext , 102, 10,135,60,15,Hard.val, "Turbulence: Soft noise / Hard noise") |
---|
664 | Amp = Slider("Amp:", 102,10,165,120,15,Amp.val,0.0,10.0, 0, "Turbulence: Ampscale ") |
---|
665 | Freq = Slider("Freq:", 102,10,150,120,15,Freq.val,0.0,10.0, 0, "Turbulence: Freqscale") |
---|
666 | Depth = Number("Depth:", 102,70,135,60,15,Depth.val,0.0,10.0, "Turbulence: Octaves") |
---|
667 | elif Noise_Type.val == 6: |
---|
668 | VDep = Number("Depth:",102,10,165,120,15,VDep.val,0,3, "Voronoi: Depth") |
---|
669 | if (VFunc.val == 6): |
---|
670 | VExp = Slider("Exp:",102,10,150,120,15,VExp.val,0.0,10.0, 0, "Voronoi: Minkovsky exponent") |
---|
671 | elif Noise_Type.val == 7: |
---|
672 | Distortion_Noise = Menu(nbasis ,102,10,150,120,15, Distortion_Noise.val, "DistortedNoise: Distortion Noise") |
---|
673 | Damnt = Slider("Dist:",102,10, 165, 120, 15, Damnt.val, 0.0,10.0, 0, "DistortedNoise: Distortion amount") |
---|
674 | elif FX.val ==1: |
---|
675 | glColor3f(0.61,0.61,0.61) ## Effects ## |
---|
676 | glRecti(8, 55, 132, 200) |
---|
677 | efxmnu = "Effect Type's %t|None %x0|Spiral %x1|Ring %x2|ZigZag %x3|Wave %x4|Bumps %x5|Sawteeth %x6|Saw-irregular %x7|Stones %x8|Craters %x9|Cracks %x10|Turbulence %x11|multiFractal %x12|DistortedNoise %x13|Gradient %x14|Random %x15" |
---|
678 | EffectZ = Menu(efxmnu,102,10,180,60,15, EffectZ.val, "Effect Types") |
---|
679 | if EffectZ.val !=0: |
---|
680 | blfxmnu = "Blend Type's %t|None (Effect only) %x0|Blend %x1|Add %x2|Subtract %x3|Multiply %x4|Difference %x5|Screen %x6|Add modulo %x7|Min %x8|Max %x9|Warp %x10" |
---|
681 | FXblend = Menu(blfxmnu,102,70,180,60,15, FXblend.val, "Mix Effect with Noise") |
---|
682 | fxIntens = Number("i:",102,10,110,60,15,fxIntens.val,-10.0,10.0, "Intensity") |
---|
683 | fxOfst = Number("z:",102,70,110,60,15,fxOfst.val,-10.0,10.0, "Offset") |
---|
684 | if EffectZ.val < 15: |
---|
685 | fxSx = Number("x:",102,10,160,60,15,fxSx.val,0.0,25.0, "Freq.X") |
---|
686 | fxSy = Number("y:",102,70,160,60,15,fxSy.val,0.0,25.0, "Freq.Y") |
---|
687 | fxLx = Number("x:",102,10,130,60,15,fxLx.val,-25.0,25.0, "Position X") |
---|
688 | fxLy = Number("y:",102,70,130,60,15,fxLy.val,-25.0,25.0, "Position Y") |
---|
689 | if EffectZ.val in [11,12,13]: |
---|
690 | FXnoise = Menu(nbasis,102,10,60,120,15,FXnoise.val, "Noise Basis" ) |
---|
691 | if EffectZ.val == 11: |
---|
692 | fxB = Toggle("Hard:",102,70,75,60,15,fxB.val) |
---|
693 | fxA = Number("Oct:",102,10,75,60,15,fxA.val,0,10) |
---|
694 | if EffectZ.val == 12: |
---|
695 | fxA = Number("Oct:",102,10,75,60,15,fxA.val,0,10) |
---|
696 | fxC = Number("H:",102,70,75,60,15,fxC.val,0.0,6.0) |
---|
697 | fxD = Number("La:",102,70,90,60,15,fxD.val,0.0,6.0) |
---|
698 | if EffectZ.val == 13: |
---|
699 | fxA = Menu(nbasis,102,10,75,60,15,fxA.val, "Noise Basis" ) |
---|
700 | fxC = Number("Dst:",102,70,75,60,15,fxC.val,0.0,10.0) |
---|
701 | if EffectZ.val < 14: |
---|
702 | fxSize = Number("Freq:",102,10,145,120,15,fxSize.val,0.0,25.0, "Frequency") |
---|
703 | if EffectZ.val == 14: |
---|
704 | fxgradmnu = "Gradient's %t|x %x0|-x %x1|y %x2|-y %x3|Radial %x4" |
---|
705 | fxgrad = Menu(fxgradmnu,102,10,145,120,15, fxgrad.val) |
---|
706 | if EffectZ.val == 15: |
---|
707 | fxSize = Number("R: ",102,10,145,120,15,fxSize.val,0.0,25.0, "Random") |
---|
708 | elif Flt.val ==1: |
---|
709 | glColor3f(0.61,0.61,0.61) ## Filters ## |
---|
710 | glRecti(8, 55, 132, 200) |
---|
711 | filtmnu = "Filter Type's%t|None %x0|Warp %x1|Peaks %x2|Layers %x3|Peaks and Layers %x4|Saw %x5|Posterise %x6|blended Posterise %x7|SmoothStep %x8" |
---|
712 | FilterZ = Menu(filtmnu,102,10,180,120,15, FilterZ.val,"Filter Type's") |
---|
713 | if FilterZ.val !=0: |
---|
714 | if FilterZ.val in [1,3,4,5,6,7]: |
---|
715 | filtF = Number(":",102,10,160,60,15,filtF.val, -25.0,25.0 , "Intensity" ) |
---|
716 | if FilterZ.val in [1,5,6,7]: |
---|
717 | filtG = Number(":",102,70,160,60,15,filtG.val, -25.0,25.0 , "Offset" ) |
---|
718 | if FilterZ.val == 8: |
---|
719 | lower = Number(":",102,10,160,60,15,lower.val, -1.0,1.0 , "Lower" ) |
---|
720 | upper = Number(":",102,70,160,60,15,upper.val, -1.0,1.0 , "Upper" ) |
---|
721 | filtF = Number(":",102,10,140,60,15,filtF.val, -25.0,25.0 , "Intensity" ) |
---|
722 | |
---|
723 | Lx = Number("",102,140,50,60,15,Lx.val,-1000.0,1000.0,"Noise x position" ) |
---|
724 | Ly = Number("",102,200,50,60,15,Ly.val,-1000.0,1000.0,"Noise y position" ) |
---|
725 | Lz = Number("",102,200,35,60,15,Lz.val,-1000.0,1000.0,"Noise z position" ) |
---|
726 | NSize = Number("NoiseSize: ",102,140,70, 120, 20, NSize.val, 0.001, 10.0, "Noise size") |
---|
727 | Sx = Number("x",102,140,90,60,15,Sx.val,0.001,10.0,"Noise x size") |
---|
728 | Sy = Number("y",102,200,90,60,15,Sy.val,0.001,10.0,"Noise y size") |
---|
729 | iScale = Number("iScale: ",102,140, 110, 90, 20, iScale.val, -10.0,10.0, "Height: Noise intensity") |
---|
730 | invert = Toggle("I",102,230,110,30,20, invert.val,"Height: Invert noise intensity") |
---|
731 | offset = Number("Offset: ",102,140,130,120,15,offset.val,-10.0,10.0, "Height: Noise z offset") |
---|
732 | plev = Number("Max.:",102,140,180,90,15,plev.val, slev.val,1.0, "Plateau: Clip z Max.") |
---|
733 | pslope = Toggle("S",102,230,180,15,15, pslope.val, "Plateau: Set Flat / Set Slope") |
---|
734 | platnoise = Toggle("N",102,245,180,15,15, platnoise.val, "Plateau: Set Flat / Set Noise ( +0.1*noise ) ") |
---|
735 | falmnu = "Falloff Type's %t|None %x0|Round %x1|Square %x2|y Linear %x3|x Linear %x4" |
---|
736 | if FalTyp.val !=0: |
---|
737 | slev = Number("Min.:",102,140,165,90,15,slev.val, -0.999,plev.val, "Sealevel: Clip z Min.") |
---|
738 | edgesatsea = Toggle("E",102,230,165,30,15, edgesatsea.val, "Edge Falloff: Set Edge's at Sealevel") |
---|
739 | FalTyp = Menu(falmnu,102,230,150,30,15, FalTyp.val,"Edge Falloff Type's") |
---|
740 | Fall = Number(":",102,140,150,45,15,Fall.val,0.0,10.0,"Edge Falloff : Radius") |
---|
741 | FalHard = Number(":",102,185,150,45,15,FalHard.val,0.0,25.0,"Edge Falloff : Hardness") |
---|
742 | else: |
---|
743 | FalTyp = Menu(falmnu,102,140,150,120,15, FalTyp.val,"Edge Falloff type's") |
---|
744 | slev = Number("Min.:",102,140,165,120,15,slev.val, -0.999,plev.val, "Sealevel: Clip z Min.") |
---|
745 | |
---|
746 | RaPos = Toggle("P",105,10,35,20,15, RaPos.val,"Random Noise Position.") |
---|
747 | RaSiz = Toggle("S",105,30,35,20,15, RaSiz.val,"Random Noise Size.") |
---|
748 | RaHgh = Toggle("H",105,50,35,20,15, RaHgh.val,"Random Noise Height.") |
---|
749 | RaCha = Toggle("C",105,70,35,20,15, RaCha.val,"Random Noise Character.") |
---|
750 | RaTyp = Toggle("T",105,90,35,20,15, RaTyp.val,"Random Noise Type.") |
---|
751 | semnu = "Random Mode %t|Random %x0|Seed %x1" |
---|
752 | RanMod = Menu(semnu,222,110,35,20,15, RanMod.val,"Random Mode") |
---|
753 | if RanMod.val == 0: |
---|
754 | Button("Random", 69, 80, 10, 50, 20,"Randomise Noise ( P,S,H,C,T ).") |
---|
755 | Rseed = Create(0) |
---|
756 | else: |
---|
757 | Rseed = Number(":",69,80,10,50,20,Rseed.val,0,255,"Random seed ( P,S,C,H,T )") |
---|
758 | |
---|
759 | resmnu = "Mesh Quality%t|32 %x0|50 %x1|64 %x2|100 %x3|128 %x4|150 %x5|200 %x6|256 %x7|512 %x8|Manual %x9" |
---|
760 | if Quality.val == 9: |
---|
761 | resolution = Number(":",102,140,25,40,15, resolution.val, 2,512,"Mesh resolution ( n*n )") |
---|
762 | Quality = Menu(resmnu,102,140,10,40,15, Quality.val, "Mesh Quality") |
---|
763 | else: |
---|
764 | Quality = Menu(resmnu,102,140,10,40,15, Quality.val, "Mesh Quality") |
---|
765 | Q_T = Toggle("Faces",102,220,10,40,15,Q_T.val,"Faces : Set Quads / Set Triangles") |
---|
766 | smooth = Toggle("Smooth",102,180,10,40,15,smooth.val,"Faces : Set Solid / Set Smooth") |
---|
767 | Auto_Update = Toggle("A",105,60,10,20,20, Auto_Update.val,"Automatic mesh update.") |
---|
768 | Button("Update", 103, 10, 10, 50, 20,"Update mesh.") |
---|
769 | |
---|
770 | pvi = "Preview %t|None %x0|Grey %x1|Original %x2|Coloured %x3" |
---|
771 | pview = Menu(pvi,111, 10,226,20,15, pview.val, "Preview") |
---|
772 | Button("P", 888, 35, 226, 15, 15,"Presets") |
---|
773 | Button("X", 999, 245, 226, 15, 15,"Reset / Exit") |
---|
774 | |
---|
775 | ### do_it ----------------------------------- |
---|
776 | ###----------------------------------- |
---|
777 | def do_it(): |
---|
778 | Blender.Window.WaitCursor(1) |
---|
779 | Crea() |
---|
780 | Blender.Window.WaitCursor(0) |
---|
781 | Redraw() |
---|
782 | def do_it_random(): |
---|
783 | Blender.Window.WaitCursor(1) |
---|
784 | Random_N() |
---|
785 | Crea() |
---|
786 | Blender.Window.WaitCursor(0) |
---|
787 | Redraw() |
---|
788 | ###----------------------------------- |
---|
789 | def event(evt, val): |
---|
790 | if (evt== ESCKEY and not val): |
---|
791 | Exit() |
---|
792 | def bevent(evt): |
---|
793 | global Auto_Update, preset, preGrad, colorcontrols, colors |
---|
794 | |
---|
795 | if (evt== 999): |
---|
796 | name = "OK ?%t|Exit %x1|Reset %x2" |
---|
797 | result = Blender.Draw.PupMenu(name) |
---|
798 | if result == 2: |
---|
799 | resetMe() |
---|
800 | reset() |
---|
801 | do_it() |
---|
802 | elif result == 1: |
---|
803 | Exit() |
---|
804 | |
---|
805 | if (evt == EV_NOEVENT): |
---|
806 | Draw() |
---|
807 | |
---|
808 | if (evt == EV_NEW ): |
---|
809 | colors[ preGrad.val ].append([newheight.val, 128, 128, 128]) |
---|
810 | colors[ preGrad.val ].sort() |
---|
811 | colors[ preGrad.val ].reverse() |
---|
812 | Draw() |
---|
813 | else: |
---|
814 | for c in range( len(colors[ preGrad.val ]) ): |
---|
815 | if (evt == EVB_H+c): |
---|
816 | colors[ preGrad.val ][c][0] = colorcontrols[0][c].val |
---|
817 | elif (evt == EVB_R+c): |
---|
818 | colors[ preGrad.val ][c][1] = colorcontrols[1][c].val |
---|
819 | elif (evt == EVB_G+c): |
---|
820 | colors[ preGrad.val ][c][2] = colorcontrols[2][c].val |
---|
821 | elif (evt == EVB_B+c): |
---|
822 | colors[ preGrad.val ][c][3] = colorcontrols[3][c].val |
---|
823 | elif (evt == EVB_DEL+c): |
---|
824 | del(colors[ preGrad.val ][c]) |
---|
825 | colors[ preGrad.val ].sort() |
---|
826 | colors[ preGrad.val ].reverse() |
---|
827 | Draw() |
---|
828 | |
---|
829 | if (evt == 888): |
---|
830 | pre="Default %x1|Original %x2|Blender hills %x3|Stones hills %x4|Round hills %x5|Plateau %x6|Shattered %x7|Chaotic %x8|RidgedMF %x9|Dist.hTerrain %x10|Cauliflower %x11|Ridges %x12|Crystalline %x13||Warped hT. %x14|ChebyTech %x15|CellNoise %x16|Canyonised %x17|Ring o Rock %x18|Xtreme Peaks %x19|HardTurb %x20|Cliff %x21" |
---|
831 | result = Blender.Draw.PupMenu(pre,7) |
---|
832 | if result > 0: |
---|
833 | preset.val = result |
---|
834 | if Auto_Update.val == 1: |
---|
835 | reset() |
---|
836 | Preset_Noise() |
---|
837 | do_it() |
---|
838 | else: |
---|
839 | reset() |
---|
840 | Preset_Noise() |
---|
841 | Draw() |
---|
842 | |
---|
843 | if (evt in [ 111 , 222 ] ): |
---|
844 | Draw() |
---|
845 | if (evt == 103): |
---|
846 | do_it() |
---|
847 | if Auto_Update.val == 1: |
---|
848 | if (evt == 102): |
---|
849 | do_it() |
---|
850 | elif (evt == 69): |
---|
851 | do_it_random() |
---|
852 | if Auto_Update.val == 0: |
---|
853 | if (evt == 69): |
---|
854 | Random_N() |
---|
855 | Draw() |
---|
856 | elif (evt == 102): |
---|
857 | Draw() |
---|
858 | |
---|
859 | if (evt == 31): |
---|
860 | if FX.val ==1: |
---|
861 | Flt.val = 0 |
---|
862 | Draw() |
---|
863 | if (evt == 32): |
---|
864 | if Flt.val ==1: |
---|
865 | FX.val = 0 |
---|
866 | Draw() |
---|
867 | |
---|
868 | Register(GUI, event, bevent) |
---|