Coder Social home page Coder Social logo

Comments (31)

djedditt avatar djedditt commented on July 26, 2024 7

In the digital realm of Virtual Boy emulation, an audacious request was made by @KingLJN: to add adjustable 3D depth, a feature deemed impossible by the seasoned skeptic, @riggles1. Armed with technical truths, riggles1 declared such a feat beyond the realm of possibility, citing the immutable nature of sprites and backgrounds as insurmountable barriers.

Yet, amid this digital discourse, a developer with an incomprehensible nickname emerged. Through a series of commits and initiating pull request (#10), the impossible became attainable: 3D depth slider support was seamlessly integrated. This addition offers maximum adjustable 3D depth without compromising the original visuals, subtly converting skeptics into fervent believers.

from red-viper.

riggles1 avatar riggles1 commented on July 26, 2024 2

It's not possible to begin with for most things if not all, the 3D layers are positioned by the developers by separating sprites different amounts and manually drawing sprites from different angles. Unlike 3D games that have actual polygons and cameras you can reposition in virtual space, or games that have been programmed to be able to adjustable like Shovel Knight on 3DS for example. There is no 3D space or layers beyond the sprite layers, but some stereo elements are infront of the screen despite being the background sprite layer for example.

If you look at a treasure room in Wario Land for example, the depth it has it the way the artist drew it as manually. And nothing can be done short of another artist redrawing the graphics for that room.

Mario Clash? The stage was drawn to look like that, the pipes are drawn at slightly different angles, you'd have to remake the graphics from scratch for less depth.

from red-viper.

djedditt avatar djedditt commented on July 26, 2024 1

@riggles1 The modification I introduced allows the 3D depth slider to function similarly to the Inter-Pupillary Distance (IPD) dial on an actual Virtual Boy: it shifts the images for each eye closer or further apart. Adjusting the IPD does not change the actual disparity between objects in the content (and thus does not change the separation between layers). It does adjust the depth perception to better suit the viewer's comfort level and/or preference.

from red-viper.

skyfloogle avatar skyfloogle commented on July 26, 2024 1

Sounds good!

from red-viper.

skyfloogle avatar skyfloogle commented on July 26, 2024 1

In Nintendo 3DS mode there's only eight or nine levels of depth, and it's pretty doable to keep the slider on but in the lower 12%. Given this, it feels fair enough to not have a "keep it at default forever" option, since it does simplify the menus a bit.

from red-viper.

victorkte avatar victorkte commented on July 26, 2024 1

I'm a fan of having IPD+- on the entire slider path still intact, not having to press additional things. In the same game you sometimes feel like on the fly adjusting it so that it's further in or closer to you depending on the scene. Having that as a toggle-only thing would make it incovenient.

* Default (assuming on-off no adjustment, same as 0.9?)

* Fall-in

* Pop-out

* Full Range (or something other name where you have both +- through the slider, same as one of the current options work right now)

Unless Default is exactly that.

true that would be a please-all solution

from red-viper.

riggles1 avatar riggles1 commented on July 26, 2024

@djedditt The point I was making is that there's still artwork that clashes with the adjusted layer separation, things like the treasure room in Wario Land, or the angled pipes in Mario Clash. As those are elements drawn to have a certain depth to them, adjusting the separation of overlapping or underlying elements will make the 3D look off.

The tables in Galactic Pinball are also already drawn at an angle, two different sprites.

You can adjust the depth at which these sprites appear, but not the angles of the sprites that are drawn with a fixed stereo convergence.

If that makes sense? It's still impressive that some form of 3D/separation sprite layer manipulation is possible, but it's not doing the impossible I was trying to explain.

from red-viper.

pmsobrado avatar pmsobrado commented on July 26, 2024

I think I understand both points of view. I guess it could be nice if this was an optional feature. If you want to enjoy the games as they are, fine, if for some reason or at some specific moment you want more or less 3D, just enable the option :)

from red-viper.

riggles1 avatar riggles1 commented on July 26, 2024

@riggles1 The modification I introduced allows the 3D depth slider to function similarly to the Inter-Pupillary Distance (IPD) dial on an actual Virtual Boy: it shifts the images for each eye closer or further apart. Adjusting the IPD does not change the actual disparity between objects in the content (and thus does not change the separation between layers). It does adjust the depth perception to better suit the viewer's comfort level and/or preference.

Aah, yeah shifting the entire stereogram. The crazy thing would've been if it somehow looked at actual sprite layers and separated each layer in individual amounts, I guess that still might be possible.

But yeah, a lot of graphics are simply two differently drawn sprites (like in the examples), so their depths are set in stone. So it would look odd if the other layers were squashed closer when combined with fixed elements like that.

Stereoscopic 3D is always a bit convoluted to explain and talk about.

from red-viper.

riggles1 avatar riggles1 commented on July 26, 2024

I think I understand both points of view. I guess it could be nice if this was an optional feature. If you want to enjoy the games as they are, fine, if for some reason or at some specific moment you want more or less 3D, just enable the option :)

It's not a point of view thing, it's that it can't be done for certain things (if we were to try do it the way it's in Shovel Knight where you can adjust each individual sprite layer with the slider and it's all just "flat" layers). Hopefully I can explain it a bit better here.

Untitled

For these pipes for example, they're drawn in two different POV, unlike other elements these have a different sprite for each eye with the artwork in two different angles since your eyes sees things from different angles.

That sprite artwork has a locked depth, just like how you can't adjust the depth of a stereoscopic photo. However you can move the 3D photo further away or infront of the screen, but not the depth of the content in the photo. (which is what has been accomplished so far with the slider update)

Let's assume for a moment that Red-Viper authors find a way to manipulate individual sprite layers with the 3D slider. If you change the position of the layers of this Mario Clash screenshot so that gap between the two ground layers isn't as separated. You end up with the ground not lining up in depth with those angled pipes which have a depth that can't be changed. Making it look like Mario should be falling into the abyss in front or behind the ground if he exited the pipe.

from red-viper.

pmsobrado avatar pmsobrado commented on July 26, 2024

@riggles1 Thanks for the clarification, I think I understand.

@djedditt My two cents, I tried your "solution" with Warioland and seems like the more I push the 3D slider up, the more "soft" the effect is, like the opposite of 3DS games. When the slider is over, the 3D effect seems super enhanced. Maybe it is my eyes, or is the functionality upside down, sort of speak?

from red-viper.

djedditt avatar djedditt commented on July 26, 2024

@pmsobrado Note that the slider adjusts from full negative parallax (objects pop out of the screen) to full positive parallax (objects appear deeper into the scene). The midpoint is zero parallax, marking the most neutral 3D depth effect setting. This midpoint is necessary to allow adjustments in both directions. In stereographic content, increasing the 3D depth effect typically enhances positive parallax. In that sense it's not reversed/upside down, but just relative to the midpoint - which is not the initial starting position of the 3D depth slider when just turned on.

from red-viper.

pmsobrado avatar pmsobrado commented on July 26, 2024

Yes, I notice it now, Thanks. Although the deep range seems less than the "pop outside" range.

from red-viper.

skyfloogle avatar skyfloogle commented on July 26, 2024

An IPD adjust type thing makes a lot of sense given how drastic the parallax is sometimes, but I think the center point is a default that people might want, and I'm not sure if the depth slider is the right place to put it given how different this is from the way it usually works. Maybe an IPD slider in-game on the touch screen?

from red-viper.

djedditt avatar djedditt commented on July 26, 2024

@skyfloogle I'd argue the most intuitive and convenient place to put it would be the 3D depth slider. It is directly related to depth perception, and the interface users expect to use like in the video you reposted on X. You'd assume users simply slide it to a setting that feels comfortable either way - moving it to a software slider is unlikely to change the expectations of its functionality.

A consideration could be to add a toggle in the settings screen that switches the 3D depth slider mode between 3DS mode (neutral to full positive parallax) and Virtual Boy mode (full range parallax). You could merge the a41f08e commit only for now as that would introduce 3DS mode by default.

from red-viper.

pmsobrado avatar pmsobrado commented on July 26, 2024

I totally agree, an option to toggle both functionalities and both using the slider.

@djedditt what do you mean by 3DS mode? Could you take a look at what I said about the range?

EDIT

Let me clarify, I was on the phone and english it's not my native language. What I mean is, testing the slider with Warioland, I noticed that one of the effects (deeper vs popping out) has more "length" that the other, and the default "center" is not at the center of the slider.

I hope that makes sense. Thanks!

from red-viper.

djedditt avatar djedditt commented on July 26, 2024

@pmsobrado The parallax range is identical in both directions. Possible explanations for what you're seeing are that objects in front of the screen tend to be perceived as more pronounced (this is psychological). Also worth mentioning is that at zero parallax, the 3D effect is neutral compared to the depth encoded in the stereographic image, but it is (and can't be) not absent.

You can verify this by checking the IPD adjustment screen (every Virtual Boy game shows this on boot) or the code itself. Just line up the squares in the corners; that's zero parallax. It is at the midpoint of the slider.

With "3DS mode" I meant that moving the slider up and down only changes the parallax value between the most neutral 3D setting and most positive parallax setting. This is my interpretation of what @skyfloogle refers to as "how it usually works". I'll add a toggle and update the PR.

from red-viper.

pmsobrado avatar pmsobrado commented on July 26, 2024

@djedditt I see it now, I'll try tonight with the Virtual Boy splash screen. If this 3DS mode is implemented and activated in the settings, that would mean we could only apply positive values, but not negative, correct?

from red-viper.

djedditt avatar djedditt commented on July 26, 2024

@pmsobrado Correct, you'd only be able to increase the perceived depth into the screen with the slider in "3DS" mode.

from red-viper.

riggles1 avatar riggles1 commented on July 26, 2024

Neat, looking forward to try it out, shifting the entire PID like on the VB itself should help a ton with certain more extreme 3D games like Teleroboxer where your hands are way out in front of the screen.

If we some day get full control over separating individual sprite layers somehow, I drew an SBS cross-eyed stereogram to better explain what could happen depending on the graphics used:
Fixeddepthsprite

Representing Mario Clash, the orange and purple rectangles are ground and the green shape is a pipe, the pipe is on a single sprite layer but was drawn from two different angles for each eye, giving it a fixed relative volume.

The above one has the platforms aligned with the pipe-exits. Below is after adjusting the stereo separation of the two ground layers to decrease 3D depth, which moves the back layer closer to you.

But since the pipe object a single sprite layer and is drawn as a solid 3D object with two points of view sprites (3D convergence taken into account by the artist). It wouldn't align with the purple ground layer.

from red-viper.

vaguerant avatar vaguerant commented on July 26, 2024

With "3DS mode" I meant that moving the slider up and down only changes the parallax value between the most neutral 3D setting and most positive parallax setting. This is my interpretation of what @skyfloogle refers to as "how it usually works". I'll add a toggle and update the PR.

After the toggle, where will the slider need to be positioned to achieve the current default, at the bottom?

from red-viper.

djedditt avatar djedditt commented on July 26, 2024

@vaguerant Yes that will be the default. The perceived depth at that point is also the most shallow it can get in either slider modes.

To recap, the perceived depth at the fixed convergence point can't be changed, which is the point @riggles1 made. With the 3D depth slider support you can enhance depth perception in either direction relative to the fixed convergence point, not flatten it (unless you turn the 3D depth slider off).

This might not exactly address @KingLJN's preference specifically (hope it does!), but will satisfy the request for 3D depth slider support and the majority of its users.

from red-viper.

vaguerant avatar vaguerant commented on July 26, 2024

It feels a little off to need to keep the slider at the minimum position to get "back" the default. Personally, I'm very comfortable with 3D on the 3DS, so I keep the slider at max pretty much all the time, but my preference in the case of the Virtual Boy is to have the baseline be at "screen level" as it is currently. Needing to adjust the slider lower to get the "default" in Red Viper would make it the one exception to the rest of my library. Maybe the toggle could be a three-way setting between 3DS mode, VB mode and a third option which is just the current behavior? Something like "depth slider: 3DS style, Virtual Boy style, on/off only".

from red-viper.

djedditt avatar djedditt commented on July 26, 2024

@vaguerant The Virtual Boy option would have the default at the center of the slider just like the IPD dial, so at screen level. Is that not what you want? Having a three-way toggle is certainly possible though, might as well add it.

from red-viper.

vaguerant avatar vaguerant commented on July 26, 2024

@djedditt My ideal is for the default to be at the top, since that's where I normally keep my slider for all other software. I don't want to have to find the default for Red Viper by moving the slider around when all my other software works "best" at the top. Of course, it's subjective what the best is, but Red Viper/Virtual Boy software is sort of unique because you're adjusting the depth of the midpoint rather than the maximum outer/inner depths. In Red Viper, there is a definite normal depth (the one used currently).

Since there's not really a sensible way to make the top setting apply the unmodified default while having the slider actually do anything at all beyond just being an on/off toggle for stereoscopy, I figure a dedicated toggle mode which just drops back to the current behavior makes it simple to locate that normal depth without manual adjustment of the slider.

EDIT: Actually, I wonder if it would make sense to have the 3D slider toggle behave like Sega 3D Classics titles. They have a toggle between "pop out" and "fall in" 3D (I'll grab my 3DS in a bit to check their actual terminology). Instead of having one mode which slides from out to in, you could have out vs. in vs. default be user-selectable. It's also easier to understand and explain in and out than what 3DS mode and VB mode mean.

EDIT2: 3D Classics Sonic the Hedgehog has the following menu:

2024-02-29_20-46-45 401_bot

I think something like this could make sense:

3D Slider Mode:

  • Default
  • Fall-in
  • Pop-out

That way nobody ever has to "search" for the middle-point (that's achieved by just setting the toggle to Default) and the slider just adjusts the intensity of the fall-in/pop-out depending on user selection.

from red-viper.

pmsobrado avatar pmsobrado commented on July 26, 2024

Sounds great!

from red-viper.

vaguerant avatar vaguerant commented on July 26, 2024

Sorry to keep pitching different ideas, but maybe instead of being a three-way toggle it could be a checkbox which enables radio buttons to select a depth mode.

  • Adjust depth with 3D slider
    🔘 Fall-in
    🔘 Pop-out

So when the box is unchecked, the slider behaves as it does currently (basically doing nothing), but with the box checked you can choose either depth option.

from red-viper.

pmsobrado avatar pmsobrado commented on July 26, 2024

Seems like a clean solution!

from red-viper.

djedditt avatar djedditt commented on July 26, 2024

Thank you for sharing your thoughts. After consulting with @skyfloogle we decided on a toggle with default Nintendo 3DS option and a Virtual Boy IPD option.

from red-viper.

victorkte avatar victorkte commented on July 26, 2024

this option from @vaguerant seems the best and more intuitive of all

3D Slider Mode:

    Default
    Fall-in
    Pop-out

from red-viper.

riggles1 avatar riggles1 commented on July 26, 2024

I'm a fan of having IPD+- on the entire slider path still intact, not having to press additional things.
In the same game you sometimes feel like on the fly adjusting it so that it's further in or closer to you depending on the scene. Having that as a toggle-only thing would make it incovenient.

  • Default (assuming on-off no adjustment, same as 0.9?)
  • Fall-in
  • Pop-out
  • Full Range (or something other name where you have both +- through the slider, same as one of the current options work right now)

Unless Default is exactly that.

from red-viper.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.