After covering static global illumination, it's time to tackle realtime GI. Then we move on to offer better light probe support for large objects, via proxy volumes. We finish by investigating LOD groups and supporting cross-fading between LOD levels.
We hope you enjoy using it. yiff.party operates on a non-profit basis, and as such, all the server expenses are paid by our users. We don't want to run ads or infect you with crypto miners. We depend on users like you to keep the site running, and to preserve years and terabytes of amazing content—some of which is no longer available from its original creators!
Because of the nature of the site, many users are reluctant to donate. That's OK! yiff.party was created so everyone can enjoy the content we host without any restrictions or paywalls. But if you value the service we provide, and are able to, we—and our users—would be tremendously grateful if you considered making a donation.
So far, approximately $0.00 has been raised out of our target of $400.00. We're about 0% of the way there! Please note: this tracker is updated manually—don't worry if your donation doesn't show up immediately!
yiff.party's server costs are due on the last day of each month. So, we need to meet this goal before 30 September!
At this time, yiff.party can only accept donations in numerous cryptocurrencies. Please select a currency below to display the relevant donation address.
Due to the nature of sites like yiff.party, it is very difficult to find payment processors who will accept clients like us. If we were to accept donations via PayPal, it wouldn't take more than a day for someone to submit an abuse report and get our account frozen. Until a viable way of accepting monetary donations becomes available, cryptocurrency will remain the only option.
There are many resources available on how to purchase crypto. For Bitcoin, check out bitcoin.org's page on buying Bitcoin for a list of methods. For beginner Bitcoin users, yiff.party recommends using an escrow service such as LocalBitcoins.
3 / 5
In this tutorial we're going to replace unit teleportation with actual movement. Our units are going to travel across the map! And we also fix a bug.
Here you can see an impression of a unit traveling along a path. The sphere gizmos give you an idea of its movement and velocity.
Now that we know how to bake lights, lets combine both baked and realtime lighting. This can be done in various ways, either to enhance performance or realism. However, because mixed lighting is quite new, we are bound to encounter some bugs that we have to work around.
Now that we know how to find our way around a map, we're going to add units so we have something to move around. This tutorial is limited to a single generic unit type that teleport. It lays the foundation for units. In the future, we'll support multiple unit types and actually move them along paths.
An invasion! Here's a screenshot of the first units on the map.
We've finally arrived at lightmapping! I've been postponing it until Unity offered a reasonably stable solution after introducing Enlighten. Version 5.6 is good enough. In this tutorial, we'll focus exclusively on baked static lighting. This is the most basic and also the most limited form of lightmapping. Once we have that down, we can move on to more advanced modes in the future.
This time, we'll cover a few more topics related to pathfinding. We'll make movement discrete, cutting it up into turns. Then we'll search more efficiently, arriving at a true A* implementation. Finally, we'll optimize the display of the path, as well as how we clean it up.
You already know how to fill the G-buffers. Now you'll also render your own deferred lights, instead of leaving that to Unity.
From now on, the Rendering series is also created with Unity 5.6. This has introduced a few changes, but you should be able to handle that.
Also, Nvidia's Cg documentation has been taken offline. So standard shader functions, like normalize and tex2D, now link to Microsoft's MSDN search for HLSL. Weren't you aware that those were links? Now you are!
Not satisfied with just knowing distances, we move on to find the shortest paths between cells.
Here you can see the result of a pathfinding action.
Fog is a common effect, used to add a sense of depth to a scene. It can be added to a forward shader, but requires a separate pass for deferred shading. We'll use an image effect for that.
Now that we can create nice maps, let's focus on figuring out how long it would take to travel across it. In this tutorial, we'll figure out the shortest distance from all cells to a selected cell.
Here's some preliminary work done on travel costs.
So far, we've only used the forward rendering path. But Unity also supports deferred shading. This tutorial investigates how that works.
People have been asking for it a long time, and here it is! How to texture your terrain. We're going to use a texture array to blend between an arbitrary amount of terrain types.
Coming soon: texturing your terrain!
After supporting semitransparent surfaces, now it's time to support their shadows! Cutout shadows are not that hard. It's the semitransparent ones that are problematic. We have to use a trick to approximate them.
Have you enjoyed the ability to save your map? This time, we'll make it possible to save to custom map files. This allows you to create a whole collection of maps! We'll also support multiple map sizes, so you can make them as small or as large as you want.
This is the first tutorial of 2017, and I've advanced to Unity version 5.5.0.
In the last tutorial of 2016, we'll cover semitransparent rendering. Unity's standard shaders support four rendering modes. They are opaque, cutout, fade, and transparency. Until now, we've always rendered in opaque mode. Now we'll add support for the other three modes. And just like the standard shaders, our single shader will support all four modes.
Many people have been asking for the ability to save and load maps. This tutorial delivers! We'll dive into the low-level world of binary data streams, to efficiently push our maps into small files.
This tutorial is all about code. There are only a few images. If something is unclear, let me know. I might add a diagram to better explain it.
Our materials weren't complex enough, really. So this time we'll add support for occlusion maps and detail masks. Now we can create some messy materials! And that's more reastic, because reality is messy.
Besides that, we'll also take care of multi-material editing. While that's already somewhat possible, the keywords need a bit of extra work.
Some essential features were still missing. Wall towers, bridges, and huge special stuff! This installment takes care of that.
There are some new features hidden in this screenshot!
We're going to power up our shader's GUI. After that, we add support for metallic, smoothness, and emission maps. This adds a lot of flexibility to our shader. You can create complex materials, like glowing lava or a circuit board with lights. Or ajack-o'-lantern!
A few more configuration options allows us to create materials like these two.
This part covers a single big terrain feature. Walls!
Walled cells get a wall around the edges they share with a non-walled cell. As they're placed on edges, walls have to play nice with with rivers, roads, terraces, and cliffs.
Can you spot the new features?
Shading is all about reflections. Ironically, mirrors are one of the hardest things to get right. In real life, light bounces all over the place. Mirrors just work. Seemingly infinite bounces aren't a problem at all. Two mirrors facing each other? Photons race back and forth without complaining. Unfortunately, Unity can't cope with that. But here's what we can do, using reflection probes.
This is it. People have discovered the fertile lands. Trees make way for farmland, which in turn gets displaced by urban development. At least, that's a possible scenario with this new Hex Map installment.
We're not going to limit ourselves to only a single type of feature! In this screenshot, the red cubes represent development of the land. Housing and such. The green cubes represent vegetation. Shrubbery and trees. These features are painted onto the map, and controlled with sliders, just like elevation.
The features have density levels. None, low, medium, and high. Cells with higher densities will contain more and bigger features. Cells can contain both types at the same time, which results in a feature mix.
Curious about the new terrain features? Here's a sneak peek of them, in their most basic form.
It has been very sunny weather lately. I had to look for the shade, so I could write this tutorial.
Shadows complicate the rendering process a lot. In this tutorial, we'll first investigate the work needed to render shadows for directional lights. Then we'll add support for such shadows to our own shader. Once that's done, we'll move on to spotlights and directional lights.
Here's a demo scene that I'll use for the next Rendering installment. It's about shadows.
With all those rivers bringing in fresh water, lakes had to appear at some point. Water bodies can exist at various elevations, and rivers can flow in and out of them.
My next Hex Map tutorial will be about water tiles. The cells have gained a water level. When their water level is higher than their surface level, cells are submerged.
Part 6 of the Rendering series will be a bumpy ride. Because we're going to mess with normal vectors!
After tackling rivers, it is time to add a road network to our map. And of course rivers and roads have to play nice.
Going from a single to multiple dynamic lights adds a lot of complexity. We'll have to combine pixel lights, vertex lights, and spherical harmonics.
It is summer! What about hanging out by a river? Don't have any rivers nearby? No worries! You can now add them to your hex map!
Hex Map 6 will be about rivers, but roads are in the future too. As we'll draw both roads and rivers through cell centers, they get in each other's way. This screenshot shows a test to make sure that they play nice. Now that I have confirmed that everything works as it should, I can start writing part 6.
Here's some work in progress on Hex Map 6. Cell triangulation is becoming even more complex. But it's worth it, because you get flowing rivers!
The fourth rendering tutorial makes sure that you're no longer in the dark about light. It begins with transforming normals to world space, and ends with physically-based shading.
It is time to get big! By splitting the terrain into multiple chunks, we're no longer constrained by Unity's mesh limitations. And once you have a larger map, you find that you need camera controls and larger brush sizes as well. This tutorial takes care of all that.
The next Hex Map tutorial is in the pipeline! Can you spot the new stuff?
The third rendering tutorial is here. We've already used one texture in a shader. Now it's time for more!
Part four of the Hex Map series messes things up, in a good way!
This is also the first time I'm using separate markers for inserted and deleted code. If a line of code is removed without replacement, it will show up commented out, with a line through it.
Think the Hex Map terrain is too regular? Then you'll love Hex Map 4! Here's a preview screenshot showing off the upcoming features.
Part two of my Rendering series has arrived! This is about covering the fundamentals of writing a shader. So it starts off very basic, just placing vertices and applying a color, then sampling a texture. With this foundation is place, we can move on to increasingly more exciting stuff. But that's for next month!
It's springtime! To celebrate, we'll add elevation to our hex map. And because slopes aren't interesting enough, let's put in some terraces as well!
3 / 5