Skip to content
Snippets Groups Projects
Verified Commit 9c9ff94f authored by Lars Frost's avatar Lars Frost
Browse files

Minor fixes and improvements

parent 07f4dba6
No related branches found
No related tags found
No related merge requests found
#import "template.typ": * #import "template.typ": *
#import "global.typ": * #import "global.typ": *
#let title = "Guideline for the RWTH GameJam 2024\nof Fachschaft Mathematik/Physik/Informatik" #let title = "Guideline for the GameJam 2024\nof Fachschaft Mathematik/Physik/Informatik"
#show: doc => apply-template(title, "en", doc) #show: doc => apply-template(title, "en", doc)
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
- During the presentation, you will show the games on your own devices. You shall further upload a compiled version, that is distributed to all participants. - During the presentation, you will show the games on your own devices. You shall further upload a compiled version, that is distributed to all participants.
= Technical Requirements = Technical Requirements
- The game has to support either Windows (10+) or Ubuntu (24.04.). If possible (your engine supports this, and you used to OS-specific APIs), you shall submit versions for Windows, MacOS, and GNU/Linux. - The game has to support either Windows (10+) or Ubuntu (24.04.). If possible (your engine supports this, and you used no OS-specific APIs), you shall submit versions for Windows, MacOS, and GNU/Linux.
- If your game is intended for gamepads, it must also be possible to play it with keyboard and mouse. - If your game is intended for gamepads, it must also be possible to play it with keyboard and mouse.
- There will be repositories in the RWTH Gitlab. You also submit your final version there. - There will be repositories in the RWTH Gitlab. You also submit your final version there.
- We do not mandate a specific engine, though we do recommend to use Godot or Unity. We also recommend you to get familiar with the engine you would like to use beforehand. - We do not mandate a specific engine, though we do recommend to use Godot or Unity. We also recommend you to get familiar with the engine you would like to use beforehand.
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
= Introduction: How to develop games? = Introduction: How to develop games?
== What does a game consist of? == What do I need for a game?
To create a game several components are usually needed: To create a game several components are usually needed:
*Graphics*#h(1em) *Graphics*#h(1em)
...@@ -40,12 +40,13 @@ To show something in the game, you will need graphical assets. ...@@ -40,12 +40,13 @@ To show something in the game, you will need graphical assets.
In 2D games, the graphics consist of 2D UI Overlay elements like the menu, buttons, or the score. In 2D games, the graphics consist of 2D UI Overlay elements like the menu, buttons, or the score.
The rest of the game graphics are also 2D images and are usually called sprites. The rest of the game graphics are also 2D images and are usually called sprites.
Often, many sprites are stored together in the same file called spritesheet or texture atlas. Often, many sprites are stored together in the same file called spritesheet or texture atlas.
Animations are done by having different variants of an object and cycling through them.
#figure(image("images/Characters_SpriteSheet.png"), caption: [ #figure(image("images/Characters_SpriteSheet.png"), caption: [
Example character sprites from #link("https://opengameart.org/content/top-down-pokemon-esque-sprites")[Corey Archer] Example character sprites with walk animations from #link("https://opengameart.org/content/top-down-pokemon-esque-sprites")[Corey Archer]
]) ])
In 3D games, the UI overlay is done the same way as in 2D games, but the the 3D world is more complicated. In 3D games, the UI overlay is done the same way as in 2D games, but the 3D world is more complicated.
#figure(image("images/0AD_example_colored.png"), caption: [ #figure(image("images/0AD_example_colored.png"), caption: [
A screenshot from #link("https://play0ad.com/media/screenshots/")[0.A.D.]. The 2D UI Overlay is marked green. Buildings, People, Animals, Ground, Trees, and everything else are 3D models. A screenshot from #link("https://play0ad.com/media/screenshots/")[0.A.D.]. The 2D UI Overlay is marked green. Buildings, People, Animals, Ground, Trees, and everything else are 3D models.
]) ])
...@@ -65,7 +66,7 @@ but there are several other types. ...@@ -65,7 +66,7 @@ but there are several other types.
Models also have a material, with many more properties to change its appearance. Models also have a material, with many more properties to change its appearance.
You can see the influence of many common properties in #link("https://docs.blender.org/manual/en/4.0/render/shader_nodes/shader/principled.html")[the blender documentation for physically based rendering (PBR)]. You can see the influence of many common properties in #link("https://docs.blender.org/manual/en/4.0/render/shader_nodes/shader/principled.html")[the blender documentation for physically based rendering (PBR)].
Note, that advanced shadered materials from 3D software are usually not exportable to game engines. Note, that advanced shadered materials from 3D software are usually not exportable to game engines.
This is in part because lack of standardized formats, but also because games require real-time rendering, This is in part because of lack of standardized formats, but also because games require real-time rendering,
which heavily restricts how complex graphics can be. which heavily restricts how complex graphics can be.
For unanimated objects, this is sufficient. For unanimated objects, this is sufficient.
...@@ -74,7 +75,8 @@ First, we add bones to the model. ...@@ -74,7 +75,8 @@ First, we add bones to the model.
Then we say for each combination of bone and vertex, Then we say for each combination of bone and vertex,
how much a change in the bone position should influence the position of that vertex (this process is called skinning). how much a change in the bone position should influence the position of that vertex (this process is called skinning).
Then for each point and each keyframe, we say what position the bone is in that frame. Then for each point and each keyframe, we say what position the bone is in that frame.
This way of animation is called skeletal animation. This way of animation is called _skeletal animation_.
If the relative position between bones is fixed, the connection is called a _joint_.
#let subpipe(filename) = [#image("images/pipeline/" + filename + ".png", height: 10em, width: 10em, fit: "contain")] #let subpipe(filename) = [#image("images/pipeline/" + filename + ".png", height: 10em, width: 10em, fit: "contain")]
#figure(grid(columns: (1fr, auto, 1fr, auto, 1fr), #figure(grid(columns: (1fr, auto, 1fr, auto, 1fr),
...@@ -89,9 +91,9 @@ This way of animation is called skeletal animation. ...@@ -89,9 +91,9 @@ This way of animation is called skeletal animation.
), caption: [Typical components of a 3D model]) <3dmodel> ), caption: [Typical components of a 3D model]) <3dmodel>
*Sound*#h(1em) *Sound*#h(1em)
Other assets usually used are sounds. Other assets almost always used are sounds.
These are divided into music (in minecraft that would be the constant background music or the menu music) These are divided into music (in minecraft that would be the constant background music or the menu music)
and sound effects (f.e. the placing of a block, the opening of a door, the click on a menu button). and sound effects (short: _SFX_) (f.e. the placing of a block, the opening of a door, the click on a menu button).
There is usually one music played concurrently, while sound effects are triggered by events and may overlap without being faded into each other. There is usually one music played concurrently, while sound effects are triggered by events and may overlap without being faded into each other.
*Physics*#h(1em) *Physics*#h(1em)
...@@ -128,8 +130,8 @@ If you want to do your own networking, I also recommend the networking section o ...@@ -128,8 +130,8 @@ If you want to do your own networking, I also recommend the networking section o
#info[This section does not apply to Godot. Godot does not use ECS, but uses an object-oriented class hierachy.] #info[This section does not apply to Godot. Godot does not use ECS, but uses an object-oriented class hierachy.]
Game engines usually use the entity-component-system (ECS)#footnote[Strictly speaking Unity does not use ECS either, but only the EC-pattern. The systems part is not used in Unity.]. Game engines usually use the entity-component-system (ECS)#footnote[Strictly speaking Unity does not use ECS either, but only the EC-pattern. The systems part is not used in Unity.].
An entity is like an object. An entity is like an object.
It could be a physical object in the game, f.e. the player character, the camera, or a projectile. It could be a physical object in the game, f.e. the player character, the camera, a light source, a spawn point, or a projectile.
But it could also be something more abstract, f.e. an animation or #add("entities without spatial components"). But it could also be something without relevant 3D Location, f.e. an event receiver or a global script.
Entities have components, that define the entities functionality. Entities have components, that define the entities functionality.
For example, an arrow projectile could have the following components: For example, an arrow projectile could have the following components:
...@@ -139,7 +141,9 @@ For example, an arrow projectile could have the following components: ...@@ -139,7 +141,9 @@ For example, an arrow projectile could have the following components:
- a rigid body component, that tells the physics engine to move the entity according to rigid body physics - a rigid body component, that tells the physics engine to move the entity according to rigid body physics
- a script component, to process events (f.e. the event that the arrow hit another entity) - a script component, to process events (f.e. the event that the arrow hit another entity)
#add("Godot oder Unity Screenshot: Links ist die Hierachy der Entities zu sehen. Rechts die Components des ausgewählten Entities.") #figure(image("/images/Unity/components.png"), caption: [
Screenshot from Unity with the hierachy of entities to the left and the components of a PlayerArmature to the right.
])
== Where can I obtain free assets? == Where can I obtain free assets?
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
= How to Godot = How to Godot
== Tips == Hints
- All fields accepting numbers also accept math expressions like `sqrt(2) - 1`. - All fields accepting numbers also accept math expressions like `sqrt(2) - 1`.
== 3D Navigation == 3D Navigation
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment