Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

1411279 Posts in 69323 Topics- by 58380 Members - Latest Member: bob1029

March 28, 2024, 02:43:59 PM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsCommunityDevLogsDesolus: A Surreal First Person Puzzle Game
Pages: 1 ... 17 18 [19] 20 21 ... 26
Print
Author Topic: Desolus: A Surreal First Person Puzzle Game  (Read 109051 times)
alieser
Level 0
*


View Profile WWW
« Reply #360 on: October 27, 2018, 02:26:00 AM »

Hey Mark, glad to hear things are getting calmer for you. I also had one of those intense summers this year, definitely know how it feels!
Loving how the game is looking right now, really tasteful visuals.

Wanted to ask you, as someone who also has a day job and plans to move into full time indie developement, how was the transition for you? Did you save up some funds to live through or did your deal with the producer covered that? Sorry if this is too personal hahah.

Anyways, you're an inspiration and keep up the great work!
Logged

Concept Artist // Open for Freelance Work

https://www.artstation.com/tripna
Mark Mayers
Level 10
*****



View Profile WWW
« Reply #361 on: October 27, 2018, 12:18:58 PM »

Hey Mark, glad to hear things are getting calmer for you. I also had one of those intense summers this year, definitely know how it feels!
Loving how the game is looking right now, really tasteful visuals.

Wanted to ask you, as someone who also has a day job and plans to move into full time indie developement, how was the transition for you? Did you save up some funds to live through or did your deal with the producer covered that? Sorry if this is too personal hahah.

Anyways, you're an inspiration and keep up the great work!

In regards to transitioning to full time, I would say you might be better off moving to part time at your day job.

Around ~Jan 2016 I switched to part time while I was working at MIT.
I usually put in about 24-32 hours per week at my day job, and about 24-32 hours per week on Desolus.
This was a sustainable pace for me, and this kept me going for about 2 and 1/2 years.

Currently I'm full time on the game, but I prepared well in advance and saved up a hefty amount so I wouldn't starve.
It's not enough to finish the game, but I took a calculated risk that I would get a publisher deal in the foreseeable future.
Failing this, my plan is to do remote contracting work part time. However, it's unlikely I would go back to working a day job.

I've always wanted to go full indie, but I purposely held on to that day job for a very long time.
I would honestly evaluate your situation before taking the leap, and have multiple plans for action.
My life aligned in a way where it was necessary for me, but everyone has different circumstances.

It takes an enormous amount of effort to secure funding from a good publisher.
Be prepared to spend 3-6 months getting a good pitch together if you're seeking funding. 
Fortunately I had assistance from friends who have pitched before as AAA or commercial indie.
This gave me a head start in preparing my pitch, but it's still a huge amount of effort and I still have work to do.

Hopefully that info was helpful.

Thanks for the kind words though!
I'm feeling optimistic on where the game is headed, and feel I accomplished a great deal this month.

Logged

Desolus Twitter: @DesolusDev Website: http://www.desolus.com DevLog: On TIG!
Mark Mayers
Level 10
*****



View Profile WWW
« Reply #362 on: January 07, 2019, 12:47:59 PM »

Update 143: 01/07/2019

Hey everyone, hope you all had a fantastic holiday and New Year.

I've been pretty quiet about Desolus recently, but I've been working full time on the game and have made a lot of progress.

---

PERSONAL UPDATES

If you read the last post, I mentioned that I left my day job in late August, and am now on Desolus full time.
This was quite the exhilarating leap to make, albeit a bit tumultuous.

As I mentioned previously, my mom was diagnosed with cancer in mid September.
She is doing well, her treatment was challenging but her health is really all I could ask for.

Last week I completed my drive across the United States, traveling from the East Coast to Seattle.
Leaving my home in Boston was difficult, but I'm excited to see new horizons in Seattle. 

I am now relocated in my new apartment, and it feels great to have a permanent residence again.
It's been almost 5 months since I've had access to my desktop, so this is extremely cathartic.

---

DESOLUS UPDATES

Over the last several months, I've been pitching to publishers to ensure Desolus has stable funding until release.
This process has been going well, although it's definitely challenging.
I've been in contact with several fantastic publishers, and hopefully I'll have news about this soon.

I've worked on Desolus about 40-50 hours a week since October. This has been exceptionally good for my productivity and health.
I feel great despite everything, as this is the first time I've had the chance to work on the game exclusively.

---

I'll have exciting news and content updates to share over the next several weeks, so stay tuned!

Logged

Desolus Twitter: @DesolusDev Website: http://www.desolus.com DevLog: On TIG!
DireLogomachist
Level 4
****



View Profile
« Reply #363 on: January 07, 2019, 07:30:47 PM »

Good to hear, Mark! This project 100% deserves funding!
Logged


Living and dying by Hanlon's Razor
Mark Mayers
Level 10
*****



View Profile WWW
« Reply #364 on: January 08, 2019, 10:38:20 AM »

Good to hear, Mark! This project 100% deserves funding!

 Toast Right Toast Left
Logged

Desolus Twitter: @DesolusDev Website: http://www.desolus.com DevLog: On TIG!
Mark Mayers
Level 10
*****



View Profile WWW
« Reply #365 on: March 11, 2019, 12:15:33 PM »

Update 144: 03/11/2019

This will be primarily a tech and programming focused entry, providing insight to recent work I've done on the game.
I have plenty of content updates to share, but will save those for a later date Smiley

---

PAVING THE WAY FORWARD

Since Desolus was built off of many different prototypes over the past several years (as you can see in this DevLog) a lot of the game's tech needed pruning and revision.

Desolus is now in full production, but I needed to take a few steps back to pave the way forward.  
As such, in the month, I've been refactoring a lot of the core tech architecture of Desolus.  
This really couldn't be accomplished until I was full time on the game, since a laser focused effort was critical in ensuring I did this the correct way.

This update happened in four critical parts:
-Upgrading the Unity Engine
-Rewriting the Rendering System
-Improving the Lighting System
-Scaling the Game to 1:1 Unity:Meter Scale    

I'll cover the first three in the following entry.

---

STEP 1: UPDATING UNITY

For anyone who has ever used Unity, you'll know upgrading the game engine's version can be a lengthy and involved process.
For about 2+ years, Desolus has been using Unity version 5.4.
I held out for a long time, but finally decided to take the plunge to update, since I needed features from future Unity versions.

The Unity version I opted for, was 2017.4 LTS. The LTS is the most critical factor to this, as Unity offers 'Long Term Support' for this specific version.
It's entirely possible I could ship the game on this version of the engine, but I likely will update to a future LTS release, when available. (2017.4 is the only LTS release so far).



Upgrading Unity is a tumultuous process, 999+ console errors is no joke.

After holding my breath and upgrading the Desolus project, I was greeted with an exhausting error list.
Fortunately the massive amount of errors were only editor issues caused by ancient code which I was no longer using.
The primary difficulty I encountered, however, was updating my particle system engine to a modern version.  

Since my earliest prototypes, Desolus has used TC Particles which is written by Arthur Brussee.
I've been using a custom version of TC Particles since about August 2016, If you want a look at some of the Desolus specific changes, check out this DevLog.
Unfortunately, my custom version was no longer compatible with Unity 2017, and I had to redo every particle asset in the game. Oof.
However, this did give me the opportunity to upgrade the game's particle engine to a modern version.

Updating Unity took about 2 days of work in its entirety, but was a necessarily evil for the work to come.

---

REASONS FOR REWRITING THE RENDERING SYSTEM

One does not simply rewrite a rendering system in a game. Desolus, in particular, has a fairly complex system in place.
There is some unique shader and camera wizardry to make sure transitions between alternate universes are truly seamless.

The tech person in me was craving interesting problems, but I had to justify rewriting the game's rendering from a project management standpoint.
For some context, the first system took me almost six months to finish, but I was considerably less experienced then.

The impetus for upgrading the rendering system for Desolus was to incorporate Volumetric Lighting into the game.
This is an effect which has been seen in recent AAA titles, and offers aesthetically pleasing scenes.



Volumetric Lighting in 2018's God of War. Notice the three dimensional light rays coming from the tree.

I planned on integrating volumetric lighting into the game for quite some time, as lighting is a huge part of the art style in Desolus.
However after playing through the new God of War on my PS4, I felt particularly inspired to do so.

However, integrating volumetric lighting into the game would take quite a bit of work.
I didn't initially plan on rewriting the game's rendering system, but it was a single bug which eventually made me have to do it.

---

THE RENDERING BUG TO END ALL BUGS

I have been struggling with a specific 'bug' in Unity for TWO YEARS.

Desolus uses the stencil buffer to achieve the seamless alternate dimension effects in the game.
This is a buffer which essentially tells the game's camera which dimension to draw on screen (either universe 1 or universe 2).
I won't be going into detail on an explanation regarding the stencil buffer, but there is a detailed tutorial here which you can check out.

The specific issue I dealt with, is that in Unity you can't apply image effects which have stencil buffer values.
What this means in Desolus is having an image effect applied to a specific universe is impossible.
Among other things, image effects like volumetric lighting wouldn't work between universes.

This was an issue which I first encountered in September 2016, which you can read about here.

Back then I came up with a temporary solution, which I later learned is based on a bug in Unity's engine.
Instead of dealing with that bug and finding a correct way, I opted for an alternate solution.
It came back to haunt me.



Undead bugs coming back to haunt me. (Bug pics from Hollow Knight)

The short explanation is, when using Graphics.Blit when creating an image effect, the stencil buffer gets wiped out.
It even says so in the Unity documentation but gives no example solution (typical Unity):

Note that if you want to use depth or stencil buffer that is part of the source (Render)texture, you'll have to do equivalent of Blit functionality manually
- i.e. Graphics.SetRenderTarget with destination color buffer and source depth buffer,
  setup orthographic projection (GL.LoadOrtho), setup material pass (Material.SetPass) and draw a quad (GL.Begin).


After scouring the internet for a solution, I found out I answered my own question 2 years ago.... in my own DevLog post...
I also came across this poor soul who asked the same question in 2014, which I replied to. I came full circle.

The temporary solution I came up back in 2016, and revised earlier this month was this:



In hindsight, unfortunately this solution doesn't 'just work.'

This was more of a band-aid to the problem than uncovering a real solution, and predicates on a bug in Unity.

What this ended up causing was a single frame rendering glitch with all stencil buffer effects.
Stencil effects would lag behind for a frame, causing nasty artifacts and a weird ghosting effect.



You can see this ghosting in the above image. For about exactly a frame, the dimension portal lags behind the rest of the scene.
In addition to being visually displeasing, this also broke the seamless transition of the alternate dimensions.

I believe this 'solution' only partially works due to a memory leak from RenderTexture.GetTemporary.
My assumption is that RenderTexture.GetTemporary allocates a pool of about ~5 render textures and reuses them cyclically.  

For whatever reason, I think the stencil buffer from the previous frame's temporary RT doesn't get wiped out.
Note this doesn't work when creating/destroying a normal RT every frame, which implies it is indeed a leak of some sort.
What you are seeing is the previous frame's stencil value. (Just a theory).

One frame! One frame is all it takes to wreck your rendering system.

---

THE OLD RENDERING SYSTEM IN DESOLUS

Previously, Desolus used a single camera rendering system, with some weird shader voodoo magic.
A single camera approach worked for a reasonable amount of time, however has a few disadvantages.

Creating a culling system between dimensions is challenging with a single camera.  
To save on computational resources, I had a C# script which would automatically cull objeects in the alternate dimension.
It wasn't perfect, the process was a bit finicky, and processing this script for every object is expensive on the CPU.

There were more rendering bugs than 'THE BUG TO END ALL BUGS' which were tedious edge cases, not easily remedied with a single camera.
Because of issues such as this, I thought it best to create a layered system with multiple cameras.

---

(Continued in next DevLog post)

« Last Edit: March 11, 2019, 12:46:38 PM by Mark Mayers » Logged

Desolus Twitter: @DesolusDev Website: http://www.desolus.com DevLog: On TIG!
Mark Mayers
Level 10
*****



View Profile WWW
« Reply #366 on: March 11, 2019, 12:16:48 PM »

(Continued from previous DevLog post)

--

QUICK NOTE

A lot of the reason I'm writing this, is for future documentation of the system for my own purposes.
I spent about 3 weeks creating this new rendering system, and it's still fresh in my mind. I will unfortunately inevitably forget the small details.

However, I also hope this is educational for future independent developers making 'weird games' with 'weird rendering problems.'
Otherwise, I hope this is at least an interesting and insightful read.
 
I also wanted to say thanks to Billy Manning and Sam Loeschen for answering graphics questions and helping keep my sanity.

---

THE NEW RENDERING SYSTEM

The new Desolus rendering system is divided up into FOUR different cameras, which each have different roles.

I'll be going over the steps in the rendering pipeline below.
Note this isn't a completely thorough look, but I'll define the rest as 'magic' and summarize to the critical steps.




A gif which shows off the major rendering steps in Desolus.

---

PRE PASS



This compute 'pass' is responsible for generating the volumetric lighting in Desolus.

For its volumetric lighting, Desolus uses Aura.

After considerable research on volumetric lighting, I planned on using Aura to save time, instead of writing my own system.  

The back end of Aura uses compute shaders, which calculate the volumetric lighting efficiently on the GPU.

One of the major problems I initially had to solve, was how to store and separate lighting between universes.
I initially thought of having two instances of Aura with two respective computes, but figured out I could do something better.

Instead, I figured out I could store and compute all volumetric lighting at the same time and store in the same global texture.
-All lighting rendered for Universe 1 is stored in Blue
-All lighting rendered for Universe 2 is stored in Red

The actual visual colors for their respective universes are applied during a later step, and the Red/Blue is used to store this data.

---

CAMERA 1



Camera 1 renders the first universe in the game.

In this particular scene, the player is in Universe 2, so the only part of the universe visible is what shines through the portal.

STEP 1:
The camera first renders all of the objects in Universe 1, which are visible when looking through the portal.

STEP 2:
In this step we grab the volumetric lighting which was computed previously, and stored in the BLUE channel of the global texture.
(For Universe 2, this would be the RED channel).

We pull this data, and convert it to black/white (simply use the same BLUE value but for all Red/Blue/Green channels).
We can multiply the black/white data by a pre-defined lighting color, to get the lighting for the scene.

STEP 3:
In this step, we simply add steps 1 and 2 together to form a composite image.

Since our pre-pass computation to create the volumetric lighting doesn't care about portals, it generates lighting for the entire scene.
Later in the process when combining the images together, only the relevant parts are saved.

---

CAMERA 2



Camera 2 renders the second universe in the game.

Since in this particular scene, the player is in Universe 2, the only part of the universe visible is what is outside the portal.
Other than that, the steps are identical to the first camera's steps.

---

CAMERA 3



Camera 3 is responsible for rendering transparent objects in the game, like particles.

Transparent particles are a little bit trickier to handle than opaque objects.
It's harder to sort the depth of transparent objects when using this type of rendering system.
We would have to do some type of manual depth check, and that gets super nasty to figure out with the multiple universes.

I might find a more robust solution in the future, but a simple solution is to give transparent particles their own camera.

---

CAMERA 4



The purpose of this camera is to combine all of the other images together, to form the proper image.

The final camera initially clears to a null value, (in this case a lime green), and renders nothing.

After each camera renders their separate objects, this data is stored in separate render textures.
A C# script and shader combines these textures into a single image, with an algorithm similar to the painter's algorithm.
There's some crazy magic in my own algorithm, as you can't simply add the images together. I'll save those secrets for another date.

Finally, once all of the images have been combined, post-processing is applied to the entire picture.

---

CULLING SYSTEM AND FUTURE WORK

The astute will realize this process lacks a proper culling system for objects rendered in the opposite universe.
This means the game essentially renders two sets of objects, which results in lower performance.



Example of a custom culling matrix to cull unnecessary objects.

I'm currently working on a new culling system for the game, and fortunately this is much easier with multiple cameras.
Cameras in Unity can have a custom culling matrix to cull objects before they are even rendered, using a fairly simple mechanism.

I have also looked into using GL.Viewport as an alternate approach.
This approach would set the camera in the opposite universe to only render the bounding box of what's visible through a dimension gate.
I haven't tested this approach yet, but my intuition believes it's possible.

---

RESULTS



I think the new lighting system speaks for itself in... volumes.

---

« Last Edit: June 27, 2020, 09:45:23 PM by Mark Mayers » Logged

Desolus Twitter: @DesolusDev Website: http://www.desolus.com DevLog: On TIG!
oahda
Level 10
*****



View Profile
« Reply #367 on: March 11, 2019, 12:53:09 PM »

Great write-up—I had a lovely read! Updating must have been really scary, but I assume you made a backup in case it just wouldn't work out. Blink Really liked reading about the volumetric stuff in detail with all the images of the passes. The final result looks amazing! Kiss
Logged

Mark Mayers
Level 10
*****



View Profile WWW
« Reply #368 on: March 11, 2019, 12:55:59 PM »

Great write-up—I had a lovely read! Updating must have been really scary, but I assume you made a backup in case it just wouldn't work out. Blink Really liked reading about the volumetric stuff in detail with all the images of the passes. The final result looks amazing! Kiss

Hahaha yea, updating Unity is always scary. I keep a hard copy in case I need to do a serious revert, but it's also all backed up with GIT.

Glad the post was insightful! I really think the new lighting adds a lot to the game.
Logged

Desolus Twitter: @DesolusDev Website: http://www.desolus.com DevLog: On TIG!
Mark Mayers
Level 10
*****



View Profile WWW
« Reply #369 on: April 03, 2019, 10:50:29 PM »

Update 145: 04/03/2019

Hit a development milestone, broke 4000 commits in the Desolus repository.

Gomez Slow and steady wins the race. Gomez



---
Logged

Desolus Twitter: @DesolusDev Website: http://www.desolus.com DevLog: On TIG!
Mark Mayers
Level 10
*****



View Profile WWW
« Reply #370 on: June 02, 2019, 04:42:25 PM »

Update 146: 06/02/2019

The past month and a half I've been creating prototypes of modular architecture assets for Desolus.
I've been working on a detailed cathedral as a 'proof of concept' for these assets, I'll talk about it more later.

In the meantime, a cool gif of using 2D Booleans in Archimatix to create cathedral windows.


« Last Edit: June 27, 2020, 09:46:30 PM by Mark Mayers » Logged

Desolus Twitter: @DesolusDev Website: http://www.desolus.com DevLog: On TIG!
Mark Mayers
Level 10
*****



View Profile WWW
« Reply #371 on: June 08, 2019, 06:24:27 PM »

Update 147: 06/08/2019

BUILDING CATHEDRALS

A prototype of a cathedral which I have been working on over the last month.
I've been working hard at increasing the architectural realism of Desolus, while also maintaining the game's stylized approach.

This cathedral was meant to both be a 'study' of architecture, but also a means to develop reusable modular assets for the game.

This cathedral was also a reproduction of the one I made a year and a half ago, which I wrote about previously.







---

REFERENCE AND RESEARCH



My primary reference is the great church of Ulmer Münster.
I wasn't opting for an exact copy by any means, but more of an impression of a Gothic cathedral.

I can also say that this particular book is worth its weight in gold for cathedral design.

---
Logged

Desolus Twitter: @DesolusDev Website: http://www.desolus.com DevLog: On TIG!
Mark Mayers
Level 10
*****



View Profile WWW
« Reply #372 on: November 18, 2019, 08:03:35 PM »

Update 148: 11/18/2019

DEVELOPMENT UPDATE

It has been quite some time since I posted in this DevLog!
I want to get back into the habit of creating regular DevLog content and development updates on Desolus.

So what's been going on in the last several months?

For almost a year, I was full time on Desolus. However, at the end of summer I transitioned back to part time.
Since then, I have been working on several game development contracts.

---



Starting at the very beginning of September, I have been working on Manifold Garden, which shipped a month ago. The game was received well!

I helped polish the game by fixing geometry issues, fixing shader bugs, and fixing code issues with critical gameplay systems.
In the final months, the game had a team of about 8 full time core staff (including myself), and two full assistant studios.

This was my first commercial shipped title, which is immensely helpful for my professional career and life experience.
I am still working on the game ultra-part-time in a support role, to help wrangle up any remaining issues within my realm of expertise.  

---



Immediately following the Manifold Garden contract, I shifted to working on Spellbreak in partnership with Proletariat and Skymap Games.
I am working in a consulting position to help with difficult technical issues pertaining to Unreal Engine 4.

Although I have worked in Unreal Engine previously, this gives me an opportunity to master another game engine and leverage my existing knowledge.
It's not directly in a production role like with Manifold Garden, but I get to do a deep dive into UE4 and solve complex problems.  

It's proving to be an interesting position so far!

---

What's most important, is I can truly consider myself a professional game developer at this point.
Although my previous work as a Computer Science researcher at MIT was interesting, on a day to day basis I wasn't working in games.

Work on Desolus remains slow and steady, as it was before.
I plan on shifting back into full time work on Desolus either next spring, or next summer.

The game's vision, the tech behind it, and my experience in game development have grown immensely in the last year.
I've been digging myself deeply into the craft of game development, and it's starting to pay off.

---

« Last Edit: November 18, 2019, 08:23:15 PM by Mark Mayers » Logged

Desolus Twitter: @DesolusDev Website: http://www.desolus.com DevLog: On TIG!
amasinton
Level 1
*



View Profile
« Reply #373 on: November 18, 2019, 09:05:35 PM »

Marvellous work, as ever! Glad to see that it’s making steady progress.  Also, amazed to hear that there is any progress given the fantastic other projects you’ve been working on!  Huge congratulations to you and the entire team on shipping Manifold Garden! What an epic journey!

(And your vision of alum is very close to my heart. Well done.)

I look forward to future devlog posts as you get back into the swing of things.
Logged
Mark Mayers
Level 10
*****



View Profile WWW
« Reply #374 on: November 18, 2019, 09:26:03 PM »

Marvellous work, as ever! Glad to see that it’s making steady progress.  Also, amazed to hear that there is any progress given the fantastic other projects you’ve been working on!  Huge congratulations to you and the entire team on shipping Manifold Garden! What an epic journey!

(And your vision of alum is very close to my heart. Well done.)

I look forward to future devlog posts as you get back into the swing of things.

Thank you so much! Toast Right
Logged

Desolus Twitter: @DesolusDev Website: http://www.desolus.com DevLog: On TIG!
oldblood
Level 10
*****

...Not again.


View Profile
« Reply #375 on: November 19, 2019, 06:00:42 AM »

Mark, glad to see Desolus is still in development. Congrats on breaking in with these other projects. Sounds like great learning experiences for sure.
Logged

oahda
Level 10
*****



View Profile
« Reply #376 on: November 19, 2019, 06:16:41 AM »

Woahh, I've been following this and I've been following Manifold Garden, but I never realised you were one of the ones that William was working with! Shocked Very cool! Looking forward to future Desolus progress of course!
Logged

Mark Mayers
Level 10
*****



View Profile WWW
« Reply #377 on: November 19, 2019, 03:51:37 PM »

Mark, glad to see Desolus is still in development. Congrats on breaking in with these other projects. Sounds like great learning experiences for sure.

Thank you! And absolutely, it really helps I am now effectively spending my entire work week making games.
I now feel like I'm running a marathon without missing a leg. It's relieving. 

Woahh, I've been following this and I've been following Manifold Garden, but I never realised you were one of the ones that William was working with! Shocked Very cool! Looking forward to future Desolus progress of course!

Yea! Given Desolus and Manifold Garden are both first person puzzle games, and in Unity, it seemed like a natural fit.

---

I have a *lot* to share about the game's development over the last year, after a long period of silence. 
I'll be planning more frequent DevLog updates detailing everything that's new.

Logged

Desolus Twitter: @DesolusDev Website: http://www.desolus.com DevLog: On TIG!
Mark Mayers
Level 10
*****



View Profile WWW
« Reply #378 on: December 20, 2019, 11:57:25 AM »

Update 149: 12/20/2019

I promised I would update my DevLog more, and (egads!) I realize it's already been a month.

---

PORTAL RENDERING

In the month of November, I created a new rendering system for Desolus which allows pixel perfect infinitely recursive portals.

The theory behind the portal rendering is:
-Using a screenspace shader, convert the stencil buffer to a colored image, in the form of a red/blue mask representing each universe.
-Save the camera's color buffer to a RenderTexture.
-Save the camera's depth buffer to a high precision 32 bit RFloat RenderTexture.
-Using the color/depth RenderTextures and our red/blue stencil mask, combine single correct image.



Example of a frame in Desolus:
-Left column has the camera color buffers.
-Right column has the camera depth buffers.
-Red/blue mask is the stencil buffer written to the color buffer: Portals use stencils to determine which universe to render.


I was able to get it 99.9% solved, but a single frame bug stopped me.

The single frame bug is due to a 'chicken or the egg' problem.
-I need that red/blue mask to render a frame
-I can't create that red/blue mask without rendering a frame

Unfortunately, I only render a frame by using the previous frame's mask, which causes a single frame lag and various bugs.
There are other ways to render portals in Unity, but I am convinced this specific method is impossible in Unity's default Rendering Pipeline.

---

SCRIPTABLE RENDER PIPELINE AND UNITY

For years I have been struggling with various weird graphics issues like this Portal bug in Unity.
I find the default rendering too restrictive and solutions have too many edge cases.

I decided to make the move to Unity's Scriptable Rendering Pipeline (SRP).
This essentially allows you to create your own version of Unity's rendering inside Unity.

Other games I have worked on, like Manifold Garden, have used SRP to their advantage for weird rendering solutions.
After solving so many graphics bugs while working on Manifold Garden, I have been exposed to both the benefits and terror of SRP.

Additionally, after shipping a game, I realized how important it is to build stable tech which serves as a solid foundation.
I plan on shipping with this future implementation of Desolus portal tech, and my own SRP.
I figured creating my own implementation of SRP is worth a shot.  

---

GETTING STARTED: CREATING A LIGHTING MODEL

Unity's own documentation for SRP is.. to say the least, sparse.
Fortunately, I found a very well documented introduction to setting up SRP for Unity 2019 by Catlike Coding.
This goes through the basics of creating your own SRP, but also talks about creating a lighting model.

I won't be using this exact lighting model (because Desolus has a unique art style) but I strongly recommend the read.



Basic Diffuse Lighting

This shading model simply combines the lighting of four directional lights.
It's a very simple lit shader which combines the colors of directional lights together.
All materials have the same lighting properties, and are not physically-based.



Simple BRDF

This is a super basic version of BRDF lighting working in Scriptable Render Pipeline.
This is using Unity's Universal Pipeline BRDF function, covered in the 'directional lights' documentation.
I decided that I would improve on it further with my own implementation.



BRDF With Simple Fresnel

This is a slightly modified version of the basic BRDF function, but I added a simple Fresnel functiong.
Fresnel lighting is something Unreal Engine has by default, but Unity does not.
Fresnel gives a nice soft rim lighting effect to shading.  



BRDF Based on Disney's Implementation, with added Fresnel

Getting considerably more complicated here, I looked into Disney's implementation of BRDFs used in their CG movies.
This academic paper, Physically-Based Shading at Disney, gives insight into how more complex lighting models work.
I decided to use an implementation based on Unity's version of Disney's BRDF function.

---

PORTING SHADERS TO SRP: CG to HLSL

Most of the Desolus shader code is fairly ancient, which I wrote when considerably less experienced.
I decided I would both improve the quality and performance of Desolus shaders, but also port them from Cg to HLSL.

In SRP, Unity shader language is moving from Cg language, to pure HLSL.
Cg is pretty similar to HLSL, however there is some small variance which requires manually porting shaders.

I decided to start with my sky system, as it's the least complex set of shaders I have.



Porting the Skybox Shader

Porting the Skybox shader was fairly painless, and was almost a direct translation of code.
It served as a good tutorial of sorts to get my feet wet.



New Cloud Shader

However, porting over the cloud shader proved to be considerably more difficult.
After struggling for about an hour, I decided to simply rewrite it from scratch in HLSL.
All this is currently is a quad, a scrolling texture, and a parallax effect. Needs a lot of improvement.

---

MOVING FORWARD

I still have a great deal to accomplish migrating the game to SRP.
-Port over all existing shaders to HLSL.
-Create shadows and integrate into HLSL shaders.
-Implement support for Image Effects and Post Processing
-Implement support for Compute Shaders
-Actually make my Portals, for real.

I'm estimating it's going to take at least another month, especially with only the modest 15-20 hours a week I can devote to Desolus currently.
However, progress is progress, and I'm moving that much closer to the goal post.

---
« Last Edit: October 26, 2021, 09:33:10 PM by Mark Mayers » Logged

Desolus Twitter: @DesolusDev Website: http://www.desolus.com DevLog: On TIG!
ThemsAllTook
Administrator
Level 10
******



View Profile WWW
« Reply #379 on: December 20, 2019, 12:49:19 PM »

It looks like this project has been around for a while, but I'm just finding it now. It looks fantastic! Definitely going to be keeping an eye on this one.
Logged

Pages: 1 ... 17 18 [19] 20 21 ... 26
Print
Jump to:  

Theme orange-lt created by panic