Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

1411482 Posts in 69370 Topics- by 58426 Members - Latest Member: shelton786

April 23, 2024, 11:33:36 PM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsCommunityDevLogsSmall Radios Big Televisions [RELEASED!]
Pages: 1 ... 3 4 [5]
Print
Author Topic: Small Radios Big Televisions [RELEASED!]  (Read 19971 times)
owendeery
Level 2
**



View Profile WWW
« Reply #80 on: October 17, 2015, 06:48:51 AM »

This week’s post is entirely about shaders.

My partner has been out of town for the past week so I found myself with a lot of free time in the evenings to work on the game. Usually, though, by the time the evening comes I’ve already been working on the game for 10+ hours. To try and combat fatigue and burnout I’ve spent the time working on shaders that can later be used in the game but also can stand on their own.

This so far has worked out great since it allows me to do something creative and semi-disconnected from the main game but still creates usable content.



Scan

After posting last week’s water shader bug to the Beautiful Fails thread and getting some positive feedback I tried to recreate the effect in a more controlled fashion with its own shader. Having genuine rather than accidental control over an effect really gives you the ability to take it further and experiment with variations. The gif on the left is the base attempt at trying to recreate the effect and the gif on the right is after some experimentation.


Scanningggggggg

It’s a fairly simple effect using the difference between the world Y-position of each fragment and a scrolling world value that has been modulus’d (modulated?). I got some questions on Twitter about how it syncs across objects without using UVs. I made this gif to show that it's a world space effect so it will sync across anything assigned that shader in world space.


Transforms don't do nothin'

I also wrote a quick and dirty 2D version on ShaderToy for those who were interested. All that’s needed to use it in a 3D space is to swap out uv.x and uv.y for vertex world positions.


Emissive

This is an effect that started as a shader but is now more of a game object system.

I’ve gotten really into the art of Beeple these days and I’m always envious of the beautiful stuff he does with emissive volumes/materials in his renders.


I don't like posting other peoples work in my devlog, but this is too cool.

While I knew I wouldn’t achieve the same quality as a Cinema4D render, I wanted to see how easily I could get emissive volume objects working in real-time.

My approach was to create a volume and fill it with point light sources that attempt to match the volume as closely as possible. This would allow me to experiment using only pre-existing engine systems. I also knew I wanted to be able to warp the shape in interesting ways, so I settled on a procedurally generated tube. It’s a shape that can be warped easily with sine waves and can be represented convincingly by a strip of point lights.


First emissive


Experiments

As you may notice all these gifs are monochrome. To get objects around the emissive to respond correctly to the bulging and shrinking of the tube I had to send an extra bit of information with each light when binding values to the lighting shader. Since this didn’t fit in with my existing lighting shaders I had to write a new one from scratch. It was pretty basic: didn’t account for directional or ambient lights, no specular term, no texturing. It also meant I had to work with objects which had been specially tagged as “lit by emissive” which isn’t well integrated into my tools so I would have to restart the game every time I wanted to spawn a new object.

The next night I folded and I modified the base lighting shaders to accept the new lighting information. This opened up a lot of possibilities now that I could light any object and scene with the emissive tube. This also meant that it wasn’t really a shader anymore, just a series of lights moving in a prescribed fashion and a mesh.



The White Whale


Art.gif


Swamp




Like I said earlier none of these effects were built with any specific purpose in the game, but you can be sure I will be absolutely filling the game with them now that they’re up and running.

Thanks for checking out the post and if you want to see any new cool stuff I’m cooking up, come follow me at @owendeery!
Logged

DireLogomachist
Level 4
****



View Profile
« Reply #81 on: October 17, 2015, 10:21:20 AM »

Amazing! Thanks for the shader code btw!
Logged


Living and dying by Hanlon's Razor
owendeery
Level 2
**



View Profile WWW
« Reply #82 on: October 24, 2015, 07:33:07 AM »

Auto Aim

One of the big takeaways from showing the game at PAX Prime in August was that my gamepad controls were terrible. The gamepad cursor stays centered by default and you pull it in the direction you want with the left analog stick. When your cursor comes upon an object you can interact with, the object itself will light up and then you can press the appropriate control to interact. Certain objects are quite small relative to the screen size and while they were easy to hit while using a mouse, they required a lot of very precise analog stick’ing to hit consistently.

This was coupled with the fact that the controller in the booth at PAX had obviously been through many gaming events and its sticks were in rough shape. While it would be easy to design for a perfect controller, I know there are some players who will have controllers that have degraded as well and I wouldn’t want them to be frustrated trying to play.



Without any auto aim enabled


Smaller objects were especially difficult


The first solution that came to me was some sort of locking system so that it was difficult (or even impossible) to have your cursor drift off of the selected object. Since I don’t have any data concerning the onscreen size of interactive objects I had no way of predictably locking the cursor on the center of the object. Instead it would lock to approximately the point where the cursor would “enter” the object. This felt really strange since it made the controller seem entirely unresponsive, and while you could “escape” from an object by pulling the stick in the opposite direction it still felt like a janky mess and had made the game feel worse rather than better.

On my second attempt I wanted to try an entirely different approach. I wanted something softer than just a locked/unlocked binary value and I wanted to do it without having to calculate or pre-define any new information about the world objects (collision/world bounds/etc.) I started thinking about signed distance fields, which are n-dimensional datasets that describe how far any specific point is from the nearest surface. SDFs are really neat and can be used for a ton of stuff from collision to lighting to text rendering. In my case I figured if I could quickly generate a SDF in real-time for my scene then I could use that data to snap the cursor to any object based on its distance.



Regular SDF (iPhone 3D Programming, Philip Rideout 2010)



Creating an SDF can take a lot of number crunching which isn't feasible for the real-time results I needed. I decided to try creating a pseudo-distance field using the techniques I already had on hand in the engine.

1.   First I get a list of all the world objects that the cursor should be attracted to.


2.   Render all those objects in full white to a black half-size framebuffer.


3.   Blur the framebuffer using the same shaders from the depth of field effect.



This gives a greyscale image that has all the properties that I would need from a distance field. I can sample points from this buffer and depending on the magnitude of the value that I get I can tell how close I am to an object I can snap to.

This was good, getting close. I could tell when the cursor was close to an object it could snap to. But I also needed to derive the direction to snap towards. It’s one thing to know how close you are to an object but without knowing which direction to go there’s not much you can do.

I rewrote the code that took samples from the distance field to take multiple samples in a circle around the cursor. All these samples are added together and weighted based on their offset from the cursor. This gives a weighted direction. So if the right side samples are all 1.0 and the left side samples are all 0.0 then the direction vector would point to the right. From there it’s a simple matter of adding that influence direction to the cursor input system so that there’s a little tug in the direction of the object. Since values get darker as the object blurs out there’s a falloff effect so that if your cursor just skirts past an object you probably won’t even notice the pull. This falloff can be adjusted by scaling the blur factor in the rendering stage.


Deriving the pull direction from multiple samples.

It's hard to demonstrate the actual feeling of the effect without controlling it yourself, but you can sort of see the 'pull' happening to the cursor in the gif below.


The final effect

So far this approach seems to have worked out. It still feels very fluid while taking a lot of the unnecessary exactness out of the gamepad input. There are still a few weird things, like the cursor wiggling around when it’s in the middle of an object with holes in it like the valve in the gif below, but most of those can be sorted with a little bit of smoothing and interpolation.


Literal jitter bugs



Thanks for checking out the devlog, hope it was interesting. This time next week I’ll have passed another milestone deadline and I will be working on the last section of the game which is terrifying but so exciting at the same time. As always if you want to see more stuff as I make it come follow me @owendeery!

Here are some of the other miscelleaneous gifs I posted this week






« Last Edit: October 24, 2015, 07:39:40 AM by owendeery » Logged

owendeery
Level 2
**



View Profile WWW
« Reply #83 on: October 31, 2015, 06:16:04 AM »

Nothing new to show off this week since I've been crunching to hit a milestone for the my publisher and it's mostly been finishing up content. I was able to get everything done though and the new build contains 80% of the completed game content so we're getting closer.

I'm going to take the weekend off to decompress and then next week I'll be working on something tangentially related to the game, but hopefully I can show some of the stuff I'm working on. Happy Halloween!

Logged

team_q
Level 10
*****


Divide by everything is fine and nothing is wrong.


View Profile WWW
« Reply #84 on: November 01, 2015, 07:00:13 PM »

I thought the glowing orb was going to turn around and there would be a SPOOKY PUMPKIN FACE on the other side.
Logged

Dirty Rectangles

_PRINCE OF ARCADE_
owendeery
Level 2
**



View Profile WWW
« Reply #85 on: November 07, 2015, 07:14:20 AM »

Nothing big to post about this week. After finishing up a pretty stressful milestone last week I spent this past week doing some administrative company stuff as well as starting on some optimization.

Since it's just me working on the game it can be difficult to stay on top of everything at once and it had been a few months since I'd even run a build on the PS4 devkit. Luckily I was still able to get it to compile with relative ease which isn't always the case since there are a few differences in graphics pipeline implementations that often force me to use different rendering methods for effects on each platform. The issue that did come up was that certain sections were running at 30fps. Hitting a solid 60fps isn't a massive deal for a slow paced game like this but the graphics are lo-fi enough that it feels ridiculous for it to be running that slow on a current gen console.

One of the main drags on rendering performance in this engine is assigning uniform values to shaders. Even with batching similar draw calls together many of the meshes use separate versions of shaders depending on whether they have diffuse textures/values, specular maps, normal map, translucency, etc. This means that before drawing each mesh I need to retrieve the locations of all the uniform bindings and then assign them their proper values. When you gather together all the lighting info for point, spot, direct and ambient lights it really adds up. Especially in dense areas with lots of lit particles.


Previous rendering pseudocode

Even using a hash table to cache the relevant uniform locations didn't really cut down on the overhead as much as I'd hoped, so I started looking into Uniform Buffer Objects (also known as constant buffers in D3D). I'd never used them before, but they're essentially blocks of raw memory that you can map to corresponding structs in C++ and GLSL and assign all at once to fulfill the duty that your regular uniforms used to have.


Same process using a UBO

This helped a ton with performance and got me back up to 60fps on consoles, where hopefully it will stay for the time being.



Sorry this weeks entry wasn't more visually interesting. I did do something really flashy, but I'm going to keep that under wraps at least until the new year comes around. And as of today I'm starting on the FINAL FACTORY. This milestone is scheduled to be finished just before Christmas which means that the game should be core content complete by the new year. Exciting stuff.


Tape storm

Thanks again for checking out the devlog. For more frequent updates and weirdo gifs follow me on Twitter @owendeery!
Logged

Louard
Level 2
**


View Profile WWW
« Reply #86 on: November 07, 2015, 08:33:24 AM »

Tape Storm? Looks more like a... TAPE WORM!!! HA!!!... Get it, Owen, TAPE WORM!!
Logged

-Louard
louardongames.blogspot.com
owendeery
Level 2
**



View Profile WWW
« Reply #87 on: November 07, 2015, 08:51:20 AM »

Grosssssssss, Louis.  Shocked
Logged

owendeery
Level 2
**



View Profile WWW
« Reply #88 on: December 07, 2015, 08:16:03 AM »

Apologies for the lack of updates recently. Currently crunching on a milestone which includes the ending of the game (!) so I don't have a ton of time for anything aside from actually getting the game done.

One thing that was cool was Small Radios Big Televisions got a mention during the keynote at PSX on Saturday. I had been told that it was going to be included somewhere but didn't get my hopes up. It ended up getting footage and a title card, which is amazing! It was cool to see the response online after people saw it, and it was literal dream come true to see something I made on an Adult Swim bump card. You can check out the video that was played below.


Alright, that's it for now. I'll try and come back for another post after this deadline is over, but I may just shut myself away for the entirety of the holidays after this.

Logged

owendeery
Level 2
**



View Profile WWW
« Reply #89 on: December 18, 2015, 05:07:01 AM »

So after 4 consecutive 80+ hour weeks: the game has an ending.

I love posting screenshots and gifs from the game, but I feel like I want to keep this last bit under wraps so at least there's some mystery.


I'm going to take some time off from work for the holidays to decompress (but I'll totally still be working because it's impossible for me not to), then come back and kick this shit into shipping mode!

To celebrate Youtube embedding on TigSource I'll leave you with a video I posted on this day last year. Happy holidays, crew!  Beer!



Logged

team_q
Level 10
*****


Divide by everything is fine and nothing is wrong.


View Profile WWW
« Reply #90 on: December 18, 2015, 08:25:40 AM »

 Beer!
Logged

Dirty Rectangles

_PRINCE OF ARCADE_
owendeery
Level 2
**



View Profile WWW
« Reply #91 on: February 25, 2016, 02:10:43 PM »

Hey everybody, remember this devlog? I sure didn't!

So yeah I haven't really had the time to update this with any kind of frequency lately, but that's because I've been working non-stop on the game to get it finished. It's verrrryyy nearrrrly there just polishing up the rough edges and getting it ready for QA. I wish I had a locked down release date to share but for now let's just say "soon".

Let's do a run down of some of the new stuff in the game:


Logo

I figured if I'm going be launching a big grown-up console game then I should have a big grown-up company splash screen, so in the Fall and early Winter I collaborated with my partner Katie on a tasty logo animation for when the game starts up.

Since I'm doing everything in the game myself I sometimes worry if the whole thing will seems a bit monotonous so I like to bring in bits of other peoples creativity when I can (more on that further down).


A weekend art jam we did to try and sort out the main features


The first few revisions


Final animated version


Revisions

Since the core of the game is finished I've been spending most of my time revising areas that I've already built. These sections either need another polish pass or need to be rebuilt completely. It's the classic case of wanting to improve upon something after you've had more practice. I've been trying to not go overboard, but some sections that I built over a year ago were looking really rough. For comparison here's a side-by-side of the first factory in its three stages of iteration over the course of the project.



Soundtrack

I spent today finishing up the last track that will be included in the game, which brings the total to over 47 songs. Doing the music has been a massive undertaking and took way more time than I expected but I always looked forward to the time I could spend doing it because it's so much more relaxing than graphics programming. People seem to really be digging the tracks that I've released so far so I'm working on doing a soundtrack release alongside the game itself.


Spreadsheet finished!


Background art

As I mentioned up top I've been trying to bring in my partner Katie to help out with some art not only because I don't have the time to do as much as I want right now, but also it's good to have a second set of eyes on a project that has been only under my control for a year and a half. Right now she's working on some really cool background stuff for the rooms.


Art!

There's a whole ton more that I'd love to get into, but that's spoiler territory. For now here's some dang sweet gifs to bring your browser to its knees! Don't forget to follow me @owendeery to get up to the minute gifs right into your face!









Logged

Impmaster
Level 10
*****


Scary, isn't it?


View Profile WWW
« Reply #92 on: May 01, 2016, 01:24:33 AM »

Any news on this game?
Logged

Do I need a signature? Wait, now that I have a Twitter I do: https://twitter.com/theimpmaster
owendeery
Level 2
**



View Profile WWW
« Reply #93 on: May 01, 2016, 06:30:32 AM »

Any news on this game?

Yes!

Sorry for the lack of updates. Building a game by yourself for multiple platforms with your own engine is an ungodly amount of work, but things are coming along! The game is currently "finished" in that I've completed a release candidate for PC that is undergoing QA testing right now and my focus for the time being is the PS4 port. Things are moving along, there's just not a ton to write about or show during this point in development.

No release date yet, but there is a window in mind and hopefully I'll have more new to share as we get closer to the summer.

Logged

owendeery
Level 2
**



View Profile WWW
« Reply #94 on: October 21, 2016, 05:48:37 AM »


Thanks to everyone who is still following this devlog. The original release window was the summer but due to all the stuff that goes into launching a console game it had to be pushed back a while. I'm soooo glad I finally get to share it with everyone. I've also opened up the soundtrack page, which will also launch on the 8th: https://owendeery.bandcamp.com/album/small-radios-big-televisions
Logged

maruki
Level 3
***


Making Aftertile


View Profile WWW
« Reply #95 on: October 21, 2016, 07:50:56 AM »

Whoa, really? That's super cool! I want to play :D Hopefully I'll be able to buy at launch :>
Logged

kalyrical
Level 0
**



View Profile WWW
« Reply #96 on: October 21, 2016, 08:35:02 AM »

Congrats on having release dates! Loving the ambience I'm getting from the game and can't wait for it to come out.
Logged

team_q
Level 10
*****


Divide by everything is fine and nothing is wrong.


View Profile WWW
« Reply #97 on: November 08, 2016, 08:08:24 AM »

OH MAN OH MAN

 Beer! Hand Any Key
Logged

Dirty Rectangles

_PRINCE OF ARCADE_
owendeery
Level 2
**



View Profile WWW
« Reply #98 on: November 08, 2016, 08:10:45 AM »

Oh yeah, hey guys, it's out today.

Steam: http://store.steampowered.com/app/390040/

PS4: https://store.playstation.com/#!/en-ca/tid=CUSA05471_00
Logged

Mr Speaker
Level 0
***

Mr Speaker: @mrspeaker


View Profile WWW
« Reply #99 on: November 08, 2016, 11:48:36 AM »

Congratulations! It looks amazing and intriguing... also, game-name-of-the-year!
Logged
Pages: 1 ... 3 4 [5]
Print
Jump to:  

Theme orange-lt created by panic