
H3D has a bustling online student community. Here's how to get involved.
How to contact us
This lecture discusses the text editor used throughout this course.
In this lecture students will learn that voxels are data points in three-dimensional arrays. Contrary to popular belief a voxel game world need not be blocky.
In this lecture students will examine the nature of three dimensional data and look at an array that stores it and a nested loop structure that creates it.
Cube World Challenge
While this course was developed in a previous version of Unity, we've tested the projects and they work with Unity 6. This video is a guide to help you adjust your learning in this course to use Unity 6.
In this lecture students will learn about the data structures that make up a cube structure and how the vertices, normals, UVs and triangles are stored.
In this lecture students will complete building a quad with script and see it displayed on play in the Unity Editor.
In this lecture students will learn how to ensure a quad can be drawn in all 6 locations to make up a cube as well as find out how to move the cube to a different location in 3d space.
In this lecture students will learn how to write code that merges mesh data into the one mesh structure.
In this lecture students will learn how to use the mesh merging code to create a cube with just one mesh.
In this lecture students will learn how to adjust the UV values of a quad to display a tile from a texture atlas.
In this lecture students will learn how to assign a block type and change the texture appropriately.
In this lecture students will learn how to restructure the code to generate multiple blocks that can be used to create a chunk.
In this lecture students will learn how to begin using the Unity Job System to merge the blocks into a single chunk.
In this lecture students will learn how to put together the structure that will be used by the job system to process the mesh.
In this lecture students will complete writing the chunk production code and get to run it for the first time.
In this lecture students will learn how to test if a block has a solid neighbouring block.
In this lecture students will learn how to amend the job system mesh merge to deal with blocks that have no mesh.
In this lecture students will be challenged to add random air blocks.
In this lecture students will learn how Perlin Noise can be used to simulate the heights of a landscape.
In this lecture students will learn how to build a graph visualiser using a line renderer to display Perlin Noise values.
In this lecture students will learn about fractal brownian motion and use it to generate a more realistic looking landscape.
In this lecture students will be challenged to use Perlin Noise to add height data to a chunk and create their own landscape.
In this lecture students will learn how to modify the code in a chunk to consider it's position within the world.
In this lecture students will learn how to create their first world class that will generate multiple chunks.
In this lecture students will implement a coroutine to draw the world to enable interacting with it while it is drawing.
In this lecture students will bring a First Person Controller into the environment so they can walk around on the terrain.
In this lecture students will learn how to create a progress bar to show
In this lecture students will learn how to position the First Person Controller in the landscape above the centre point of the terrain after the world finishes building.
In this lecture we will quickly update the PerlinGrapher tool to allow its further use in defining the heights of the layers we will add to the blocks.
In this lecture students will learn how to properly texture a grass block with the three necessary textures for the sides, top and bottom.
In this lecture students will rework the Perlin graphing tool to become and input device for creating layers in the landscape.
In this lecture students will learn how to use probability to determine when a mineral appears within a layer.
In this lecture students will learn how to add a layer to the world that is between two Perlin graphs.
In this lecture students will learn how to create a method to generate 3D Perlin Noise values.
In this lecture students will learn how to create a visualisation tool to allow them to see how a 3D Perlin Noise value looks.
In this lecture students will learn how to integrate the cave generation algorithm into their chunks.
In this lecture students will learn how to place a layer of bedrock across the entire bottom layer of the world.
In this lecture students will learn how to adjust the code to focus on building chunk columns.
In this lecture students will put in place data structures and methods to manage the building of new chunks as the player moves around the world.
In this lecture students will continue adding the code to dynamically generate more of the world as the player moves around.
In this lecture students will finalise the dynamic building of the chunks that surround the player.
In this lecture students will learn how to hide chunk columns that don't need to be displayed.
In this lecture students will learn how to turn a for loop into a parallel job to speed up the creation of chunk data.
In this lecture students will learn how to build a larger world in the background after the initial world has loaded.
In this lecture students will learn how to generate random values correctly so they work inside parallel script.
In this lecture students will learn how to grab a hold of the location of a block that is clicked on in the world.
In this lecture students will learn how to put together a menu of block types in order to select the blocks they want to build.
In this lecture students will be challenged to complete the code for adding new blocks into the world.
In this lecture students will learn how to develop the code to allow building across chunks.
In this lecture students will learn how secondary UV values will be used to display cracks on blocks and begin coding for an extended mesh data set.
In this lecture students will work through the changes required to the Quad and Block code to deal with a second set of UVs.
In this lecture students will learn how to integrate two sets of UV values into parallel mesh processing.
In this lecture students will learn how to implement differing block health values so different blocks take longer to destroy than others.
In this lecture students will learn how to heal any hit blocks after three seconds.
In this lecture students will discover the data stored in the world that is required for successfully saving a version of the world.
In this lecture students will learn how to extract the data from the world data structures and place it in a serialisable class.
In this lecture students will learn how to save the data from the world into a file on the computer's hard drive.
In this lecture students will learn how to read the world data from a file and be challenged to integrate it into the code.
In this lecture the code for loading the chunk data from file and building the chunks from this will be completed.
In this lecture students will be challenged to integrate the loading bar into the loading from file code.
In this lecture a new save file will be created to store the visibility status of each chunk and reload as required.
In this lecture students will rewrite the block neighbour finding code to allow easy access to blocks that are neighbours in different chunks.
In this lecture students will learn how to integrate a new enumerator into the code that will create falling blocks.
In this lecture students will learn how to take into consideration all air blocks as they become available to test if there are falling blocks above that need to be processed.
In this lecture students will create a method to allow a block type to flow into a neighbour block.
In this lecture students will complete the flow code as well as check if the blocks might flow off the edge of the map.
In this lecture students will learn how to use a combination of probability and 3d Perlin Noise to plant trees in the surface of the map.
The Tree Designer
In this lecture students will learn how to use a simple tree designer to plan out the look of their trees and get the code to place in the chunk script to grow them.
In this lecture students will be challenged to add in a world wide water level to create an ocean effect across the landscape.
All New Content Added for Unity 2020+ and works with Unity 6!
Did you know that there is not one single cube used in Minecraft? Have you ever looked at Minecraft and wondered, "How did they build it?" - a great thing to ponder, it is. If you haven't and think that programming a whole bunch of cubes is child's play, then think again. On the surface Minecraft looks as though it would be a simple world to recreate in Unity. Start placing cubes around a scene and see how far you get before the frame-rate grinds to a mind-numbing halt. So wonder and fret no longer, as this course reveals the secrets of programming and rendering procedurally-generated voxel worlds, like Minecraft, with C# in Unity.
In this course, Penny teaches all the invaluable skills you will require to build a blocky world from scratch using her internationally acclaimed teaching style and knowledge from over 30 years working with games and graphics. But hold on tight as you'll be taken on a journey across the computer graphics realm as it is taught to post-graduate university students. Through detailed descriptions and hands-on workshops examining all you need to know about 3d data structures, building meshes from scratch, using noise algorithms to generate terrain features and caves, and texturing blocks you will be programming your own world in no time.
Learn how to program and work with:
voxels
custom built polygons and meshes
vertices and normals
UV mapping
texture atlases
parallel processing and the Unity Job System
Unity's MeshAPI for parallel mesh creation
Perlin noise
infinite terrain generation
loading and saving data
Contents and Overview
After getting a little experience in why it's such a bad idea to build a Minecraft type world using cubes, you'll start following along with Penny, exercise after exercise, toward the end of building your very own and unique blocky terrain.
You'll begin by dissecting a cube and examining its fundamental parts from vertices, to normals, to texture mapping. Armed with this knowledge, you will then begin writing code that redefines the cube and makes it far more efficient to draw as a terrain component. You'll then bring these pseudo-cubes together to form chunks, to optimise rendering performance. Once you've worked on creating a solid world of chunks you will then learn about smooth noise and a little fractal geometry will be introduced to assist you in carving out realistic landscape features including caves.
With terra-firma to stand on, you'll next add a player character and start exploring the new world. To prevent you falling off, you will also start working on the logic to build the world around you in real-time, out to infinite boundaries.
When you are done with exploring, it will be time to start digging and building. It's in this part that you will learn how to add and remove blocks at the click of a button to further mould the terrain to your liking.
Finally, you'll cover the dynamics of adding flowing water, falling sand and start working on the logic for creating your very own biomes.
What students are saying about this course:
Hi! I wanted to thank you and compliment you for the Minecraft Unity course. I've been a (web) programmer for 20 years. After so long creating somewhat boring work I'm excited to make games. My interest is in creating procedurally generated, complex worlds. Learning about Minecraft, therefore, seemed like a good idea.
Love the amount of detail Penny goes into! Not too little, not too much, she manages to hit the sweet spot that gets you a deep understanding of what's going on, coupled with the ability to jump in with confidence and start doing things yourself. VERY pleased with my course purchase, and look forward to more by her!
Clear, concise, introduction and extension of concepts required to efficiently generate Minecraft style worlds, including Perlin noise and fractal Brownian motion.