Windows Warp3D - Beta Version Out Now!

Joe Ellis

Member
Awesome :D sort of like an extrude tool?
Yeah its just extrusion really but it measures the edges of the quad, gets the mean length and then extrudes it that far to make it as close to cubic as it can, so its really good for quickly forming stuff like you can with voxels. It's also given me the idea of it making other shapes like a tent, pyramids and
extruding polygons into other types of polygons

Untitled.png
 

Joe Ellis

Member
@Joe Ellis Think you've got a release date for us soon? ;P
My fingers are literally itching to get a hold of this ^^
I'm gonna release a beta version before its completely finished, cus I feel bad how people are waiting, so I'll do that some time next week..
I could release it now but theres too many bugs, people would probably get annoyed that I'd released it in that state :/
 

Kentae

Member
I'm gonna release a beta version before its completely finished, cus I feel bad how people are waiting, so I'll do that some time next week..
I could release it now but theres too many bugs, people would probably get annoyed that I'd released it in that state :/
Ooo :O That'd be awesome ^^ Can't wait :D
 

Joe Ellis

Member
Sorry for anyone waiting for the beta version, it still isnt ready :/ Its taking alot longer than I expected,
I'm gonna have to in future say "soon" instead of "a few days"
I'm going as fast as I can, I just hope I haven't annoyed anyone.

Anyway heres a couple of videos, one is showing the collision system and the other showing a few parts of the menus

https://cdn.discordapp.com/attachments/385878164112408576/466726367111675904/Collision_1.avi
https://cdn.discordapp.com/attachments/385878164112408576/466726495294062592/Gui_1.avi
 

Joe Ellis

Member
Heres a character model I'm working on, its not finished yet, I'm gonna add a few edge loops and will subdivide the model twice,
But I need to add those functions first










 
  • Like
Reactions: Zek

Joe Ellis

Member
I just released the beta version, it was one of those **** it moments, I thought, if I'm testing it out and enjoying using it, why cant other people, even though its not finished.
However, this version is completely provided "as is", and there is no help file, feel free to ask me on here or private message and I'll give you in depth instructions on it..
The price is 20 dollars, and the stable version will be around $40, so this could be thought of as a pre-order for the stable version.

There are alot of unfinished features and I don't know exactly how many bugs there are,
but I wanted to release this version so that people who have decided they want this program to get it cheaper and so that they dont have to wait as long before they can try it out.

https://marketplace.yoyogames.com/assets/7111/warp3d
 
Last edited:

Joe Ellis

Member
Small update-

I was on vacation last week, so I haven't done that much recently, but I've made a few random things and bug fixes:

  • New model processes: subdivision, welding vertices(if near\in same place) and a "spherize" function, allowing to create custom spheres from other convex shapes (such as cube)


  • HSL color picker, with hue ranging from 0 to 1530, allows more colors than standard make_color_hsv


  • Toon shader with outline rendering (with hard or soft edges and adjustable thickness)



Other processes I'm currently working on:
  • Mesh smoothing
  • Erosion
  • Randomizing vertex positions, colors & uvs
  • Snap vertices to grid - gets nearest grid pos (round floor or ceil)
  • Aligning model to origin (central, far left\right\top\bottom etc.)- per axis so you can center the model origin along x&y while making the lowest point of the model (eg. the feet) level with the floor

Triangulate vertices or edges
  • Delaunay(2d\flat) using camera view, or plane x y or z - if edges are selected(like a polygon edge loop), it will triangulate in a constrained way, so that the shape can be concave, if only vertices are selected it will be convex
  • 3d triangulation (using vertices only) with variables: min distance & max distance, to allow concave meshes

Extrude
  • From selected edge(s)
quad strip (eg. a curved road) variables: # steps, turning per step(yaw, pitch, roll), scaling, curve frequency
triangle fan (eg. a pavement corner)

  • Lathe -from edge loop or selected edges using center as radial point
variables: # steps, per step- twist, taper, turning(yaw pitch), curve


  • Project vertices onto faces- with silohette edge loop or selected vertices
Can either intersect\merge with the mesh, or just stick\lay the vertices onto it
 

Joe Ellis

Member
I've worked out a way of depixelizing the shadow map, and the results are really good.
Before it used the standard pcf(percentage closer filtering) method,
and now it uses a multitap average comparison, and removes almost all
pixel edges, I might be able to improve it further but this is the best result iv got so far.

Here are some comparisons

The 1st image uses the standard pcf method
and the second uses my new depixelizing technique

(Both versions are using the same shadowmap, at the same resolution)











 
Last edited:

Kentae

Member
That looks absolutley amazing :O Would've loved to have such shadows in my own game engine ^^
My question though: Is the chair floating in the air? or are the shadows a tad unprecise?
 

Joe Ellis

Member
It's floating, theres no offset or anything,
The shaders I've posted use "Id mapping", but depth mapping is also available,
Id mapping is faster because it uses just two color components, one for the course Id (red, per object) and the second for the fine id (green) which enables objects to self shadow on different parts of themselves,
depth mapping is easier to set up and objects self shadow automatically but is slower to process cus of packing and unpacking the depth data.
I chose Id mapping as the default cus you get to choose whether objects cast shadows onto each other or not, for instance if you wanted buildings to cast shadows on the characters, but you dont wanna waste power making each character cast shadows on each other, cus most of the time you wont even notice. (or if it doesnt suit the style)

The test project I've got doing that is just while I'm testing and developing it, I can't wait to get it in the main engine, its almost ready.
I've made a global shadowmap setup, where the shadowmap (surface texture id) is rendered and setup as "global.shadowmap", so any instance using a shadowmap shader can instantly use it.
I've made a pretty big update this week where all uniforms sent to shaders are handled with regular variables from each instance by linking them.
Theres a couple of scripts: render_refresh, and entitiy_link_uniforms, where all this gets sorted out, its a pretty complex process but it works really fast, fast enough to perform every frame, but it only has to be done once at the start of the level.. or if new entities get spawned, but those scripts set global.render_update to true.
Plus you're able to switch which "groups" are rendered, like if the game is quite enclosed, only the area your in needs to be rendered, so your able to put all the objects in that area in a "Group", and then tell the camera to just render that group :D
 

Joe Ellis

Member
-Update

I've done a huge restructuring of the entire engine and gui, making it more flexible and robust,

All data for the game world is handled with "nodes" (2d arrays), each node contains other nodes,

such as lists of variables, objects, triangles,

all nodes are accessible in a single browser list, rather than different properties windows per object,

you simply browse through the world's list of objects and double click on one to edit \"go inside it" like a folder,

here all the variables of that object\node are shown and editable, with open\closable sections

making the gui alot cleaner and easier to navigate through.

The game is now run through "obj_engine", which is the controller object for the game,

here you can load worlds, pause, play, stop, reset, save\load states, etc.

and also add objects to the world on the fly.


I've merged the 3 editors(Dashboard, World Editor, Model Editor) into one. Now models & assets can be created & edited directly

inside editing a level, rather than having to close the level and edit the asset separatly on its own.


Some new types have been added:


"Sequences" which allow animations of any variable that exists, with merging(interpolation between frames) & looping

"Classes" for defining different types of objects and their variables,

such as different types of enemies, collectables and weapons

"Static Models" which exist as arrays rather than instances, improving performance due to not having instances with no

step event taking up processing power.

"Static Collision Grid" which is contained inside each static model built from all of its "solid" triangles, divided into cells

with settable flags per triangle: Solid\Liquid, Climbable, cast shadows; and allow attatching scripts (per object)

that get activated upon collision, such as harmful liquids, slippery surfaces, conveyor belts and water currents,

elevator beams, fans, magnets, speed affectors & anti gravity zones,

"Triggers" Predefined sets of scripts and arguments, which allow setting up actions inside the editor

"Sky Objects" Which get rendered in a separate group to the rest of the world, to ensure that theyre rendered "behind" everything else.

Allows setting up sky spheres, moving layers of clouds, and general backgrounds like gradients & paralax scrolling.




I'll upload this update soon when its all up and running and bug free : )

Also, this should bring it out of beta and become Version 1.0

then there'll be version 1.1 will have more presets and example projects

and maybe 1.2 will be compatible with gms2 aswell
 

Joe Ellis

Member
Heres a quick update of what iv been doing the past few weeks -

I've rebuild most of the stucture of the engine and editor with the new "nodes" system I came up with a few weeks ago,
and its working really well, and has bridged the gap between the rendering system and the game engine side of it.
There's a "Class" system which is a bridge between objects and instances, which are basically "sub-objects" and helps to keep common functions within objects but allow separate things to run per instance, which helps combine alot of similar objects doing similar things where there's no need to make a whole separate object for them, just similar instances with slightly different variables, like a weapon pickup... A rocket launcher?! what about a shotgun? Health, Armour, Ammo,
They all fall under the same object type which is a "pickup", then slightly different variables make them do the required thing.

Iv made alot of technical improvements which have made the engine alot more dynamic.. adding objects to the render list on the fly,
which adds\removes shaders and materials if and when they're needed.

The gui is also alot more fluid, allowing multiple files to be open at once, so you can go between editing several levels, models and materials
at the same time.

Now I just need to finish all the "tools", which I've got most of the actual processes sorted but theres alot of menu things and options for each of them that I need to finalize...

(Ps, you can tell I'm near finishing this cus I've only got really technical boring stuff to talk about)

Thanks Rich (Rich is the best)
 
Last edited:

Joe Ellis

Member
Maybe upload it to youtube?
Yeah I'll do that, but whenever I've put stuff on youtube before it ends up really bad quality and blurry, and on this video you need to see the small font,
Do you or anyone know how to upload videos in hd? cus obviously loads of people do, I'm guessing its when you pay for a premium account.

Did you have trouble downloading the video?
 

sylvain_l

Member
Yeah I'll do that, but whenever I've put stuff on youtube before it ends up really bad quality and blurry, and on this video you need to see the small font,
Do you or anyone know how to upload videos in hd? cus obviously loads of people do, I'm guessing its when you pay for a premium account.
you should be able to upload up to 1080p on youtube without any trouble. Higher res like 4k are I think limited to premium and so. But you should still be able to upload the file even with higher resolution, just tried it now with an old 1440p:
Just know, that it'll be only available on 1080p and lower resolution.

EDIT: I stand corrected; it's even available in 1440p :)
 

Joe Ellis

Member

you should be able to upload up to 1080p on youtube without any trouble. Higher res like 4k are I think limited to premium and so. But you should still be able to upload the file even with higher resolution, just tried it now with an old 1440p:
Just know, that it'll be only available on 1080p and lower resolution.

EDIT: I stand corrected; it's even available in 1440p :)
Thanks, it seemed to work ok, It's been a while since I last tried to upload a video, they must've improved the quality, it's still abit worse than the original video but the text is readable at least
 
Last edited:

Joe Ellis

Member
Well, no updated build yet, but I've rebuilt the rendering system to support multiple materials per instance, per vertex buffer,
Before you could only have 1 material per vertex buffer per model, but now it works per instance, so now you can change certain instance's materials individually.
The main practical uses I'm thinking of are using different textures\skins for different characters while using the same model, but there are loads of other things possible really and it's actually an optimization because it allows you to re-use a model in several different material setups :D
 

inertias

Member
This is seriously amazing and something I've always wanted for game maker. I'll definitely look into buying this when it's released.
Would like to see some first person camera game play too. :)
 

Joe Ellis

Member
I've decided when the first stable version is released, I'm going to release a free exe version of it aswell.
It'll be classed as the demo, but it'll have all the features in the program,
except the fact that its not a gamemaker project, so you cant add any new scripts,
This'll be perfect for trying it out and anything you make on it can be loaded into the real version.
I'll upload the exe directly here on the first post :DD

 
Last edited:

Joe Ellis

Member
Thanks guys, got a special video comin your way soon, *whispers:*(Spyro orientated)
It's not actually that good, but I just decided to film me trying out all the spyro levels I've got saved as FBX files, since I got the fbx importer fully rigged up and working with the program, but none of them have got textures on so its like spot the level, lolololol
 

BG Games

Member
I express to you my deep appreciation for such a huge contribution to the development of 3d on Game Maker. Tell me, does your extension have any methods that optimize the rendering of open spaces, scenes with a high number of models, for example frustum culling, bsp map, a system of portals? How is the world presented in the end? Each item is a box, table, picture, chair, bush and tree. Are these separate models? Is the landscape one plane or the landscape is divided into blocks and it is possible to texture each block separately? Something like tiles in 3d?
 

Kentae

Member
Thanks guys, got a special video comin your way soon, *whispers:*(Spyro orientated)
It's not actually that good, but I just decided to film me trying out all the spyro levels I've got saved as FBX files, since I got the fbx importer fully rigged up and working with the program, but none of them have got textures on so its like spot the level, lolololol
It just looks soo amazing! I'm especially excited to see how the animation tools work ^^
Btw... When you say that the FBX importer is fully rigged up and working, does that mean the animations too? :) Cause that would just be mindblowingly cool! ^^
( I need good 3D animations in my projects :O )
 

Joe Ellis

Member
@BG Games
Thanks! I try my best :)

For optimizing I've made a few functions which allow you to create a group (of objects) and add\remove them to\from the render cycle:
render_set_group, render_add_group, render_remove_group

The aim is to activate a certain group when the player enters each area, and only draws whats visible in that area.
This can be done really easily by creating events with touch triggers, so when the player enters a certain area,
it adds or sets that area's group to be rendered.

I'm going to make a function which creates a group of the objects that are visible from the camera's current location,
so this will make the group creation alot faster than selecting and doing it manually.

I haven't made any automatic culling methods yet, but I am juggling with a few ideas.
If I do add an automatic method, it will likely be a system that splits the level into cells or areas,
and then the engine keeps track of which area the camera is in, and renders the stuff visible in that area.

About how the level is presented in the end, its mostly left upto the user.
It works with 1 model per instance, so if you merge multiple models into groups\one instance per group, it'll be faster to render.
I'm adding a function which merges multiple instances and their models into one,
so it'd be possible to, when you've finished designing the level, bake all static models into one.
And I'm making a tileset generator to merge multiple textures onto one sheet which lets you have the
entire static parts of the level all in one model and vertex buffer.

The renderer upon adding and removing instances automatically sorts everything by which shader it uses, which materials use that shader,
which textures use that material and finally all instances that use that texture or set of textures.
With uniforms there are 3 scopes to choose where they get set: global\shader, material, and instance.
So things like the sun, ambient color, sun angle, are ideal for being global shader uniforms cus they're the same for every object,
so these only need to be set once per shader used.
Then uniforms that define a certain material, like the brightness, shininess, roughness etc. are set in material scope.
And finally, things that need to be per instance, like the frame merge ratio, or something custom like if each instance has a different color,
they can be set per instance.
So doing it like this shares as many uniforms as possible and cuts down the amount needed to be set by a big amount,
especially if you have hundreds of instances.

More info will be coming on events & triggers I mentioned soon, cus I'm just about to get them implemented.
They basically allow you to execute certain scripts when certain conditions are true,
like an object entering an area, an instance's variable being a certain value,
or when a weapon or item is picked up, or switch is pulled.
For a weapon or switch you can "attach" an event to it, using a variable called "pickup_event", "on_event", "off_event" etc.
so when the weapon is picked up, or switch is pulled, you can add this code:
if pickup_event
{event_trigger(pickup_event)}
And it'll do whatever is defined in the event.
These events are created and defined in the level editor, and it lets you choose the value of each argument per script,
so they can be really specific to that level and they'll be really versatile when it comes to making the level's logic.


@Kentae
No sorry, I was abit misleading with that, it doesnt import animations yet,
I need to complete the skeletal system before I can import and convert the data into Warp3d's format.
I meant that its fully rigged up into the program and you just click File > Open > Fbx Model
find the model file, double click on it and it loads it straight into the level as a normal Warp3D model.
I was just happy that I've got it that simple and integrated.
 

Kentae

Member
@Kentae
No sorry, I was abit misleading with that, it doesnt import animations yet,
I need to complete the skeletal system before I can import and convert the data into Warp3d's format.
I meant that its fully rigged up into the program and you just click File > Open > Fbx Model
find the model file, double click on it and it loads it straight into the level as a normal Warp3D model.
I was just happy that I've got it that simple and integrated.
That's ok ^^ Just figured I'd ask :)
 

Joe Ellis

Member
https://drive.google.com/open?id=1app0j8rj-c4B8qWNCDAwjcVX8UAwaq4l

Here's an exe demo of the shadows shader, you'll notice theres some glitches sometimes, and I'm still trying to figure out how to get rid of them, but hopefully I'll work that out soon, and when that's done it should be a pretty solid shadow system :D


Controls:

B Generate new blocks

numpad

- +: Increase\decrease shadowmap scale
* /: "Cap" maximum brightness
7-9: Brightness
4-6: Rotate Sun Yaw
8-2: Rotate Sun Pitch\Altitude
pgup-pgdown: Shadow Strength\Hardness
up-down: Shadow Blur
left-right: Shadow Bias (low cutoff) prevents edge bleeding
 
Last edited:

Joe Ellis

Member


I've implemented basic block collisions, which could be useful for collisions with moving\dynamic objects and general prototyping for levels.

Next on my list with this kind of thing is cylinder collisions :)
 

Joe Ellis

Member
I've almost finished the whole collisions system, supporting several mask types:
bbox
cuboid
cylinder
sphere
precise

All work between different masks, basically boiling down into 20 scripts:

bbox_bbox
bbox_cuboid
bbox_cylinder
bbox_sphere
bbox_precise

cuboid_bbox
cuboid_cuboid
cuboid_cylinder
cuboid_sphere
cuboid_precise

cylinder_bbox
cylinder_cuboid
cylinder_cylinder
cylinder_sphere
cylinder_precise

sphere_bbox
sphere_cuboid
sphere_cylinder
sphere_sphere
sphere_precise

Oh, except precise cus they cant move, they don't need to though, they're the level model
 

Joe Ellis

Member
I'm quite happy with this level model I made yesterday, it's the first "floating island castle" that I've made, which most of my game is gonna be like.
I'm hoping to get alot better in time, but this is part of my learning progress

3.png 4.png 5.png 6.png
 
Top