Jump to content

Mid-textures as fake voxels.


Recommended Posts

I've always thought about this as a possibility, but never implemented it into a map. This is really cool!

 

Cute deer btw <3

Share this post


Link to post

Very creative! I've seen similar things occasionally in random wads, although not to the level of detail or care you demonstrated. 
I really like using midtexture to "fake" 3D detailing where applicable.

 

Understanding its inherent tradeoffs (hollow top-bottom, those odd risks for slime or bleed that comes with detailing, aesthetic hang-ups, engine limitations, etc), out of genuine interest, would any with engine-knowledge be able to speak as to whether or not this method would have more/less processing requirements than voxels currently do? As far as I understand, from the times I've seen it discussed in the past, voxels are already pretty demanding.

Although it is cool, one way or another, that the alternative is still ever-present in ports that don't support voxels.

Edited by kwc

Share this post


Link to post
11 minutes ago, Sr_Ludicolo said:

Cute deer btw <3

Thank you! It's based off of the classic wood-carving deer model if you're interested.

 

Share this post


Link to post
4 minutes ago, kwc said:

Very creative! I've seen similar things occasionally in random wads, although not to the level of detail or care you demonstrated. 
I really like using midtexture to "fake" 3D detailing where applicable.

 

Understanding its inherent tradeoffs (hollow top-bottom, those odd risks for slime or bleed that comes with detailing, aesthetic hang-ups, etc), out of genuine interest, would any with engine-knowledge be able to speak as to whether or not this method would have more/less processing requirements than voxels currently do? As far as I understand, from the times I've seen it discussed in the past, voxels are already pretty demanding.

I'm no engine expert, but the way that I had set up the model in the test map is very specific - It's roughly 30 or so linedefs that intersect, but don't create vertexes. If I had set it up in the way that would have created vertexes - it would have created more than 100 linedefs, plus a bunch of useless 1px X 1px sectors, which would have been more resource intensive. But is my 30 or so linedef method more or less resource intensive than a normal voxel model? I'm not entirely sure, but I have a gut feeling that it's not resource intensive at all.

Share this post


Link to post

@Ar_e_en
That's excellent, I have the same gut feeling and I guess I ask because it's not a form of detailing that is super common, but I could imagine that could be chalked up to the amount of work that would go into putting it together relative to, well, making a map and combat encounters and all that other stuff mappers like to do :P

On the topic of the work that goes behind it, I'm curious as to your workflow up to the point where you dropped those graphics into the wad. I can see that it's a series of layers, I'm just wanting to know how you went about it and what kind of things you did to keep it all organized.

Edited by kwc

Share this post


Link to post

Yeah, you can do stuff like that. Check out Rekkr, it has a bunch of cool detail like that, and that's on something that's within Vanilla limits.

Mind that using lots and lots of midtextures for detail can start to add up eventually.

Share this post


Link to post

I don't know if I still have the WADs, but I remember trying to do this way back in 2014 on my old computer as a kid with MS Paint, XWE, and WadAuthor.

 

All I can say is that it sucked, and I didn't use any intersecting lines.

 

EDIT: I found the textures I used. Drawn by hand on MS Paint.

F6.png.d331f5ac58ba9ab058c4ebc156e376af.pngF5.png.6c33601e1b317aeef71e87ced95ef9e0.pngF4.png.e4563fc9388a9d91cf0c9a1ef0257048.pngF3.png.dd01cf1b7b09ed9f477c080dab58885d.pngF2.png.4265eec4ce629bc81d1496e5a9e44de3.pngF1.png.0e22781ad8169644820976e01cd6046e.png

Edited by Nikku4211

Share this post


Link to post
45 minutes ago, kwc said:

@Ar_e_en
That's excellent, I have the same gut feeling and I guess I ask because it's not a form of detailing that is super common, but I could imagine that could be chalked up to the amount of work that would go into putting it together relative to, well, making a map and combat encounters and all that other stuff mappers like to do :P

On the topic of the work that goes behind it, I'm curious as to your workflow up to the point where you dropped those graphics into the wad. I can see that it's a series of layers, I'm just wanting to know how you went about it and what kind of things you did to keep it all organized.

It was something like this:

DeerEX3.gif.f4606daea175fc88087896fc2954e30d.gif

 

I placed the side view and the front view (which was replaced by the back view as I neared the end) next to each other and using GIMP's line guides feature - I isolated a column of pixels on one side and cut out the corresponding section on the other side for one layer. I kept moving the guide line and cut the next bit out. Then I switched from using the front and back view as a guide for cutting the sides to using the sides as a guide for cutting the back and front view. It helps that the side views are basically the same, meaning that for those layers - I could just mirror them for the other side! I basically acted as a manual scanner.

 

The truth is that in retrospect I kinda did this wrong - I only used the one column of pixels as a guide. I actually should have used the space between 2 pixels as a guide.

Edited by Ar_e_en

Share this post


Link to post
8 minutes ago, ChopBlock223 said:

Yeah, you can do stuff like that. Check out Rekkr, it has a bunch of cool detail like that, and that's on something that's within Vanilla limits.

Mind that using lots and lots of midtextures for detail can start to add up eventually.

I specifically remember the 3D globe from the 1st episode, it wasn't really a fake voxel model, but the idea was pretty similar!

Share this post


Link to post

I had a similar idea but with 1-pixel wide sprites.

Shall I dub this "Fauxels"?

Faux + Voxels

Edited by dotQLL

Share this post


Link to post

Egregiously off-topic, but the title of this thread made me think of 1-voxel-thick destructible walls, which struck me as an interesting way to hide secret areas. Do any source ports support such a feature? It would be pretty cool to blast a hole in a wall to access a secret area.

Share this post


Link to post

I tried it in Boom, and there was a HOM on the sky. More HOMs on the sky kept appearing and disappearing.

FakeVoxRealHOM.png.e1ddcf9bf42ed98a35424580d8a534ff.png

 

Anyways, nice linedefoxel.

Share this post


Link to post
44 minutes ago, dotQLL said:

I had a similar idea but with 1-pixel wide sprites.

How would that work?

 

44 minutes ago, dotQLL said:

Shall I dub this "Fauxels"?

Faux + Voxels

Sure! If it catches on, it catches on!

 

12 minutes ago, Nikku4211 said:

I tried it in Boom, and there was a HOM on the sky. More HOMs on the sky kept appearing and disappearing.

FakeVoxRealHOM.png.e1ddcf9bf42ed98a35424580d8a534ff.png

 

Anyways, nice linedefoxel.

OOPS! I probably should have been more specific! When I said "Boom compatible" - I meant it in the sense that I tested this on Woof with the compatibility set to "Boom"! 

Sorry! I'm just stupid sometimes!

Share this post


Link to post
5 hours ago, Ar_e_en said:

So I made a little test map (Boom compatible, just because I wanted to add a compblue waterfall) with a fake voxel model of a deer made out of mid-textures. I didn't use any 3D software and the results aren't perfect, but I do think that there is merit to the idea. Maybe it is possible to convert a voxel model into a set of textures that can be used to create a fake voxel model in other more basic ports like Woof, PRBoom+, DSDA or even Vanilla. @jval might have more knowledge on this, guy has done a lot of work with real voxels!



 

This is a great idea! I tried the map and I was impressed by the fact that you're using only a few extra lines. This will also be faster to software rasterizers, since voxel rendering is CPU-hungry.

 

As for converting voxels in texture slices, many voxel editors strip the inside of the voxel, so that only the outer layer is actually present in data, so an automatic converter instead of 

image.png.c2620f4e68023112a5f13b5a7ce95e05.png

will produce this:

image.png.6392e3dc795fdd3af3f83e8a45b7a5dc.png

and then it must take the necessary steps to "fill" the gaps.

Obviously, moving objects will be limited to move into a line, with some work in texture scrolling and anims.

 

3 hours ago, Ar_e_en said:

It was something like this:

DeerEX3.gif.f4606daea175fc88087896fc2954e30d.gif

 

I placed the side view and the front view (which was replaced by the back view as I neared the end) next to each other and using GIMP's line guides feature - I isolated a column of pixels on one side and cut out the corresponding section on the other side for one layer. I kept moving the guide line and cut the next bit out. Then I switched from using the front and back view as a guide for cutting the sides to using the sides as a guide for cutting the back and front view. It helps that the side views are basically the same, meaning that for those layers - I could just mirror them for the other side! I basically acted as a manual scanner.

So, you've used the front view as a depth guide, and the side view a a buffer.  That works good for convex objects, but not with non convex objects. Still, it's impressive work, reminds me a paper I've read some time ago about depth buffer based voxelization (http://graphics.cs.aueb.gr/graphics/docs/papers/voxeliser.pdf), but I never tried to implement it due to the non convex limitation.

 

1 hour ago, dotQLL said:

I had a similar idea but with 1-pixel wide sprites.

25 minutes ago, Ar_e_en said:

How would that work?

This was my first attempt to render voxels in DelphiDoom (software rendering), I used 1 px sprites for each voxel column. The results were very good, the clipping was perfect, but unfortunatelly it was too slow and I descarted the idea.

 

Quote

OOPS! I probably should have been more specific! When I said "Boom compatible" - I meant it in the sense that I tested this on Woof with the compatibility set to "Boom"! 

Sorry! I'm just stupid sometimes!

Quick tested in Eternity, Doom-Retro, 3DGE, DelphiDoom & K8Vavoom and works OK.

 

 

Edited by jval

Share this post


Link to post
35 minutes ago, jval said:

This was my first attempt to render voxels in DelphiDoom (software rendering)

Was this attempt before DelphiDoom 1.1.4.580, which natively supports voxels even in the software renderer?

Edited by Nikku4211

Share this post


Link to post

I do this with some objects in my maps, but usually no more than two lines / two mid-textures doubled up to add a bit of depth. It prevents that annoying effect where, for example, if you look at a mid-texture tapestry at just the right angle (edge on) it completely disappears. It's visually weird when things disappear like that so adding an extra layer of mid-texture helps enormously.

 

na7XXi3.jpg


I'm a bit afraid to extend your many layered voxel concept completely to numerous pseudo-3D objects because of the strain it might put on the engine, but maybe 2 or 3 pieces per map in important locations can work.

 

I recall that Suspended in Dusk  uses this technique to create some architectural detail here and there, but especially at the end of the last level when Espi creates a small aircraft in a hangar (the darker shading on the ship isn't a part of the texture, that's just the GZDoom ambient occlusion).

 

Uh1GEDL.jpg

Edited by RDETalus

Share this post


Link to post
3 hours ago, Nikku4211 said:

Was this attempt before DelphiDoom 1.1.4.580, which natively supports voxels even in the software renderer?

 

Indeed, it was an attempt I made before releasing the v. 1.1.4.580. In fact, it was my first attempt to render the voxels in software rendering: Each voxel column was converted to a sprite.  It was a naive solution, since no special care was needed to render the voxels properly, it was just a re-use of the sprite code. Unfortunatelly with a couple of voxels the number of vissprites raised so rappidly that it was totally unplayable. The bottleneck was the clipping code, which it had to be calculated for each voxel column. On the other hand, the clipping was 100% accurate, even for overlapping voxels.

 

Share this post


Link to post

i like playing with midtextures. made a bunch of stuff, but the closest thing to what you're talking about is this sort of thing

Screenshot_REKKRSL_20220408_223428.png.ce0e389e2c6c15077a98f6bddf2eec15.png

 

no crisscrossing lines in this example though. i find this sort of approach works best with reliefs. other things generally work best when sort of outlining them with linedefs and texturing them somewhat more traditionally

Screenshot_REKKRSL_20220408_223259.png.8e18f1845ad330d936d477a4355f13a5.png

Share this post


Link to post
9 hours ago, Ar_e_en said:

 

DeerEX3.gif.f4606daea175fc88087896fc2954e30d.gif

hmm Ima make this but mabey less flat colored and of ranger

kinda trippy im no where near the mapper you guys are so I'm only doing 3 layers and front facing : /

 

Spoiler

Screenshot from 2022-04-09 01-23-58.png

 

Edited by gwain

Share this post


Link to post

this is great :D

iirc ancient alines used midtextures for holograms, it wasnt as elaborate as this but looked really nice

here's hoping that fauxels become a trend. if it does an equivalent of the doomcute thread would be nice to have

Share this post


Link to post
13 hours ago, Ar_e_en said:

I was watching decino play "UAC Invasion: The Supply Depot" - a GZDoom map that uses voxels, and it made me think if it was possible to implement voxels in other DOOM ports.

doom00.png.e8c327ea76a80eca53b76d49ee25a90b.png

 

So I made a little test map (Boom compatible and tested in Woof, just because I wanted to add a compblue waterfall) with a fake voxel model of a deer made out of mid-textures. I didn't use any 3D software and the results aren't perfect, but I do think that there is merit to the idea. Maybe it is possible to convert a voxel model into a set of textures that can be used to create a fake voxel model in other more basic ports like Woof, PRBoom+, DSDA or even Vanilla. @jval might have more knowledge on this, guy has done a lot of work with real voxels!

 

This also feels like an idea that has been done before, so if you know any wads that have done something like this - let me know!

 

FakeVoxelDeer.zip

It's great to see this works in other source ports! Great job!

Share this post


Link to post
9 hours ago, Revae said:

i like playing with midtextures. made a bunch of stuff, but the closest thing to what you're talking about is this sort of thing

Screenshot_REKKRSL_20220408_223428.png.ce0e389e2c6c15077a98f6bddf2eec15.png

 

no crisscrossing lines in this example though. i find this sort of approach works best with reliefs. other things generally work best when sort of outlining them with linedefs and texturing them somewhat more traditionally

Screenshot_REKKRSL_20220408_223259.png.8e18f1845ad330d936d477a4355f13a5.png

Those are really cool! 

 

14 hours ago, jval said:

 

This is a great idea! I tried the map and I was impressed by the fact that you're using only a few extra lines. This will also be faster to software rasterizers, since voxel rendering is CPU-hungry.

 

As for converting voxels in texture slices, many voxel editors strip the inside of the voxel, so that only the outer layer is actually present in data, so an automatic converter instead of 

image.png.c2620f4e68023112a5f13b5a7ce95e05.png

will produce this:

image.png.6392e3dc795fdd3af3f83e8a45b7a5dc.png

and then it must take the necessary steps to "fill" the gaps.

Obviously, moving objects will be limited to move into a line, with some work in texture scrolling and anims.

 

Thank you for chiming in!

I guess it makes sense for real voxels to cut out the unseen inside for performance reasons. If I were to convert real voxels models to texture slices - I might have to fill the inside manually by myself, but it probably isn't that time consuming of a job if the model isn't that big.

Share this post


Link to post
17 hours ago, Megalyth said:

Egregiously off-topic, but the title of this thread made me think of 1-voxel-thick destructible walls, which struck me as an interesting way to hide secret areas. Do any source ports support such a feature? It would be pretty cool to blast a hole in a wall to access a secret area.

 

All of them do - at least for hitscan weapons. Just use line action 24 (G1 - Floor raise to lowest ceiling) tagged to the wall with a control sector by a ceiling which is the floor level of the room. Shoot the wall, and a hole opens up. Works well if there's also a midtexture which has a matching wall with a hole in it. Epic 2 does that, for example.

Share this post


Link to post

Here's something you don't see every day. Definitely worth a place in the mapping museum alongside TRUCK.WAD's cinematic midtex, the spinning holograms in Vrack3, etc.

Share this post


Link to post
18 hours ago, dotQLL said:

I had a similar idea but with 1-pixel wide sprites.

Shall I dub this "Fauxels"?

Faux + Voxels

Blood (and probably GZDoom) already does this in software renderer

Share this post


Link to post
On 4/9/2022 at 8:39 PM, RjY said:

Here's something you don't see every day. Definitely worth a place in the mapping museum alongside TRUCK.WAD's cinematic midtex, the spinning holograms in Vrack3, etc.

This test wad most likely won't be saved anywhere, but if I decide to update the textures and make the model a bit more prettier - then I might add this deer to a secret room in a bigger wad!

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...