We may earn an affiliate commission when you visit our partners.
Course image
Penny de Byl, Penny Holistic3D, and Michael Bridges

Procedural generation in games and virtual environments lends itself to the algorithmic generation of infinitely unique computer-created experiences. Its potential lies in its ability to automatically develop digital content on demand, reducing the amount of work required by programmers and modellers. However, a lot of preparation is necessary for such a strategy to be implemented.  A thorough understanding of the role that both sides of the game development coin (technical/logic and art/design) plays in procedural generation is key for a successful implementation. In this course, Penny and Mike bring a unique experience to both programmers and artists alike and combine their skills and many years of industry and academic knowledge to bring you a holistic learning experience, in which you will find content and invaluable mastery.

Read more

Procedural generation in games and virtual environments lends itself to the algorithmic generation of infinitely unique computer-created experiences. Its potential lies in its ability to automatically develop digital content on demand, reducing the amount of work required by programmers and modellers. However, a lot of preparation is necessary for such a strategy to be implemented.  A thorough understanding of the role that both sides of the game development coin (technical/logic and art/design) plays in procedural generation is key for a successful implementation. In this course, Penny and Mike bring a unique experience to both programmers and artists alike and combine their skills and many years of industry and academic knowledge to bring you a holistic learning experience, in which you will find content and invaluable mastery.

This course uses Unity 2020.3 and Blender 3.0 and is Windows and Mac compatible.

The content has been tested and works with Unity 6.

The content is presented in two parts which can be studied in any order, independently or together.

In Part A, Mike will be taking you through a series of stages, starting with blocking out your city with simple placeholders, a critical design step often overlooked. Taking those placeholders we add a little extra detail to start bringing the city to life and map out the road system properly. Once that warm-up is out of the way, Mike will start focusing on thinking in a more modular manner by looking at the fundamental building blocks required to make our assets. Then finally, we will move from placing the pieces manually to placing them automatically, first with Blender's Modifier Stack and finally completely procedurally using Blender 3.0's new Geometry Node system.

In Part B, Penny will begin by taking you through a variety of workshops using the Unity game development engine, to teaching you how to manipulate and position road models on a plane to create a city street map.  Following this, algorithms will be worked through to create data structures to store city information and populate the city with residential, commercial, and industrial buildings.  The commonly used algorithms for Voronoi Diagrams and Perlin Noise will be employed to calculate city zones and city population densities.

By the end of this course, you will have a professional toolkit of programming and modelling skills that will give you the advantage over others who are "just programmers" or "just modellers", including knowledge of multiple procedural techniques that can be employed in both Unity and Blender. Understanding game development that tightly integrates both design and logic from this standpoint is critical to making you a valuable commodity in the job market or preparing you for running an indie operation.

What others are saying about Penny's courses:

  • I do like Penny de Byl's courses and way of teaching, they are much more specific than your average "master Unity" kind of courses and usually, you don't learn just the engine but also how things work behind the scenes. She's really amazing.

  • I've been coding for about 3 years and since purchasing Penny's "Animation", and "Procedural Terrain" courses, the excitement and fun have returned once again to my programming.

  • Penny and her team know their stuff and are just amazing in explaining everything, breaking it down. Most importantly she challenges you to do stuff on your own rather than just "spoon-feeding" you everything. Then she comes back and shows you one way of doing it. Just an amazing course.

What others are saying about Mike's courses:

  • I've used Blender for a number of years, but I'm a total novice next to Mikey and I've learned so very much from him here.

  • Mikey is an amazing teacher, I can't praise this course highly enough. Worth every penny.

  • Mikey is a talented, thorough, and clear instructor, and he knows how to make the student think 'for themselves', which is such a great experience.

Enroll now

What's inside

Learning objectives

  • Explain the nature of 3d space and producing a grid for displaying and snapping 3d models together.
  • Identity several procedural algorithms that can be applied to generate virtual city maps.
  • Apply fractal and dynamic methods to algorithmically generate buildings and cities.
  • Create a bespoke procedurally generated city map complete with districts, population densities and vegetation.

Syllabus

By the end of this section students will understand how to study the course and were to look to for assistance.

This lecture contains a welcome message from the instructor.

Read more

H3D has a bustling online student community.  Here's how to get involved.

How to contact us

Description: Important Reading on Common Issues students have and how to ask for help.

In this video students will learn how to setup the AI Navigation package for the versions of Unity that it is not automatically included with.  This package will be used later in this course.

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, we outline the content in this section.

In this lecture, we download the version of Blender we are going to need to complete the course.

In this lecture, Mike goes over his settings in Blender so you can follow along and understand the changes that have been made.  Some might be useful for you as well.

In this lecture, we discuss why placeholders are important and why we start with them.

In this lecture, we discuss our scaling options in this project and how it impacts our modelling in Blender.

In this lecture, we plan out the pieces/buildings that we want in our city.

In this lecture, Mike shows his script that comically does work the first time! However, using it will save a tonne of time when exporting your models.

In this lecture, we look at how to export our models as an FBX file manually.

In this lecture, we create a more detailed road piece so it is no longer a simple plane.

In this lecture, students are challenged to create the rest of their road pieces.

In this lecture, we focus of creating placeholders that have a more detailed silhouette.

In this lecture, Mike creates some more outline buildings so we have a small collection of similar buildings.

In this lecture, we look at origins, they are important and we will look at them again later as well.

In this lecture, we look at how normals affect your model and how if they are orientated the wrong way you can end up with a series of issues.

Brilliant well done for completing this section.  Looking forward to seeing your work, and we'll see you in the next section.

In this lecture, Mike introduces the section and the topics we'll be looking at.

In this lecture, we adapt our road pieces and height the benefits of working at a lower detail initially, whilst you are designing your pieces.

In this lecture, we will look at two options that when combined allow you to have a low poly mesh with sharp edges and smooth curves as well.

In this lecture, we start adding areas of detail on to our buildings, by first blocking out where the detail will go.

In this lecture, we look at the other options you have with extruding, which are super useful!

In this lecture, we have a look at a little know feature - being able to create a custom transforms.

In this lecture, we dive into using the mesh bevel tool and show an extra use for it when popping together your models

In this lecture, we take a look at our organisation. Keeping on top of your organisation, even if it is just naming objects in your scene will help you massively later on. Storing objects in collections will help with grouping your objects.

In this lecture, we use the often misunderstood boolean modifier to create cuts into our model whilst being aware of its potential downsides.

In this lecture, we add more detail to our models to a point where the model looks more like its final version.

Excellent getting to the end of this section- I am really looking forward to seeing what you have created so far. You should have a really nice collection of buildings that you can use in your city.

Welcome to modular thinking! In this lecture, we overview what is coming up in this section.

In this lecture, we take a look at existing assets and start to use them and break them down into their potential modular pieces.

In this lecture, we reinforce the importance of the origin of an object.  It is really important to get this right now as it is how we will be placing our pieces.

In this lecture, we look at how we can use a piece in more than way, whilst potentially limiting our building options, we also have fewer pieces to manage.

In this lecture, we break our new pieces down even further to give us more control over how we arrange our pieces and how we get the positive side effect of more optimal models.

In this lecture, we look at ways of ensuring better transitions between our individual pieces.

In this lecture, we bring our new models back to the city and check that they work visually when scaled to match.

In this lecture, we look at methods for resetting the scale of an object.

In this lecture, we start to add detail to our new placeholder pieces to bring them up to the same level of detail we had at the end of the last section.

In this lecture, we take a moment to export our model, check for errors and fix them.  It is a great idea to check you models often by exporting them regulary.

In this lecture, we will use the array modifier to place our objects rather than doing it manually.

In this lecture, we look at how we can control the array modifier using empties.

In this lecture, we put together the parts needed to make a basic apartment block.

In the lecture, we will focus on creating a simple roof so that our apartment is complete with all of its fundamental parts.

In this lecture, we have a basic introduction to have to use a driver.

In this lecture, we will use drivers so we can have parametric control over our model.

In this lecture, we fix the bottom of the model so that it responds to the parameters we are using to adjust the building.

In this lecture, we place the rest of the building detail onto the building and ensure is adjusts correctly when we change the building's parameters.

In this lecture Mike sums up the content taught in this section.

In this lecture, Mike goes through this section's goals and what we are aiming for.

In this lecture, we set up our geometry nodes interface.

In this lecture, we start by adding simple primatives.

In this lecture, you will learn how to translate, rotate and scale geometry.

In this lecture, we use an input node to set and control the parameters of other nodes.

In this lecture, you will learn about setting up control parameters that are outside of your node setup.

In this lecture, you will start to use math nodes to automate multiple nodes based upon a single input.

In this lecture, we look at creating node groups as both a method of organisation and creating a group that does one thing- like a function in programming.

In this lecture, you will learn how to frame nodes for better organisation.

In this lecture you'll learn some node tips prior to your mid-section challenge.

In this lecture, you will be challenged to put your knowledge of geometry nodes together and create a simple wooden toy only using primatives.

In this lecture, you will learn how to append collections into your scene.

In this lecture, you will learn about the new concept of instancing geometry on points.

In this lecture, you will use one of the objects you have made within geometry nodes.

In this lecture, you'll put together 3 more walls to complete a basic structure.

In this lecture, you will use the existing structure as a template to create a ground floor.

In this lecture, you will learn how to use the collection info node with the instance on point node to great effect.

In this lecture, we will finish our building by adding on a roof!

In this lecture, you will learn how to assign a material to geometry created in geometry nodes.

In this lecture, you will learn the steps you need to take to export your model when using geometry nodes.

In this lecture, we finish off this section and Part A of the course!  I hope you have enjoyed the course so far, and reach out if you have any questions.

In this lecture students will learn how to create a simple city road layout in the form of a grid.

In this lecture students will learn how to add straight pieces of road into the grid system to push the crossroads further apart.

In this lecture students will learn how to place other modelled road pieces into the grid and examine the shortfalls of the current technique.

In this lecture students will learn how to program a crawler that will map out a city based on a grid.

In this lecture students will learn and alternative way to have a crawler move around a grid which implements rotation.

In this lecture students will learn how to add corner road pieces to the crawled out city plan.

In this lecture students will learn how to add straight pieces of road to the crawler grid.

In this lecture students will learn how to eliminate duplicate road pieces from the city grid.

In this lecture students will learn how to begin writing the code to replace intersection types with single pieces such as crossroads and t-junctions.

In this lecture students will continue working out where intersection pieces should be replaced with crossroads.

In this lecture students will learn how to complete adding the code for creating T-junctions.

In this lecture students will complete replacing all multi piece intersections with single pieces to complete their city grids.

In this lecture students will learn how to add the necessary colliders onto the roads to assist in house placement on the grid.

In this lecture students will learn how to place houses in the city that avoid the roads.

In this lecture students will learn how to place houses by roads.

In this lecture students will learn how to turn a house to face a road.

In this lecture students will learn how to add more buildings by the roadsides and also push the buildings back from the road.

In this lecture student will learn how to construct an internal city map to keep track of the tiles at each grid location.

In this lecture students will discover how to fix the city mapping to pickup road pieces that are missed at the beginning and end of the crawl.

In this lecture students will learn how to use mesh combining tools and GPU instancing to optimise rendering.

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Uses both Unity and Blender, which allows learners to develop skills in both a game engine and a 3D modeling software, broadening their toolset
Employs Voronoi Diagrams and Perlin Noise, which are industry-standard algorithms for generating organic-looking patterns and distributions, useful for creating realistic city layouts
Covers Blender's Geometry Node system, which is a relatively new and powerful tool for procedural modeling, giving learners an edge in modern 3D content creation workflows
Requires Unity 2020.3 and Blender 3.0, which may necessitate learners to update their existing software or acquire specific versions to follow along with the course content
Includes a section on AI Navigation package setup, which is relevant for creating dynamic and interactive city environments with autonomous agents and characters
Teaches techniques for optimizing rendering using mesh combining tools and GPU instancing, which are essential for achieving good performance in large and complex city scenes

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

Procedural city generation in unity & blender

According to students, this course teaches procedural city generation in Unity and Blender, providing a solid foundation in both programming and modeling. Instructors Penny and Mike are praised for clear instruction and engaging styles. The dual focus, including Blender Geometry Nodes and practical projects, is highly valued. It covers essential procedural techniques. Some find it challenging for beginners without prior experience. Compatible with Unity 6. Students gain useful skills for unique environments.
Content updated for Unity 6 compatibility.
"Glad to see the content has been tested and works with Unity 6, addressing potential version issues."
"There's a helpful video addressing how to use the course with Unity 6 projects."
"The course projects seem well-maintained and functional with recent software versions."
"Instructor added guidance for newer Unity versions, which is very helpful."
Covers modern procedural modeling.
"The Geometry Nodes part was fantastic, really opened my eyes to new possibilities in Blender."
"Learning procedural modeling with Geometry Nodes is exactly what I needed to update my skills."
"Mike's explanations of Geometry Nodes were surprisingly clear for a complex topic."
"Blender's Geometry Nodes section is a key takeaway and very well presented."
Hands-on exercises build real skills.
"The hands-on coding and projects are the strongest part of the course for me."
"Building an actual city incrementally was very rewarding and practical."
"I can immediately apply these techniques to my game development projects."
"Focus on building actual systems helps solidify concepts learned."
Course covers both programming and modeling.
"Getting expertise in both Unity and Blender in one course is a huge advantage."
"I appreciated learning how to integrate models from Blender into Unity."
"The split structure makes sense, you can focus on the programming or the art side."
"Excellent course for covering both the programming (Unity) and modelling (Blender) aspects."
Instructors are praised for clarity.
"Penny and Mike are excellent instructors, very clear and easy to follow."
"I really appreciate their teaching style, they break things down well."
"The explanations for both coding and modeling were very understandable."
"Instructors explain complex topics clearly and engagingly."
Challenging without prior experience.
"As a total beginner to both Unity and Blender, I struggled quite a bit to keep up with the pace."
"While great, I think this course assumes a certain level of familiarity with the software tools."
"Could be a bit more beginner-friendly in the initial setup sections for complete newcomers."
"Recommend having basic knowledge of Unity/C# or Blender before diving in."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Learn to Program & Model Procedural Cities in Unity/Blender with these activities:
Review Blender's Geometry Nodes
Practice using Blender's Geometry Nodes to prepare for the procedural construction section of the course.
Browse courses on Geometry Nodes
Show steps
  • Create simple geometric shapes using Geometry Nodes.
  • Experiment with different node combinations to modify the shapes.
  • Try creating a basic parametric model using input nodes.
The Blender Book
Gain a solid foundation in Blender's interface and basic modeling techniques.
View The Blender Book on Amazon
Show steps
  • Read the introductory chapters on Blender's interface and tools.
  • Follow the tutorials on basic modeling techniques.
  • Experiment with creating simple models on your own.
Road Generation Algorithm Exercises
Reinforce understanding of road generation algorithms by implementing variations of the grid-based and crawler-based methods covered in the course.
Show steps
  • Implement a grid-based road generation algorithm with different grid sizes.
  • Modify the crawler algorithm to create more complex road layouts.
  • Experiment with different turning probabilities for the crawler.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Procedural Building Generator Prototype
Apply the learned techniques to create a prototype building generator in either Unity or Blender.
Show steps
  • Design a modular building system with interchangeable components.
  • Implement a script or node graph to procedurally assemble the building.
  • Add parameters to control the building's size, shape, and style.
Document Your Procedural City Workflow
Create a blog post or video tutorial documenting your process of creating a procedural city using the techniques learned in the course.
Show steps
  • Choose a specific aspect of the procedural city generation process to focus on.
  • Document each step of the process with screenshots or video recordings.
  • Explain the reasoning behind your design choices and the challenges you faced.
Generative Design
Explore the broader concepts of generative design and algorithmic art.
Show steps
  • Read the chapters on fundamental generative design principles.
  • Experiment with the Processing code examples provided in the book.
  • Adapt some of the Processing examples to Unity or Blender.
Contribute to a Procedural Generation Project
Contribute to an open-source project related to procedural generation in Unity or Blender to gain experience working with a larger codebase and collaborating with other developers.
Show steps
  • Find an open-source project on GitHub or GitLab that aligns with your interests.
  • Read the project's documentation and contribution guidelines.
  • Identify a bug to fix or a feature to implement.
  • Submit a pull request with your changes.

Career center

Learners who complete Learn to Program & Model Procedural Cities in Unity/Blender will develop knowledge and skills that may be useful to these careers:
Indie Game Developer
Indie game developers often work with limited resources, and procedural generation techniques can be a powerful tool for creating expansive game worlds. This course helps indie game developers to create city environments efficiently. The course provides a thorough understanding of both the technical and artistic aspects of game development, teaching how to use Unity and Blender to generate cities procedurally. An indie game developer can utilize the course's methods to create games with detailed and varied urban environments. An indie game developer will find great value in this course.
Technical Artist
A technical artist bridges the gap between art and programming, and this course helps to become proficient in both domains. Technical artists need to understand how to optimize art assets for game engines and implement procedural workflows. This course, with its dual focus on Unity and Blender, provides a comprehensive approach to procedural content creation. A technical artist can learn to create tools and pipelines that allow artists to generate content more efficiently. The course's emphasis on integrating design and logic equips the technical artist with the knowledge to create streamlined workflows, making them invaluable in game development teams. This focus on a holistic approach to game development will give a Technical Artist needed insights.
Digital Artist
Digital artists create art using digital tools and platforms and this course can equip them with techniques for generating complex and varied cityscapes. The course teaches about design and procedural techniques in Blender, enabling digital artists to create assets efficiently. The course focuses on Blender 3.0's Geometry Node system which can be used to produce variations and intricate details algorithmically. A digital artist may use this course to further their artistic skills.
3D Modeler
3D modelers create the visual elements that make up virtual environments, and this course directly enhances a modeler's ability to generate complex cityscapes. The course emphasizes modular design and procedural techniques in Blender, enabling 3D modelers to create assets more efficiently. Instead of manually designing every building and street, a 3D modeler can learn to automate the process, producing variations and intricate details algorithmically. The course’s focus on Blender 3.0's Geometry Node system is particularly relevant, as it provides powerful tools for procedural modeling. A 3D modeler who wishes to build vast, detailed cities will appreciate the time-saving and creative possibilities offered by procedural generation.
Game Designer
A game designer often relies on procedural generation techniques to create expansive and varied game worlds, and this course may prove useful. Game designers need to rapidly prototype environments and iterate on design concepts. This course focuses on procedural city generation using Unity and Blender, directly addressing the need for efficient world-building tools. The skills acquired, such as blocking out cities with placeholders and using Blender's Geometry Node system, helps a game designer generate complex urban landscapes quickly. Understanding how to integrate both technical and artistic aspects of game development, as emphasized in the course, enables game designers to communicate effectively with programmers and artists, leading to a more cohesive and efficient development process.
Level Designer
Level designers craft the interactive environments players explore, and procedural generation techniques can greatly enhance their ability to create diverse and engaging levels. This course helps level designers to create cityscapes that are infinitely unique. The course teaches how to use algorithms and data structures to populate cities and employ techniques like Voronoi Diagrams and Perlin Noise to generate zones and population densities, providing level designers with the tools to create realistic and varied urban environments. A Level Designer will rely on procedural generation to make games unique.
Augmented Reality Developer
Augmented reality developers overlay digital content onto the real world, and this course can help them create realistic and engaging urban experiences. Augmented reality developers can use this course to understand how to generate cities algorithmically, allowing them to create dynamic and interactive augmented reality experiences that respond to the user's environment. The course, which teaches how to manipulate and position road models on a plane to implement a city street map, can be used by augmented reality developers to build location-aware applications that provide users with information and experiences relevant to their surroundings. An augmented reality developer will be able to bring real-world value to users.
Virtual Reality Developer
Virtual reality developers create immersive experiences, and this course may prove useful for those looking to build realistic and engaging urban environments. The ability to procedurally generate cities in Unity and Blender enables virtual reality developers to create expansive and detailed worlds without the need for manual creation. This course emphasis on creating data structures to store city information and employing algorithms to calculate city zones and population densities, making virtual reality experiences more realistic. A virtual reality developer can use the skills to create immersive urban environments.
World Builder
World builders are responsible for creating the lore, history, and geography of fictional worlds, and procedural generation tools can help them rapidly prototype and visualize their creations. This course may be useful for world builders looking to generate detailed city maps and urban environments. A world builder can utilize the course's techniques in Unity and Blender to quickly create visual representations of their worlds, populate them with buildings and infrastructure, and iterate on designs. By learning to integrate design and logic, they can create worlds that are not only visually appealing but also internally consistent and believable. A world builder may also use the skills of level designers and technical artists to create worlds.
Simulation Engineer
Simulation engineers create virtual models of real-world systems for training, analysis, and prediction. Procedural city generation techniques can be valuable for creating realistic urban environments in simulations, and this course may prove useful. A simulation engineer can utilize the course's methods for generating city maps, traffic patterns, and population distributions. This course teaches how to employ algorithms for Voronoi Diagrams and Perlin Noise to calculate city zones and population densities. The skills acquired help simulation engineers to build more realistic and informative models that closely mimic real-world conditions.
Software Engineer
Software engineers can use the skills taught to develop tools or plugins for procedural generation in Unity or Blender. The course gives software engineers an understanding of the algorithms and data structures used in procedural city generation, making them effective in creating or customizing procedural generation systems. By understanding how to integrate design and logic, the software engineer can create more user-friendly tools for artists and designers. Software engineers may need a background in computer science.
Architectural Visualizer
Architectural visualizers create photorealistic renderings and animations of buildings and urban environments. This course offers techniques that may be useful for generating detailed and varied cityscapes. An architectural visualizer can adopt the modular modeling and procedural generation techniques taught in the course to create realistic urban backdrops for architectural designs. The course focuses on Blender's Geometry Node system and is relevant, enabling architectural visualizers to quickly generate variations of buildings and street layouts. An architectural visualizer can create beautiful and complex renders.
AI Engineer
AI engineers may find this course helpful as procedural generation techniques are sometimes used to create training datasets for AI models, particularly in areas like autonomous driving or urban simulation. This course will give AI engineers the knowledge about how to generate varied and realistic urban environments. The course, which presents algorithms for working in Unity and Blender, can be used by AI engineers to create large datasets of cityscapes for training AI models. Typically, an advanced degree is required to be an AI engineer.
Urban Planner
Urban planners design and manage the development of cities and regions. While this course focuses on the technical aspects of procedural generation, an urban planner may find the material useful in visualizing and simulating different urban development scenarios. The course, which presents algorithms for Voronoi Diagrams and Perlin Noise, can be used by urban planners to create models of city zones and population densities. Urban planners can use procedural generation techniques to explore various design options and assess their impact on the environment and community. A background in city planning or civil engineering may be required.
Data Scientist
Data scientists may use procedural generation to simulate urban environments for data analysis and modeling purposes. This course emphasis on generating city maps, traffic patterns, and population distributions gives data scientists the tools to create virtual cities that can be used to test and validate data models. A data scientist can utilize the techniques taught in the course to produce realistic and varied urban environments for data analysis. A data scientist might also benefit from additional training in statistics or computer science.

Featured in The Course Notes

This course is mentioned in our blog, The Course Notes. Read one article that features Learn to Program & Model Procedural Cities in Unity/Blender:

Reading list

We've selected two books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Learn to Program & Model Procedural Cities in Unity/Blender.
Provides a comprehensive introduction to Blender, covering the basics of modeling, texturing, and animation. It's particularly useful for students who are new to Blender and want to get a solid foundation before diving into the procedural modeling aspects covered in the course. While not specifically focused on procedural generation, it provides essential background knowledge for using Blender effectively. This book useful reference tool for those who are new to Blender.
Explores the principles of generative design using the Processing programming language. While not directly focused on Unity or Blender, it provides a strong foundation in the algorithmic thinking required for procedural generation. It's more valuable as additional reading to broaden understanding of generative techniques. This book is commonly used as a textbook at academic institutions. It adds more breadth to the existing course.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser