That's because of the depth buffer - the frontmost tree is rendered before the obscured behind it and, even for fully transparent pixels, depth value is written to the depth buffer. Pixels rendered behind that tree, even in the transparent area, will be discarded based on their depth.
What you need for the trees is a shader discarding full transparent pixels.
https://www.khronos.org/opengl/wiki/Tra ... cy_Sorting
Groverburger's 3D Engine (g3d) v1.5.2 Release
- Jasoco
- Inner party member
- Posts: 3727
- Joined: Mon Jun 22, 2009 9:35 am
- Location: Pennsylvania, USA
- Contact:
Re: Groverburger's 3D Engine (g3d) v1.4 Release
I had a feeling it was something that simple. But is there an easy way I can either modify the g3d shader or implement a simple shader like this? I need to read that post above too. I’m sure it has some useful information. I just don’t know the proper way to stack shaders for use with this library. Like I said I already had that simple fog shader but as soon as I tried to add another shader it broke. So I’m sure there’s a proper way to have them all work together. Seeing as I’ve looked at those other projects and a bunch of them have multiple shaders at once.Nelvin wrote: ↑Tue Dec 14, 2021 2:00 pm That's because of the depth buffer - the frontmost tree is rendered before the obscured behind it and, even for fully transparent pixels, depth value is written to the depth buffer. Pixels rendered behind that tree, even in the transparent area, will be discarded based on their depth.
What you need for the trees is a shader discarding full transparent pixels.
https://www.khronos.org/opengl/wiki/Tra ... cy_Sorting
Re: Groverburger's 3D Engine (g3d) v1.4 Release
Not really. You can either do multiple passes. That may be difficult to do with this "engine", idk. Or you can factor multiple shaders into functions and combine their results.
Learning GLSL basics is required to be able to get the desired results. The language is simple, there's plenty of tutorials out there, and they are easily adapted to LÖVE. Start with 2D effects. 3D stuff typically requires multiple buffers and the learning curve is steeper.
Re: Groverburger's 3D Engine (g3d) v1.4 Release
Given your art style, wouldn't a simple "discard" in the pixel shader be enough to avoid writing over objects behind ? (alpha test kind if transparency)
Re: Groverburger's 3D Engine (g3d) v1.4 Release
Sadly I don't have any experience using this engine - I just use discard in pixelshaders for some depth sorting/batching of sprites based on the alpha value of the pixels. Once you know how to use different shaders it's really easy to fix your problem.Jasoco wrote: ↑Tue Dec 14, 2021 6:09 pmI had a feeling it was something that simple. But is there an easy way I can either modify the g3d shader or implement a simple shader like this? I need to read that post above too. I’m sure it has some useful information. I just don’t know the proper way to stack shaders for use with this library. Like I said I already had that simple fog shader but as soon as I tried to add another shader it broke. So I’m sure there’s a proper way to have them all work together. Seeing as I’ve looked at those other projects and a bunch of them have multiple shaders at once.Nelvin wrote: ↑Tue Dec 14, 2021 2:00 pm That's because of the depth buffer - the frontmost tree is rendered before the obscured behind it and, even for fully transparent pixels, depth value is written to the depth buffer. Pixels rendered behind that tree, even in the transparent area, will be discarded based on their depth.
What you need for the trees is a shader discarding full transparent pixels.
https://www.khronos.org/opengl/wiki/Tra ... cy_Sorting
- Jasoco
- Inner party member
- Posts: 3727
- Joined: Mon Jun 22, 2009 9:35 am
- Location: Pennsylvania, USA
- Contact:
Re: Groverburger's 3D Engine (g3d) v1.4 Release
It definitely would. I just don't know where to put that code properly. Seems like it would be the easiest thing to implement. Since it's basically just running the pixel color through a filter to check the alpha before sending it out to the renderer.
Edit: Well it was easier than I thought. I just added the appropriate "if pixel alpha is less than half then discard" code to the fog shader I already had and it did the job. It'll do for now until I get a better lighting system.
Really I just want simple shadows and simple lighting. Possibly also light sources but with a central ambient "sunlight/moonlight". Also a simple water shader that just puts foam around the edges of "ground" areas. Not looking for raytracing or anything crazy like that. If I could figure out how to use the techniques from Hoarder and the Flamerunner games as they both have pretty much all the stuff I'd want. So I know g3d is capable of doing what I want. It's just that everyone is so much smarter than I am. lol
Unfortunately it's not as simple as just copying the code and files over because Flamerunner was made before g3d and Hoarder is a heavily modified really early version of g3d which has changed a lot since then. So it'll take a bit more understanding of what does what.
- groverburger
- Prole
- Posts: 49
- Joined: Tue Oct 30, 2018 9:27 pm
Re: Groverburger's 3D Engine (g3d) v1.4 Release
Just pushed a new release version of g3d and updated the g3d wiki.Jasoco wrote: ↑Wed Dec 15, 2021 2:08 am Really I just want simple shadows and simple lighting. Possibly also light sources but with a central ambient "sunlight/moonlight". Also a simple water shader that just puts foam around the edges of "ground" areas. Not looking for raytracing or anything crazy like that. If I could figure out how to use the techniques from Hoarder and the Flamerunner games as they both have pretty much all the stuff I'd want. So I know g3d is capable of doing what I want. It's just that everyone is so much smarter than I am. lol
Unfortunately it's not as simple as just copying the code and files over because Flamerunner was made before g3d and Hoarder is a heavily modified really early version of g3d which has changed a lot since then. So it'll take a bit more understanding of what does what.
Maybe this post can help you out with writing shaders for g3d?
Note: I got rid of the need to manually update the view and projection matrices for custom shaders in version 1.5.1 - updating all of the necessary variables now happens automatically in Model:draw()
- Jasoco
- Inner party member
- Posts: 3727
- Joined: Mon Jun 22, 2009 9:35 am
- Location: Pennsylvania, USA
- Contact:
Re: Groverburger's 3D Engine (g3d) v1.5.1 Release
Yeah, I'm slowly teaching myself how shaders work. It's a lot to take in as I've never really been able to fully understand how languages work except for the easier more "basic" languages like BASIC and Lua. I was able to merge the "fog" shader someone wrote a while ago to do distance fog and a bit of the code 4aiman made for their lighting demo to use the normal shading technique so flat textures don't look the same on every side rather they shade themselves based on the direction they're facing. It makes my project look better than vanilla g3d does and I'm glad this stuff is possible.
I have a question though, is it possible at all to do backface culling only on certain models? I've looked at the Wiki and it doesn't seem so. There's just a single love.graphics.setMeshCullMode() callback, but I don't see any Model:setMeshCullMode() feature. It seems to be an all or nothing type of thing. Is this just a limitation of Löve or is this something you can't do in 3D rendering at all? To get around it for now I just set it to backfire culling and for polygons where I want them to be two sided I just create a second polygon flipped around the other way with a flipped texture normal. But it'd be nice if I could just turn it off for specific models when I need to.
I have a question though, is it possible at all to do backface culling only on certain models? I've looked at the Wiki and it doesn't seem so. There's just a single love.graphics.setMeshCullMode() callback, but I don't see any Model:setMeshCullMode() feature. It seems to be an all or nothing type of thing. Is this just a limitation of Löve or is this something you can't do in 3D rendering at all? To get around it for now I just set it to backfire culling and for polygons where I want them to be two sided I just create a second polygon flipped around the other way with a flipped texture normal. But it'd be nice if I could just turn it off for specific models when I need to.
- Hydrogen Maniac
- Citizen
- Posts: 80
- Joined: Sat Dec 19, 2015 9:59 pm
Re: Groverburger's 3D Engine (g3d) v1.5.1 Release
You can simply call love.graphics.setMeshCullMode between drawing the models.Jasoco wrote: ↑Mon Jan 17, 2022 6:45 pm I have a question though, is it possible at all to do backface culling only on certain models? I've looked at the Wiki and it doesn't seem so. There's just a single love.graphics.setMeshCullMode() callback, but I don't see any Model:setMeshCullMode() feature. It seems to be an all or nothing type of thing. Is this just a limitation of Löve or is this something you can't do in 3D rendering at all? To get around it for now I just set it to backfire culling and for polygons where I want them to be two sided I just create a second polygon flipped around the other way with a flipped texture normal. But it'd be nice if I could just turn it off for specific models when I need to.
Code: Select all
love.graphics.setMeshCullMode("back")
model:draw() --drawn with back culling
love.graphics.setMeshCullMode("front")
model2:draw() --drawn with front culling
I'm way too sober for this...
- Jasoco
- Inner party member
- Posts: 3727
- Joined: Mon Jun 22, 2009 9:35 am
- Location: Pennsylvania, USA
- Contact:
Re: Groverburger's 3D Engine (g3d) v1.5.1 Release
Why didn't I think of that? Does it have any sort of impact on performance?Hydrogen Maniac wrote: ↑Mon Jan 17, 2022 11:36 pm You can simply call love.graphics.setMeshCullMode between drawing the models.Code: Select all
love.graphics.setMeshCullMode("back") model:draw() --drawn with back culling love.graphics.setMeshCullMode("front") model2:draw() --drawn with front culling
Who is online
Users browsing this forum: Bing [Bot] and 10 guests