Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

1411430 Posts in 69363 Topics- by 58416 Members - Latest Member: JamesAGreen

April 20, 2024, 01:04:27 AM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsCommunityDevLogsHavre
Pages: [1]
Print
Author Topic: Havre  (Read 5321 times)
Le Chant du cygne
Level 0
*


French independent game collective


View Profile WWW
« on: January 21, 2017, 03:15:34 AM »

Hi everyone and welcome to Havre's devlog.

We are Le Chant du cygne, a french game collective from Paris and Lille and this is the game we have been working on for some time.





Havre is an experimental first person exploration game set inside a dynamic cylindrical world. Players explore a different kind of gravity and trigger large scale climatic phenomenons to bring the world back to life. The game is being made with Unity and is intended to be released on Windows, Mac and Linux.





We started working on Havre at the end of 2014, it was then very different from what it is today but the basic idea of wandering through a vast cylindrical world was already present. We could not work on Havre on a regular basis until a few months ago. Nonetheless we have had a few weeks of work time on it that allowed us to test our ideas, remove what was not necessary and make it into the game it is now.

Since we now have a more thorough idea of the game we want to build we thought that it would be a good idea to start a devlog here. We believe that we have some technical challenges and design perspectives that might interest you. Anyway, we are very happy to start this devlog and get to discuss our game with you all.

Features/Gameplay

Havre features simulated climatic phenomenons such as winds, clouds, heat, thunder and rain. All of these are based on a fluid simulation that propagates the wind and its content through the game world, thus generating various phenomenons at uncertain places and time.







These are part of the exploration process of the game since players have to discover how to trigger the different climate mechanisms. For instance, triggering the wind is done by activating a huge fan which propagates heat and water in the air, thus modifying the overall exploration experience of the game.
Also, since Havre's world is a cylinder, the sunlight comes from the zenith (the cylinder’s hub) around which the atmosphere is found. Beyond the atmosphere is the opposite side of the world which is visible by just looking up.





Current state of the game

At the moment we have a fully working player controller for the specific physics of a cylindrical world that makes it possible to walk on its inner surface and with a gravity that comes from the hub.
We also have a zenithal sun with day and night cycles as well as an atmospheric fog. The fluid simulation that forms the basis of Havre’s climate was also implemented and reacts to obstacles and boundaries.

Planning for the near future

We are in the final stages of making our first gameplay prototype with the most important features such as the climatic simulation based on wind and density propagation, the various ambiances derived from the climatic conditions as well as the basic cylindrical moving mechanics.

We plan on releasing our debut teaser very soon. In the mean time we would like to post on some of the technical challenges we have faced so far.

More info

If you want to see more of our work on Havre you can also use these channels: Website, Twitter, Facebook.


Thank you for taking the time to read us!
« Last Edit: February 08, 2019, 06:36:49 AM by Le Chant du cygne » Logged

Le Chant du cygne
French independent game collective
http://www.lechantducygne.com
https://twitter.com/LeChantduCygne
TonyManfredonia
Level 6
*



View Profile WWW
« Reply #1 on: January 22, 2017, 02:57:14 AM »

WOW!

I just watched your trailer on your website. Fascinating work, truly. The concept is visually abstract, and perhaps that's why I like it so much.

Keep up the awesome work. Signed up for your newsletter, as well Smiley
Logged

Composer | Orchestrator
Website
Twitter

Soundtracks include:
Kharon's Crypt
Call of Saregnar
nu_muso
Level 1
*


View Profile
« Reply #2 on: January 22, 2017, 08:33:34 PM »

This is a fresh, unique concept with a beautiful world. Following Smiley
Logged
Le Chant du cygne
Level 0
*


French independent game collective


View Profile WWW
« Reply #3 on: February 04, 2017, 03:39:11 AM »

Thank you! We still have a long way to go Smiley

We have updated the game's website with new content, a debut teaser and a newsletter.





We should come up with some new posts on the climate simulation and the world builder.
Logged

Le Chant du cygne
French independent game collective
http://www.lechantducygne.com
https://twitter.com/LeChantduCygne
Schmolt
Level 0
*



View Profile
« Reply #4 on: February 04, 2017, 08:31:00 AM »

Loving the look of this.
Logged
chriswearly
Level 3
***


prince slugcat


View Profile
« Reply #5 on: February 05, 2017, 01:06:56 AM »

To fellow non-Frenchman, Le chant du cygne means The Swan Song (lit. The chant of the Swan), and Havre means Haven.

Also yes, likewise this looks amazing and intriguing!
Logged

primerist
TIGBaby
*


View Profile
« Reply #6 on: March 20, 2017, 04:42:09 AM »

Havre's cylindrical megascale panoptiscape evokes the space-faring future humanity aspires to and its emptiness suggests that Fermi's Paradox may be answered on the launchpad. It will be a treat to follow the Havre project and see how the world-building develops.
Logged
Le Chant du cygne
Level 0
*


French independent game collective


View Profile WWW
« Reply #7 on: April 17, 2017, 06:20:24 AM »

Hi all!

It has been a while since our last post, we have been working a lot though! Now we can share all the new stuff we have. We just finished building the technical prototype for Havre, it features dynamic wind, clouds, rain and thunder that are displayed through raymarching into a 3D texture representing the weather. In the coming posts we will try to lay out the inner workings of these systems and what we plan to improve. We will focus mainly on the fluid simulation itself and on the methods we used to make it visible.

As such we need to start by looking at the fluid simulation supporting Havre’s atmosphere. The world of Havre is made of storms, clear nights, rainy sun sets, thunder and so much more. Its weather evolves and changes, all the time. To achieve this we quickly came to realize that we needed some kind of dynamical wind. Indeed, wind carries humidity which can aggregate into clouds that make rain and thunder possibles. It also diffuses heat and cold and moves magnetism through the cylinder. Without a wind simulation it would have been very hard to create the kind of emergent climatic world we had aimed for. We want to have storms that move through the cylinder, are cut in half by mountains and generate thunder under the right conditions.

We then set out to research fluid simulations and quickly discovered Jos Stam’s 2003 GDC paper about stable fluid simulations for games. You can find it here: http://www.dgp.toronto.edu/people/stam/reality/Research/pdf/GDC03.pdf
I found this talk pretty useful too: http://www.dgp.utoronto.ca/%7Estam/reality/Talks/FluidsTalk/FluidsTalkNotes.pdf

The funny thing is, when I started programming videogames I told myself that I would never work with fluids or anything like this as it seemed way too complex to be of actual use, or fun. Turns out, 5 years later I find myself reading a research paper on fluid simulation. Though, I must admit I had not envisioned the possibility of using fluids for simulating weather, which is, in my humble opinion, terribly exciting.
Anyway, the wind can effectively be represented as a fluid, though not a very viscous one. Jos Stam’s work is based on the Navier-Stokes equations, and it seemed to be the case for pretty much everyone working on fluid simulations.

If you are eager to know more about fluid simulations I can only advise you to read Jos Stam’s paper, it is really well written. I will try to synthesize how the algorithm works to the best of my capabilities but it is a rather complex algorithm and my math skills are not what they should be, I may be wrong or inaccurate at times.

Jos Stam’s implementation uses a vector field. It is basically a grid of values. If you are doing 2D fluid you might build a 20x20 grid which would amount to 400 cells, or rather 400 values. Each value corresponding to the fluid force at the particular cell position. But this is not all, the fluid forces are mostly here to make any kind of substance move. Thus, there is another value at each cell which corresponds to the density of the specific substance you want to simulate. The density value will follow the fluid force and conserve its mass so that it looks like a big blob moving, stretching and distorting.

The fluid simulation is modeled based on theses two equations:



They are called the Navier-Stokes equations and aim to describe the behavior of fluids. The first equation describes the evolution of velocity and the second one how density propagates in the velocity field. Density being a representation of a fluid.

The terms of the equations are as follows:
u is the velocity vector.
ρ is the density.
v is the viscosity of the fluid because oil should behave differently than air.
k represents the diffusion of the fluid, how much it loses density over time.
S are the sources of density such as boiling water for instance
f are the fluid forces applied to the field such as from a fan.

In the second equation we can see that density follows velocity, that it diffuses according to a diffusion rate (k) and that it receives external density sources (S).
The first equation behaves similarly but in this case velocity follows velocity. It also changes based on a viscosity parameter (v) and receives external forces (f).
These operations are executed at each time step and for all the cells of the grid.

Let’s have a look at some of the tests I have made during development. It is shown in 2D from a top down point of view. Showing it in 3D is pretty useless.

These represent the density, the fluid itself:





These represent the forces of the grid, what moves the density:





Weather forecasts use a simplified version of the Navier-Stokes equations called the primitive equations by neglecting vertical motion and some other stuff. We would very much like to do this too but it is hard to find a more computer science kind of approach to this. I should probably start to find some adult math and physics classes, I don’t know.

The main feature that drawn us to this implementation is that it is stable, which means that it is possible to use a large delta time without breaking the simulation. For instance, the simulation do not blow up if we use a 2 seconds time step, the fluid stay consistent. It is then possible to update the simulation every 2 seconds and get the same result than a simulation that ran for 2 seconds at a rate of 10 steps per seconds. It is a major feature for two reasons: the first one is that it is a very CPU intensive algorithm. It loops through the grid many times during a step, the bigger the grid the longer it takes for a step to complete. And boy, do we have a huge grid. As of now, and it is subject to change of course, it is 92x8x162 which amounts to 119232 cells to iterate through. Each cell is 20x20x20 meters. Our world is then 1800 meters wide 160 meters high and 3200 meters long. The ideal would be to double the resolution for a better accuracy around obstacles and reach 10m³ cells which would double the number of cells, you guessed it. We could as well make use of smaller cells just around obstacles to keep improving accuracy. But the sure thing is, we cannot expect to iterate through the whole simulation at every frame. Being able to update the simulation every 100 frames or so is our only chance.

The second reason is that, unlike water or fire, wind is of a much bigger scale. Comparatively, it is slow, even at its fastest. A very strong wind of 118 km/h (according to the Beaufort wind force scale), or 32 m/s, will propagate of roughly a cell and a half per seconds if the grid’s cells are 20m³. This means that, at its fastest, the simulation will move any kind of substance at 1.5 cells/seconds. It is not much. We do not even need to make any calculations we just have to look at the sky and see that clouds are pretty slow from where we are. Updating our simulation at every frame would be a waste of resources.

Since we update the simulation less often than the rendering we will need to interpolate between steps in order to give the impression of a continuous movement. And we will also need some kind of a data structure that can be used by our set of shaders. Gaël will have a more in-depth look at the rendering part in a subsequent post.

Now we know that we can update our fluid simulation every few seconds, but it is still a very long task which would block any kind of game loop for too long if we used it in the same thread. Hence the use of a second thread dedicated to the fluid simulation to free the main thread of the burden of running a step that can last 2 seconds at times. This poses a few concurrent access troubles but nothing we cannot handle.

Once we had all that, we just needed to make the algorithm work with a 3D grid, add obstacle recognition, make the wind warp around the edges, we are in a cylinder remember? We also added various forces to represent wind elevation, the effect of the perpetual rotation of the cylinder and that was it!

I am pretty sure I still have a lot of work ahead of me if we want to have a complex weather simulation with many different behaviors and parameters but this big chunk here is already pretty amazing.
Logged

Le Chant du cygne
French independent game collective
http://www.lechantducygne.com
https://twitter.com/LeChantduCygne
acatalept
Level 1
*



View Profile WWW
« Reply #8 on: May 30, 2017, 09:52:18 AM »

Love the visuals (and audio!) in your teaser video... will the full experience be soundtracked similarly?

And IMHO, fluid simulations, turbulence etc are some of the most mesmerizing and beautiful uses of computer rendering.  Glad to see so much attention to detail in this area, it will add immensely to the experience.

Looking forward to seeing more of this!
Logged

Le Chant du cygne
Level 0
*


French independent game collective


View Profile WWW
« Reply #9 on: January 22, 2018, 02:32:59 AM »

It's been a long time. Sorry about that.

The project is still on though! We have worked a lot and I hope we'll have things to share soon.

@acatalept Thx for your interest, plus it means a lot since your work is an inspiration for us! The soundtrack for the video was just an early concept, but we are planning on playing with drones/procedural synthesis and reverbs with an only diegetic sound.


Logged

Le Chant du cygne
French independent game collective
http://www.lechantducygne.com
https://twitter.com/LeChantduCygne
filbs111
Level 0
***


View Profile
« Reply #10 on: February 04, 2018, 01:34:32 PM »

This is interesting. Having realistic weather is a challenge!
Logged
Le Chant du cygne
Level 0
*


French independent game collective


View Profile WWW
« Reply #11 on: February 08, 2019, 07:58:50 AM »

Hi everyone!


Again it has been a bit of a while since our last post. And again it is a rather long one but it should be worth it I hope! We share some our thinking and research on exploration gameplays and how we would like to structure the game progression.

In the next few months you should be able to see more of Havre as we have arrived to a point where it is again possible for us to share our progress. We have managed to achieve pretty much everything we needed to do in order to start building the actual game world.


As we may have said before, Havre is an exploration game. But exploration is a rather vague concept, it does not describe what a player should do besides moving around. At the very least when thinking about an exploration game, we tend to imagine a treasure hunt with rewards at the end of every paths. But what makes us truly want to explore?

What is the difference between an exploration driven reward and a reward driven exploration?
How can we, as designers, create motivation, discourse, narration or interaction, only using world building, architectural imagination, and spatial arrangement?

Exploration based games often add variation and rhythm to the act of exploring by providing different traveling modes: walking, running, cycling, driving, flying, climbing, etc. But could it be possible to create variations with only one mode: walking? What about wandering, sauntering, rambling?


We have tried to deconstruct and find some of the core mechanics of what exploration could be in a video game and thus started thinking about the behavior one can have when exploring a new city for instance. Most of the time we tend to wander aimlessly until something catch our eye and we start looking for ways to get closer to it. But looking for a path to something interesting also often means coming by other possible interesting far away places or objects that drives you away from your first goal. And a major point of interest can also be only accessible through a series of other many minor interesting features of the place you are in. You then try at all times to be aware of the place you want to reach while keeping an eye out for closer places and striking features of the environment that you want to see and explore.

As a result we decided to use the notion of point of interests in Havre and build the game world around them. The role of a point of interest is then to catch the attention of the player and drive her movements. The degree to which a POI exerts a hold over the observer’s attention depends on its features and its relations to other visible POIs.


Whether the POI reveals itself to be what it looked like can even feel either satisfactory or frustrating unless it is far better than it was supposed to be.


The whole experience of the game is consequently based around the notion of places and environmental features that break the aimless wandering of the player and shape it the way we want it to be while still giving rooms for serendipity and freedom.



In order to build the tension that drives the player towards the various points of interests scattered through Havre’s world we had to come up with a number of ways to make a POI visible to the player. Each aims at building very different kinds of mood.


A fragment is a piece of a POI made visible somehow.

    • A fragment revealing the nature of the POI can intrigue and frustrate if the object is not easily accessible.
    • A fragment that does not reveal the nature of the POI can intrigue and frustrate but less so than the one revealing the object.
    • A fragment that hides the nature of the POI can intrigue and astonish when the object is finally revealed.



Unveilings happen when a fragment or a whole POI is progressively revealed.

    • It can be instantaneous and surprising



    • Or it can be progressive and feel intriguing. The slower the unveiling the less exciting and the more calming it feels.



   • An unveiling can be done using different shapes (triangle, square, circle, line). Each can feel different (satisfying to frustrating) depending on the POI’s or fragment’s shape.


Possibility for low angle or high angle shot to increase or decrease the sensational features of the POI or fragment.


Veilings happen when a fragment or a POI is progressively covered. It can be instantaneous or progressive.



A zoom happens when a POI or fragment is progressively getting closer to the observer and thus growing bigger.

    • Dollyshot



A break is the absence of teasing. The longer the break the more distress the observer is likely to feel.



Rhythmic sequences

The rhythmic sequences aim at bringing the various ways of making a POI visible together in sequences that build up different kinds of tensions and rhythms. By allowing us to describe longer sessions of play, these sequences help us build the various areas making up Havre’s world. We also use them to create positive feedback loops allowing the observer/player to feel whether they are on the right path or not.

As such, rhythmic sequences are the basic material with which it is possible to conceive and build an exploration driven game. They represent a new way to look at the game world and its organization.

The language used to describe sequences is based on a series of predefined symbols. Each sequence is made of several teasing features such as unveilings or veilings of a fragment of the POI, or the POI itself, as well as breaks. Each sequence can be set to various speeds and accelerations and has a value on the frustration scale.

For instance this sequence <* X3 <* X <* means instant revealing of the POI (<*) followed by a medium break (X3) during which the POI is not visible anymore then followed by an instant unveiling (<*), a short break (X) followed by an instant revealing of the POI (<*).

This other sequence here <<<# X <* corresponds to a slow unveiling of a fragment of the POI (<<<#) and then a short disappearing of it (X) followed by an instant unveiling of the POI (<*).

We also use modifiers sometimes and an instant unveiling of a POI can be decelerating: \- <* or accelerating: \+ <*
Different speeds can induce different emotions. The greater the speed of the sequence the more frenzy it feels and the more likely it is going to be also tiring on the long run. The slower it gets the more likely the observer is going to doubt and wonder. Whether the sequence is speeding up or slowing down can also feel either hypnotic or troubling.

Each sequence can take many forms and their exact configuration depend a lot on the person responsible of its integration in the game. But using this abstract language it is possible to try and develop certain feelings and adjust the rhythm of play. It is also a good way to arrange the overall feel of the game by looking at the different sequences we filled it with and make very specific adjustments if required.

In the end this is more of a general framework than a practical design methodology but thinking the game world in these terms help us think about its structure and the way it shapes the behavior of the player.

Logged

Le Chant du cygne
French independent game collective
http://www.lechantducygne.com
https://twitter.com/LeChantduCygne
Pseudavid
Level 0
**


View Profile WWW
« Reply #12 on: March 12, 2019, 10:38:53 AM »

Thanks for this update! I'm doing (hobbyist) interactive fiction and that concept of POIs and sequences is a very interesting framework for organizing contents, I'd like to implement something similar for dramatic moments. Really good ideas, thank you!
Logged

My interactive fiction is at pseudavid.itch.io

The Master of the Land, 6th in IFcomp 2018. It creates a seemingly dynamic world, gives the player complete agency within that world and then says ‘go
Pages: [1]
Print
Jump to:  

Theme orange-lt created by panic