Godot Version
4.6
Question
Hi, I want to make a 3D game set in a universe with a very low value of speed of light. Ideally, I would like to represent this to the player visually, and even introduce light-based puzzles to unlock progression. I am at the pre-production stage of this project and I am trying to find out if Godot is a suitable engine choice for this type of game. I am not asking you for implementation help, just tell me if my required features are possible to do in Godot 4.6!
What I want:
- Gravitational redshift: the game takes place on a planet where the player can traverse a long vertical tunnel. I want the light from the bottom of the tunnel to appear redshifted when looked at from the top, and blueshifted when looked at from the bottom.
- Velocity-based redshift: when observing any fast-moving bodies, there should be the appropriate red- or blueshift applied.
- Radial refraction: the space-time metric also changes when traversing the tunnel, which means the apparent refraction index increases when light travels radially. I think I can cheat the system here since the tunnel is so narrow, so it would be sufficient to simply increase the total refraction index in the tunnel and not care about the light’s direction.
- Proper length dilation: the player model should scale up when travelling down the tunnel, to create the illusion of the world scaling down, since proper distance is dilated.
- Frame-dragging: since the tunnel is at the equator of a rotating planet, the geodesics inside are subject to frame-dragging, which is presented to the player as an apparent “curving” of the actually straight tunnel. This is probably the easiest one, since, during raytracing, we can displace the ray in the proper angular direction for every unit of a radial step.
What I might need:
- Local raytracing: to not overload the engine (I need this game to be rather lightweight), it might be ideal to only do raytracing in certain places, such as when the player model enters the aforementioned tunnel (for most of the game, frame-dragging and radial refraction are not observable at all). Is this possible/easy to do in Godot?
- Dirty post-processing with masks: e.g. for the velocity based redshift, of course it would be insanely taxing to do this “properly” as a simulation of optics, so I am thinking of just taking the calculated optical projection, identifying the velocity of displayed objects relative to the player model, and, based on a simple calculation, applying a mask which shifts the hues accordingly. Can this be done easily in the Godot workflow?
Thank you for your thoughts!