To all SSC Station occupants
Thank you for the donations over the past year (2024), it is much appreciated. I am still trying to figure out how to migrate the forums to another community software (probably phpbb) but in the meantime I have updated the forum software to the latest version. SSC has been around a while so their is some very long time members here still using the site, thanks for making SSC home and sorry I haven't been as vocal as I should be in the forums I will try to improve my posting frequency.
Thank you again to all of the members that do take the time to donate a little, it helps keep this station functioning on the outer reaches of space.
-D1-
a friendly (looking) marketing strategy anyway.
but for what i need Blender's far enough.
to get a model running in a game you won't need many of the features, in fact far less for nubes.
a simple program like Z-Modeler can get you faster to your goal as even Blender or MAX.
not to much of the rendering, physics for animations and all you won't need to just build a model.
it will look anyway complete different in the game (whichever).
sadly free Z-Modeler 1.7 don't offers .obj export, else i would use it for pioneers models and would strongly recommend it for any newcomer*.
it's nice to have a lot of features like max, lightwave, maya or blender offer, but to learn the basic stuff
it's far better to have a basic program.
or to tell in other words we have nowadays modelers that have no idea about polygon winding, or what a crease is and what i have to fear from or if can gain some profit of them.
when i started out several years ago i used a very basic modeling program, carCAD for NFS.
but if you start with such polywinding and creases are no aliens for you, you will know where the limits are even when they are far expanded today.
might some feel my uv mapping is very basic, truely it is. i never use the possibilities of a automated unfolding or projection and do it in a rather old fashioned style.
but after all it was no big riddle to me how uv projection works in pioneer. it gave me some headakes in the beginning, but soon as i started to think different from what CAD programs teach you, i understood the system.
for interested ones a short explanation.
you just have to imagine that a texture projection in a script won't project the texture on the mesh (the word is allready misleading thoughts, because it's truely never). it's rather a projection of the selected mesh on the texture, so mesh projection would be the fitting term.
if you look at it from this POV it makes clear why values get diveded if the mesh gets bigger then a relation of 1:1.
in general any mesh will be projected on a texture sized allways 1:1, the rest is logical. bigger dimension in any of both projection vectors (U,V) will mean a dividing of the meshs size in the amount the mesh is bigger as 1:1.
with this knowledge at hand you can calculate now the values needed for a proper mapping.
since 1:1 means 1unit to 1unit or 1m x 1m you can simply divide 1 with the size of the mesh it has in the chosen vector of the projection plane. i.e. a model sized 3x5x8 will have at a x,y projection a uv of .333... to .2 and at a y,z projection
of .2 to .125.
fortunately z hasn't to be changed (i don't know exactly why), but it's often enough to divide x or y vector to get a fitting mapping.
with this at hand it's even possible to let a texture shrink, grow or move with the mesh (moving in the same amount as a mesh sizes up or down, can be very difficult i fund out)
it's like any craftsmatter, learning from groundup helps better understanding and ends in better results.
you can't go skiing just with a good equipment and to be a good skier it needs a lot of experience.
and good skiers like i learned skiing on wooden skis with a steel core... 😉
had been walking themselfs up the hill, preparing the ski run by themself, all just for a 3 minute ride (but we never wore helmets, no). well if you ever had prepared the run yourself, you know all conditions snow can have, at least one when the snow starts to get sticky and at each step it builds up more and more under your skis.
well to pick coolhands thoughts up and i was even thinking about such,
a modeling software fitting to pioneers scripted models would be a nice thing to have, people could build and learn how to build scripted models in a easy as 1,2,3 way.
i can see this allready as somekind of educational software, teaching the very basics of 3D modeling, like it was 20 years ago. could be used to teach geometry and mathematics in a joyful way, what scripting models does for shure to me.
"...all this i can do only with a expression?"
really to myself this matter has become far less dry when you have some result you can see, instead of a bunch of expressions that won't tell nothing.
---
* try to build a model using carCAD, make some screen shots of your favorite spaceship and start to place the verticles on all 3 planes. that works really, my courier is the testamonial for that it will work.
it's nice that we can take now a simple cube and form nearly any mesh of it, but by all the edge splitting gods, many basic stuff got forgotten then.
a often seen mistake is the disregarding of creases or how the edge of the 2 tris that form a quad will break the plane.
some example pics from my pilot, i guess you can't make a face of less then 49 tris
let's say i made this one from a box, it comes out this way
even when i set the mesh smooth, the creases are still to see and some are wrong because all edges leading from down left to up right. that will stay no matter how many divisions i use.
in most cases, like for cars or spaceships it would be enough to simply cut the model at y axis and use the mirrored better looking half, but this low-poly face needs some tweaking of the edges.
you can easely see all edges help now to form the shape, instead of some leading to a wrong side and form sunken in or stud out planes where i don't need them.
a small difference with a big effect and like i said you can subdivide as much you like, the wrong look of the upper example will stay, and when smoothened the shading will show the wrong creases even more and they start to look like wrinkles.
what can i say, the quads on the forehead are now the only ones that didn't fit and no matter how i turn the edge a small crease is allways shown.
have phun...
of course we have such nice things now like subsurf, but then you end up using 1000's of polys only for a face.
apart from that, pressing buttons even apes can do...
yes, subsurf is a cool tool, but i got now close to 700 faces (quads) and the basic creases are still to see!
besides of that, i won't look much better now
This is a wonderful example of what I meant when I said that you have tutorials all over this forum. 😆 With some editing, this and some of your other posts would make excellent chapters in your tutorial thread.
i was asked for how to place the decals in a comfortable way.
good news, i added two functions to the squad_sign sub-model included in the last compilation
they allow you to call only the texture for the squad sign, it is possible now to copy and separate a quad or array from a object and to apply then the texture/material to it in the models script. the uv mapping will be given by the new objects uv.
don't forget to set a higher zbias for the overlayed object as the rest of your model has.
[attachment=533:2011-02-11_212546.jpg]
it's supposed to be called in the dynamic part of your model, because it's simply like yow would call the selector function, this requieres the reg. no from get_arg_string(0) which can only be requested dynamic.
to call the function is very easy
fed_sign()
zbias(1,v(0,0,0),v(0,0,0))
load_obj('models/ships/adc/adc_fedsign.obj')
zbias(0)
that's for the roundlet with the triangle
don't forget to add the material 'squad' to the materials used in the models info of the calling model
[attachment=534:2011-02-11_213405.jpg]
the imperial sign texture is even more flexible and you can call it with
imp_sign()
instead of a texture, similar to above.
you won''t have to add the 'squad' material to the info, but you will have to specify a material for it, that could be a opaque one, then the imperial sign will come "clean" filled, but if you use a .99 set alpha of the material it will become washed out.
a function for the decals i will write soon, i guess i simply forgot to, because it's no big thing.
still interested in how to place a decal? ok,
when you have build a model with a CAD program, usually you can read out somewhere the coordinates of a poly, which in case for the decals a regular quad of 1x1m. v0 is unfortunately in the lower left corner of the quad, but important to know if you like to place one and read out later the transpose or rotation values.
...to be continued, i need a break 😉
Thats great, it will make it so much simpler to align the decals.
I eagerly await the rest 🙂
Thanks.
quick question: Is it possible to import models from Wings 3d?
I just checked and wings 3d can export .obj files so there should be no problems with exporting directly from wings3d.
i changed both scripts now
for the decal it's this script
texture can have a alpha channel for a cutout decal but it's not a must
if sequence is expandet so all squadrons can use all decals
]]--
define_model('decal', {
info = {
bounding_radius = 1,
materials = {'decal'}
},
static = function(lod)
end,
dynamic = function(lod)
selector1() -- requests "random" number from selector function
set_material('decal', .7,.7,.7, 0.99, .3,.3,.3,5) -- creates semi-transparent material to cut out alpha channel, has to be 0
use_material('decal')
if select1 < 26 then
texture('sub_models/decals/decal_a.png', v(0,0,0), v(0,0,-1), v(0,-1,0)) -- calls the texture for the decal,
else
if select1 < 51 then
texture('sub_models/decals/decal_b.png', v(0,0,0), v(0,0,-1), v(0,-1,0)) -- if sequence could be expandet to 1000!(limited by "select1or" function) different decals, but 10 will be ok i guess 😉
else
if select1 < 76 then
texture('sub_models/decals/decal_c.png', v(0,0,0), v(0,0,-1), v(0,-1,0)) -- when adding a additional one, divide 1000 through no. of total decals
else
if select1 < 101 then
texture('sub_models/decals/decal_d.png', v(0,0,0), v(0,0,-1), v(0,-1,0)) -- feel free to exchange the existing ones with your own style
else
if select1 < 126 then
texture('sub_models/decals/decal_e.png', v(0,0,0), v(0,0,-1), v(0,-1,0)) -- accepts any quadratical sized texture, recommendet are 128x128, 256x256
else
if select1 < 151 then
texture('sub_models/decals/decal_f.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 176 then
texture('sub_models/decals/decal_g.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 201 then
texture('sub_models/decals/decal_h.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 226 then
texture('sub_models/decals/decal_i.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 251 then
texture('sub_models/decals/decal_j.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 276 then
texture('sub_models/decals/decal_a.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 301 then
texture('sub_models/decals/decal_b.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 326 then
texture('sub_models/decals/decal_c.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 351 then
texture('sub_models/decals/decal_d.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 376 then
texture('sub_models/decals/decal_e.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 401 then
texture('sub_models/decals/decal_f.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 426 then
texture('sub_models/decals/decal_g.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 451 then
texture('sub_models/decals/decal_h.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 476 then
texture('sub_models/decals/decal_i.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 501 then
texture('sub_models/decals/decal_j.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 526 then
texture('sub_models/decals/decal_a.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 551 then
texture('sub_models/decals/decal_b.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 576 then
texture('sub_models/decals/decal_c.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 601 then
texture('sub_models/decals/decal_d.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 626 then
texture('sub_models/decals/decal_e.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 651 then
texture('sub_models/decals/decal_f.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 676 then
texture('sub_models/decals/decal_g.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 701 then
texture('sub_models/decals/decal_h.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 726 then
texture('sub_models/decals/decal_i.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 751 then
texture('sub_models/decals/decal_j.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 776 then
texture('sub_models/decals/decal_a.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 801 then
texture('sub_models/decals/decal_b.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 826 then
texture('sub_models/decals/decal_c.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 851 then
texture('sub_models/decals/decal_d.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 876 then
texture('sub_models/decals/decal_e.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 901 then
texture('sub_models/decals/decal_f.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 926 then
texture('sub_models/decals/decal_g.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 951 then
texture('sub_models/decals/decal_h.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 976 then
texture('sub_models/decals/decal_i.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 > 975 then
texture('sub_models/decals/decal_j.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
zbias(100,v(0,0,0),v(0,0,0))
quad(v(0,0,0), v(0,1,0), v(0,1,1), v(0,0,1)) -- creates a quadratic shape 1m x 1m for the decal
zbias(0)
end
})
function decal(set,v_pos,v_u,v_v)
if set == 1 then
selector1()
if select1 < 26 then
texture('sub_models/decals/decal_a.png', v_pos, v_u, v_v)
else
if select1 < 51 then
texture('sub_models/decals/decal_b.png', v_pos, v_u, v_v)
else
if select1 < 76 then
texture('sub_models/decals/decal_c.png', v_pos, v_u, v_v)
else
if select1 < 101 then
texture('sub_models/decals/decal_d.png', v_pos, v_u, v_v)
else
if select1 < 126 then
texture('sub_models/decals/decal_e.png', v_pos, v_u, v_v)
else
if select1 < 151 then
texture('sub_models/decals/decal_f.png', v_pos, v_u, v_v)
else
if select1 < 176 then
texture('sub_models/decals/decal_g.png', v_pos, v_u, v_v)
else
if select1 < 201 then
texture('sub_models/decals/decal_h.png', v_pos, v_u, v_v)
else
if select1 < 226 then
texture('sub_models/decals/decal_i.png', v_pos, v_u, v_v)
else
if select1 < 251 then
texture('sub_models/decals/decal_j.png', v_pos, v_u, v_v)
else
if select1 < 276 then
texture('sub_models/decals/decal_a.png', v_pos, v_u, v_v)
else
if select1 < 301 then
texture('sub_models/decals/decal_b.png', v_pos, v_u, v_v)
else
if select1 < 326 then
texture('sub_models/decals/decal_c.png', v_pos, v_u, v_v)
else
if select1 < 351 then
texture('sub_models/decals/decal_d.png', v_pos, v_u, v_v)
else
if select1 < 376 then
texture('sub_models/decals/decal_e.png', v_pos, v_u, v_v)
else
if select1 < 401 then
texture('sub_models/decals/decal_f.png', v_pos, v_u, v_v)
else
if select1 < 426 then
texture('sub_models/decals/decal_g.png', v_pos, v_u, v_v)
else
if select1 < 451 then
texture('sub_models/decals/decal_h.png', v_pos, v_u, v_v)
else
if select1 < 476 then
texture('sub_models/decals/decal_i.png', v_pos, v_u, v_v)
else
if select1 < 501 then
texture('sub_models/decals/decal_j.png', v_pos, v_u, v_v)
else
if select1 < 526 then
texture('sub_models/decals/decal_a.png', v_pos, v_u, v_v)
else
if select1 < 551 then
texture('sub_models/decals/decal_b.png', v_pos, v_u, v_v)
else
if select1 < 576 then
texture('sub_models/decals/decal_c.png', v_pos, v_u, v_v)
else
if select1 < 601 then
texture('sub_models/decals/decal_d.png', v_pos, v_u, v_v)
else
if select1 < 626 then
texture('sub_models/decals/decal_e.png', v_pos, v_u, v_v)
else
if select1 < 651 then
texture('sub_models/decals/decal_f.png', v_pos, v_u, v_v)
else
if select1 < 676 then
texture('sub_models/decals/decal_g.png', v_pos, v_u, v_v)
else
if select1 < 701 then
texture('sub_models/decals/decal_h.png', v_pos, v_u, v_v)
else
if select1 < 726 then
texture('sub_models/decals/decal_i.png', v_pos, v_u, v_v)
else
if select1 < 751 then
texture('sub_models/decals/decal_j.png', v_pos, v_u, v_v)
else
if select1 < 776 then
texture('sub_models/decals/decal_a.png', v_pos, v_u, v_v)
else
if select1 < 801 then
texture('sub_models/decals/decal_b.png', v_pos, v_u, v_v)
else
if select1 < 826 then
texture('sub_models/decals/decal_c.png', v_pos, v_u, v_v)
else
if select1 < 851 then
texture('sub_models/decals/decal_d.png', v_pos, v_u, v_v)
else
if select1 < 876 then
texture('sub_models/decals/decal_e.png', v_pos, v_u, v_v)
else
if select1 < 901 then
texture('sub_models/decals/decal_f.png', v_pos, v_u, v_v)
else
if select1 < 926 then
texture('sub_models/decals/decal_g.png', v_pos, v_u, v_v)
else
if select1 < 951 then
texture('sub_models/decals/decal_h.png', v_pos, v_u, v_v)
else
if select1 < 976 then
texture('sub_models/decals/decal_i.png', v_pos, v_u, v_v)
else
if select1 > 975 then
texture('sub_models/decals/decal_j.png', v_pos, v_u, v_v)
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
the function needs some arguments
decal(set,v_pos,v_u,v_v)
the idea behind is to make it more flexible,
let's say one likes to add a new set of decals and even perhaps a own routine to select them, thats why i added the "set" to the arguments.
v_pos,v_u,v_v, is only ment if one likes to implement the function to a scripted model, but unfortunatly you have to pass all arguments to call the function now
(still that is all ment to be called from the dynamic section)
that would be then
decal(1,v(0,0,0),v(0,0,0),v(0,0,0))
if you call the function for as texture for a .obj
material i left up to the modeler to assign a own one.
this one would replace the squad sign or affiliation
info = {
bounding_radius = 1,
materials = {'squad'},
},
static = function(lod)
use_material('squad')
end,
dynamic = function(lod)
selector1()
if select1 < 201 then
set_material('squad', .5,0,0,.99,.6,.6,.6,30)
else
if select1 < 401 then
set_material('squad', .45,.35,.01,.99,.6,.6,.6,30)
else
if select1 < 601 then
set_material('squad', 0,.15,.7,.99,.6,.6,.6,30)
else
if select1 < 801 then
set_material('squad', .06,.35,0,.99,.6,.6,.6,30)
else
if select1 > 800 then
set_material('squad', .2,0,.35,.99,.6,.6,.6,30)
end
end
end
end
end
end
})
define_model('squadsign_1', {
info = {
bounding_radius = 1,
materials = {'squad'},
},
static = function(lod)
use_material('squad')
texture('squad_1.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
zbias(100,v(0,0,0),v(0,0,0))
quad(v(0,0,0), v(0,1,0), v(0,1,1), v(0,0,1))
zbias(0)
end,
dynamic = function(lod)
selector1()
if select1 < 201 then
set_material('squad', .5,0,0,.99,.2,.2,.2,10)
else
if select1 < 401 then
set_material('squad', .45,.35,.01,.99,.2,.2,.2,10)
else
if select1 < 601 then
set_material('squad', 0,.15,.7,.99,.2,.2,.2,10)
else
if select1 < 801 then
set_material('squad', .06,.35,0,.99,.2,.2,.2,10)
else
if select1 > 800 then
set_material('squad', .2,0,.35,.99,.2,.2,.2,10)
end
end
end
end
end
end
})
define_model('imp_sign_1', {
info = {
bounding_radius = 1,
materials = {'mat'},
},
static = function(lod)
set_material('mat',.7,.68,.65,.99,.2,.2,.2,10)
end,
dynamic = function(lod)
selector1()
if select1 < 201 then
texture('sub_models/squadsign/impsign_0.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 401 then
texture('sub_models/squadsign/impsign_1.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 601 then
texture('sub_models/squadsign/impsign_2.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 < 801 then
texture('sub_models/squadsign/impsign_3.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
else
if select1 > 800 then
texture('sub_models/squadsign/impsign_4.png', v(0,0,0), v(0,0,-1), v(0,-1,0))
end
end
end
end
end
use_material('mat')
zbias(100,v(0,0,0),v(0,0,0))
quad(v(0,0,0), v(0,1,0), v(0,1,1), v(0,0,1))
zbias(0)
end
})
function imp_sign(set,v_pos,v_u,v_v)
-- preset, because i need time to update my models
local set = 1
local v_pos = v(0,0,0)
local v_u = v(-1,0,0)
local v_v = v(0,-1,0)
if set == 1 then
selector1()
if select1 < 201 then
texture('sub_models/squadsign/impsign_0.png', v_pos, v_u, v_v)
else
if select1 < 401 then
texture('sub_models/squadsign/impsign_1.png', v_pos, v_u, v_v)
else
if select1 < 601 then
texture('sub_models/squadsign/impsign_2.png', v_pos, v_u, v_v)
else
if select1 < 801 then
texture('sub_models/squadsign/impsign_3.png', v_pos, v_u, v_v)
else
if select1 > 800 then
texture('sub_models/squadsign/impsign_4.png', v_pos, v_u, v_v)
end
end
end
end
end
end
end
function fed_sign(set,v_pos,v_u,v_v)
-- preset, because i need time to update my models
local set = 1
local v_pos = v(0,0,0)
local v_u = v(-1,0,0)
local v_v = v(0,-1,0)
if set == 1 then
selector1()
if select1 < 201 then
set_material('squad', .5,0,0,.99,.2,.2,.2,10)
else
if select1 < 401 then
set_material('squad', .45,.35,.01,.99,.2,.2,.2,10)
else
if select1 < 601 then
set_material('squad', 0,.15,.7,.99,.2,.2,.2,10)
else
if select1 < 801 then
set_material('squad', .06,.35,0,.99,.2,.2,.2,10)
else
if select1 > 800 then
set_material('squad', .2,0,.35,.99,.2,.2,.2,10)
end
end
end
end
end
end
texture('sub_models/squadsign/squad_1.png', v_pos, v_u, v_v)
use_material('squad')
end
it's will be called like the decal function now and needs to get some information from you 😉
that's again set,v_pos,v_u,v_v
i.e.
imp_sign(1,v(0,0,0),(0,0,-1),v(0,-1,0))
if one would like to use it in a scripted model using a quad sized 1x1
actually this is overridden by me because i need some time to update my existing models.
but if one likes to use the new script allready, i can only recommend to use it in the above shown way.
i guess i will have to update all models to use the function, then i will remove the old model from the script.
fortunatly not many except myself used it until now.
still i could explain how to place a pre-modeled decal, the system behind is useful for any transformation you like to do into a script.
this upgraded function allows you to make small texture animations for the decals. 😎
in future the script will look like this, because it makes no sense to have three functions doing the same.
imperial, federal, alien or half machine half beast, will be selected by set argument
if set == 1 then
selector1()
if select1 < 26 then
texture('sub_models/decals/decal_a.png', v_pos, v_u, v_v)
else
if select1 < 51 then
texture('sub_models/decals/decal_b.png', v_pos, v_u, v_v)
else
if select1 < 76 then
texture('sub_models/decals/decal_c.png', v_pos, v_u, v_v)
else
if select1 < 101 then
texture('sub_models/decals/decal_d.png', v_pos, v_u, v_v)
else
if select1 < 126 then
texture('sub_models/decals/decal_e.png', v_pos, v_u, v_v)
else
if select1 < 151 then
texture('sub_models/decals/decal_f.png', v_pos, v_u, v_v)
else
if select1 < 176 then
texture('sub_models/decals/decal_g.png', v_pos, v_u, v_v)
else
if select1 < 201 then
texture('sub_models/decals/decal_h.png', v_pos, v_u, v_v)
else
if select1 < 226 then
texture('sub_models/decals/decal_i.png', v_pos, v_u, v_v)
else
if select1 < 251 then
texture('sub_models/decals/decal_j.png', v_pos, v_u, v_v)
else
if select1 < 276 then
texture('sub_models/decals/decal_a.png', v_pos, v_u, v_v)
else
if select1 < 301 then
texture('sub_models/decals/decal_b.png', v_pos, v_u, v_v)
else
if select1 < 326 then
texture('sub_models/decals/decal_c.png', v_pos, v_u, v_v)
else
if select1 < 351 then
texture('sub_models/decals/decal_d.png', v_pos, v_u, v_v)
else
if select1 < 376 then
texture('sub_models/decals/decal_e.png', v_pos, v_u, v_v)
else
if select1 < 401 then
texture('sub_models/decals/decal_f.png', v_pos, v_u, v_v)
else
if select1 < 426 then
texture('sub_models/decals/decal_g.png', v_pos, v_u, v_v)
else
if select1 < 451 then
texture('sub_models/decals/decal_h.png', v_pos, v_u, v_v)
else
if select1 < 476 then
texture('sub_models/decals/decal_i.png', v_pos, v_u, v_v)
else
if select1 < 501 then
texture('sub_models/decals/decal_j.png', v_pos, v_u, v_v)
else
if select1 < 526 then
texture('sub_models/decals/decal_a.png', v_pos, v_u, v_v)
else
if select1 < 551 then
texture('sub_models/decals/decal_b.png', v_pos, v_u, v_v)
else
if select1 < 576 then
texture('sub_models/decals/decal_c.png', v_pos, v_u, v_v)
else
if select1 < 601 then
texture('sub_models/decals/decal_d.png', v_pos, v_u, v_v)
else
if select1 < 626 then
texture('sub_models/decals/decal_e.png', v_pos, v_u, v_v)
else
if select1 < 651 then
texture('sub_models/decals/decal_f.png', v_pos, v_u, v_v)
else
if select1 < 676 then
texture('sub_models/decals/decal_g.png', v_pos, v_u, v_v)
else
if select1 < 701 then
texture('sub_models/decals/decal_h.png', v_pos, v_u, v_v)
else
if select1 < 726 then
texture('sub_models/decals/decal_i.png', v_pos, v_u, v_v)
else
if select1 < 751 then
texture('sub_models/decals/decal_j.png', v_pos, v_u, v_v)
else
if select1 < 776 then
texture('sub_models/decals/decal_a.png', v_pos, v_u, v_v)
else
if select1 < 801 then
texture('sub_models/decals/decal_b.png', v_pos, v_u, v_v)
else
if select1 < 826 then
texture('sub_models/decals/decal_c.png', v_pos, v_u, v_v)
else
if select1 < 851 then
texture('sub_models/decals/decal_d.png', v_pos, v_u, v_v)
else
if select1 < 876 then
texture('sub_models/decals/decal_e.png', v_pos, v_u, v_v)
else
if select1 < 901 then
texture('sub_models/decals/decal_f.png', v_pos, v_u, v_v)
else
if select1 < 926 then
texture('sub_models/decals/decal_g.png', v_pos, v_u, v_v)
else
if select1 < 951 then
texture('sub_models/decals/decal_h.png', v_pos, v_u, v_v)
else
if select1 < 976 then
texture('sub_models/decals/decal_i.png', v_pos, v_u, v_v)
else
if select1 > 975 then
texture('sub_models/decals/decal_j.png', v_pos, v_u, v_v)
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
if set == fed then
selector1()
if select1 < 201 then
set_material('squad', .5,0,0,.99,.2,.2,.2,10)
else
if select1 < 401 then
set_material('squad', .45,.35,.01,.99,.2,.2,.2,10)
else
if select1 < 601 then
set_material('squad', 0,.15,.7,.99,.2,.2,.2,10)
else
if select1 < 801 then
set_material('squad', .06,.35,0,.99,.2,.2,.2,10)
else
if select1 > 800 then
set_material('squad', .2,0,.35,.99,.2,.2,.2,10)
end
end
end
end
end
texture('sub_models/decal/squad_1.png', v_pos, v_u, v_v)
use_material('squad')
end
if set == imp then
selector1()
if select1 < 201 then
texture('sub_models/decal/impsign_0.png', v_pos, v_u, v_v)
else
if select1 < 401 then
texture('sub_models/decal/impsign_1.png', v_pos, v_u, v_v)
else
if select1 < 601 then
texture('sub_models/decaln/impsign_2.png', v_pos, v_u, v_v)
else
if select1 < 801 then
texture('sub_models/decal/impsign_3.png', v_pos, v_u, v_v)
else
if select1 > 800 then
texture('sub_models/decal/impsign_4.png', v_pos, v_u, v_v)
end
end
end
end
end
end
-- a new set starts from here
end
i will have to move all textures to decals, but thats worth the profit to have one function for all purpose.
further this would allow to decide which symbol is shown by the players affiliation, of course that isn't yet possible but maybe in future.
Thanks. Btw, if you replace all of your:
if
with this:
you won't need to have this:
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
😉
Sounds great. I remember I did some space station models years ago for a freelancer mod that never got accepted (Cause I suck at 3D modeling!) 😳 I had more but I can't find them in the folder.
[hsimg] http://i54.tinypic.com/o08iu9.jp g" target="_blank">http://i54.tinypic.com/o08iu9.jp g"/> [/hsimg]
Anyways maybe I can try to build a basic concept for a space craft.
😳 yes, i know...
---
and wings3d is not bad, no "useless" features, .obj export incl .mat lib, perhaps you have to remove the "matlib" line at start of the object, if you don't use the .mat lib (using .mat is possible but prevents from using smaller textures for smaller LOD with the same object).
using matlib materials settings causes sometimes problems (if that is still the same), i didn't use it since i discovered that, except if i like to join meshes using different textures but the same material, like i did for all XWA conversions.
materials specified in a script will override .mat lib.
this are screenshots from the cobra3 how she came with pioneer using materials from matlib, i only changed the view angle.
that would be the proper lighting
then suddenly this happens
if set == 1 then
selector1()
if select1 < 26 then
texture('sub_models/decals/decal_a.png', v_pos,v_u,v_v)
elseif select1 < 51 then
texture('sub_models/decals/decal_b.png', v_pos,v_u,v_v)
elseif select1 < 76 then
texture('sub_models/decals/decal_c.png', v_pos,v_u,v_v)
elseif select1 < 101 then
texture('sub_models/decals/decal_d.png', v_pos,v_u,v_v)
elseif select1 < 126 then
texture('sub_models/decals/decal_e.png', v_pos,v_u,v_v)
elseif select1 < 151 then
texture('sub_models/decals/decal_f.png', v_pos,v_u,v_v)
elseif select1 < 176 then
texture('sub_models/decals/decal_g.png', v_pos,v_u,v_v)
elseif select1 < 201 then
texture('sub_models/decals/decal_h.png', v_pos,v_u,v_v)
elseif select1 < 226 then
texture('sub_models/decals/decal_i.png', v_pos,v_u,v_v)
elseif select1 < 251 then
texture('sub_models/decals/decal_j.png', v_pos,v_u,v_v)
elseif select1 < 276 then
texture('sub_models/decals/decal_a.png', v_pos,v_u,v_v)
elseif select1 < 301 then
texture('sub_models/decals/decal_b.png', v_pos,v_u,v_v)
elseif select1 < 326 then
texture('sub_models/decals/decal_c.png', v_pos,v_u,v_v)
elseif select1 < 351 then
texture('sub_models/decals/decal_d.png', v_pos,v_u,v_v)
elseif select1 < 376 then
texture('sub_models/decals/decal_e.png', v_pos,v_u,v_v)
elseif select1 < 401 then
texture('sub_models/decals/decal_f.png', v_pos,v_u,v_v)
elseif select1 < 426 then
texture('sub_models/decals/decal_g.png', v_pos,v_u,v_v)
elseif select1 < 451 then
texture('sub_models/decals/decal_h.png', v_pos,v_u,v_v)
elseif select1 < 476 then
texture('sub_models/decals/decal_i.png', v_pos,v_u,v_v)
elseif select1 < 501 then
texture('sub_models/decals/decal_j.png', v_pos,v_u,v_v)
elseif select1 < 526 then
texture('sub_models/decals/decal_a.png', v_pos,v_u,v_v)
elseif select1 < 551 then
texture('sub_models/decals/decal_b.png', v_pos,v_u,v_v)
elseif select1 < 576 then
texture('sub_models/decals/decal_c.png', v_pos,v_u,v_v)
elseif select1 < 601 then
texture('sub_models/decals/decal_d.png', v_pos,v_u,v_v)
elseif select1 < 626 then
texture('sub_models/decals/decal_e.png', v_pos,v_u,v_v)
elseif select1 < 651 then
texture('sub_models/decals/decal_f.png', v_pos,v_u,v_v)
elseif select1 < 676 then
texture('sub_models/decals/decal_g.png', v_pos,v_u,v_v)
elseif select1 < 701 then
texture('sub_models/decals/decal_h.png', v_pos,v_u,v_v)
elseif select1 < 726 then
texture('sub_models/decals/decal_i.png', v_pos,v_u,v_v)
elseif select1 < 751 then
texture('sub_models/decals/decal_j.png', v_pos,v_u,v_v)
elseif select1 < 776 then
texture('sub_models/decals/decal_a.png', v_pos,v_u,v_v)
elseif select1 < 801 then
texture('sub_models/decals/decal_b.png', v_pos,v_u,v_v)
elseif select1 < 826 then
texture('sub_models/decals/decal_c.png', v_pos,v_u,v_v)
elseif select1 < 851 then
texture('sub_models/decals/decal_d.png', v_pos,v_u,v_v)
elseif select1 < 876 then
texture('sub_models/decals/decal_e.png', v_pos,v_u,v_v)
elseif select1 < 901 then
texture('sub_models/decals/decal_f.png', v_pos,v_u,v_v)
elseif select1 < 926 then
texture('sub_models/decals/decal_g.png', v_pos,v_u,v_v)
elseif select1 < 951 then
texture('sub_models/decals/decal_h.png', v_pos,v_u,v_v)
elseif select1 < 976 then
texture('sub_models/decals/decal_i.png', v_pos,v_u,v_v)
elseif select1 > 975 then
texture('sub_models/decals/decal_j.png', v_pos,v_u,v_v)
end
end
if set == fed then
selector1()
if select1 < 201 then
set_material('squad', .5,0,0,.99,.2,.2,.2,10)
elseif select1 < 401 then
set_material('squad', .45,.35,.01,.99,.2,.2,.2,10)
elseif select1 < 601 then
set_material('squad', 0,.15,.7,.99,.2,.2,.2,10)
elseif select1 < 801 then
set_material('squad', .06,.35,0,.99,.2,.2,.2,10)
elseif select1 > 800 then
set_material('squad', .2,0,.35,.99,.2,.2,.2,10)
end
texture('sub_models/decal/squad_1.png', v_pos, v_u, v_v)
use_material('squad')
end
if set == imp then
selector1()
if select1 < 201 then
texture('sub_models/decal/impsign_0.png', v_pos, v_u, v_v)
elseif select1 < 401 then
texture('sub_models/decal/impsign_1.png', v_pos, v_u, v_v)
elseif select1 < 601 then
texture('sub_models/decaln/impsign_2.png', v_pos, v_u, v_v)
elseif select1 < 801 then
texture('sub_models/decal/impsign_3.png', v_pos, v_u, v_v)
elseif select1 > 800 then
texture('sub_models/decal/impsign_4.png', v_pos, v_u, v_v)
end
end
-- a new set starts from here
end
satisfied? 😉
hehe
wow awesome work Gernot 😉
It is very nice to see some organic animation. I think if you wanted to imply a 'live' alien ship this is great.
additionally, you should check out the game biohazard battle for the sega genesis... a shooter featuring living organic ships, yours really reminds me of this.
getting closer
Its a Void-Hawk?
i named it Gul, but if you have any good idea for a name, i will appreciate. Void Hawk... not bad, where is that from?
instead of a lot of screenshots a presentation,
get that bird at the download area,
for the very keen ones, that small gap between top and bottom, will be fixed.
this happens because the movement for top and bottom is not in the same part-model and uses not the same vectors.
Void-hawk is a living ship from the 'Night's Dawn trilogy' of books by Peter F. Hamilton. Although I think they are more of a tear-drop/ovoid shape.
Have you also created a seperate collision mesh? As the movement of the mesh will cause the collision mesh to get updated every frame if it doesnt have a seperate one.
not for the scripted part of the model. no need to, since that is easy to handle for pioneer and the bezier stuff will use much less divisions at LOD1. to use no textures for LOD1 is the more important thing to keep a good framerate, imo.
I showed the model to John and Tom, they reckon you will need a proper collision mesh because every time the model moves it re calculates the entire mesh, which is bad.
oh, i don't wanna fight...
if i think that it was my idea (experience) to reserve LOD1 as collision mesh only... 😉
of course you could use LOD1 as lowest visible, but like i said textures kill the framerate even on a small model.
to find the proper material that equals to the color of the textured material is nearly impossible, the eagle and the ip shuttle was build that way in the beginning, but i never found a good setting so you won't see when the LOD changes.
Later when i converted the lanner, i encountered some problems using the texture like it was for done for the cobra3.
that's when i started to set LOD1 to .1 which is never visible. that is in fact a loss of one LOD for the model.
the slow down is really extreme when you load a model using textures at LOD1, you can feel that in the moment you purchased the ship, because then the collision data starts to get calculated (you won't feel that in the modelviewer), you remember of course the troubles the panther gave you.
i will have anyway to review the scripted part, because of the previous described gap, so i can add a stiff collision mesh as well in no time.
problems i haven't encountered so far, it's not "slower" then any other model using 17k tri's.
[attachment=555:2011-02-18_174454.jpg]
I was just pointing something out to you that you might not have realised. I didnt realise it until it was pointed out to me 🙂
So does it run well anyway? I don't really have time to check it out at the moment, so I haven't been able to see if hte moving mesh makes any difference at all.
It would be interesting if you could somehow get it to only flap its wings in an atmosphere 🙂
Yes I remember the slideshow 🙂 It was sooo slow for undocking from a station.