com.mavrodiev.gd1 26.0.0 → 26.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +3 -0
- package/README.md +3 -0
- package/Samples~/Gas-Station/Editor/GasStation00Definition.cs +39 -0
- package/Samples~/Gas-Station/Editor/GasStation00Definition.cs.meta +2 -0
- package/Samples~/Gas-Station/Editor/GasStation01Definition.cs +33 -0
- package/Samples~/Gas-Station/Editor/GasStation01Definition.cs.meta +2 -0
- package/Samples~/Gas-Station/Editor/GasStation02Definition.cs +31 -0
- package/Samples~/Gas-Station/Editor/GasStation02Definition.cs.meta +2 -0
- package/Samples~/Gas-Station/Editor/GasStation03Definition.cs +33 -0
- package/Samples~/Gas-Station/Editor/GasStation03Definition.cs.meta +2 -0
- package/Samples~/Gas-Station/Editor/GasStation04Definition.cs +34 -0
- package/Samples~/Gas-Station/Editor/GasStation04Definition.cs.meta +2 -0
- package/Samples~/Gas-Station/Editor/GasStation05Definition.cs +39 -0
- package/Samples~/Gas-Station/Editor/GasStation05Definition.cs.meta +2 -0
- package/Samples~/Gas-Station/Editor/GasStation06Definition.cs +33 -0
- package/Samples~/Gas-Station/Editor/GasStation06Definition.cs.meta +2 -0
- package/Samples~/Gas-Station/Editor/GasStation07Definition.cs +33 -0
- package/Samples~/Gas-Station/Editor/GasStation07Definition.cs.meta +2 -0
- package/Samples~/Gas-Station/Editor/GasStation08Definition.cs +36 -0
- package/Samples~/Gas-Station/Editor/GasStation08Definition.cs.meta +2 -0
- package/Samples~/Gas-Station/Editor/GasStation09Definition.cs +32 -0
- package/Samples~/Gas-Station/Editor/GasStation09Definition.cs.meta +2 -0
- package/Samples~/Gas-Station/Editor/GasStation10Definition.cs +39 -0
- package/Samples~/Gas-Station/Editor/GasStation10Definition.cs.meta +2 -0
- package/Samples~/Gas-Station/Editor/GasStation11Definition.cs +30 -0
- package/Samples~/Gas-Station/Editor/GasStation11Definition.cs.meta +2 -0
- package/Samples~/Gas-Station/Editor/GasStation12Definition.cs +39 -0
- package/Samples~/Gas-Station/Editor/GasStation12Definition.cs.meta +2 -0
- package/Samples~/Gas-Station/Editor/GasStation13Definition.cs +42 -0
- package/Samples~/Gas-Station/Editor/GasStation13Definition.cs.meta +2 -0
- package/Samples~/Gas-Station/Editor/GasStation14Definition.cs +25 -0
- package/Samples~/Gas-Station/Editor/GasStation14Definition.cs.meta +2 -0
- package/Samples~/Gas-Station/Editor/GasStationIntroDefinition.cs +29 -0
- package/Samples~/Gas-Station/Editor/GasStationIntroDefinition.cs.meta +2 -0
- package/Samples~/Gas-Station/Editor/GasStationReferencesDefinition.cs +25 -0
- package/Samples~/Gas-Station/Editor/GasStationReferencesDefinition.cs.meta +2 -0
- package/Samples~/Gas-Station/Editor.meta +8 -0
- package/Samples~/Gas-Station/Gas-Station-Reflection-Volume.asset +284 -0
- package/Samples~/Gas-Station/Gas-Station-Reflection-Volume.asset.meta +8 -0
- package/Samples~/Gas-Station/Gas-Station-Tutorial.md +217 -0
- package/Samples~/Gas-Station/Gas-Station-Tutorial.md.meta +7 -0
- package/Samples~/Gas-Station/Gas-Station-Volume.asset +453 -0
- package/Samples~/Gas-Station/Gas-Station-Volume.asset.meta +8 -0
- package/Samples~/Gas-Station/Gas-Station.lighting +77 -0
- package/Samples~/Gas-Station/Gas-Station.lighting.meta +8 -0
- package/Samples~/Gas-Station/Gas-Station.unity +124036 -0
- package/Samples~/Gas-Station/Gas-Station.unity.meta +7 -0
- package/Samples~/Gas-Station/Materials/GS-Asphalt-Far.mat +342 -0
- package/Samples~/Gas-Station/Materials/GS-Asphalt-Far.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Concrete-Curb.mat +345 -0
- package/Samples~/Gas-Station/Materials/GS-Concrete-Curb.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Concrete-Ground.mat +353 -0
- package/Samples~/Gas-Station/Materials/GS-Concrete-Ground.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Concrete-Roof.mat +345 -0
- package/Samples~/Gas-Station/Materials/GS-Concrete-Roof.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Concrete-Wall.mat +345 -0
- package/Samples~/Gas-Station/Materials/GS-Concrete-Wall.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Fridge-Glow.mat +343 -0
- package/Samples~/Gas-Station/Materials/GS-Fridge-Glow.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Glass-Window.mat +346 -0
- package/Samples~/Gas-Station/Materials/GS-Glass-Window.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Gradient-Sky.mat +35 -0
- package/Samples~/Gas-Station/Materials/GS-Gradient-Sky.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Lamp-Glass-Warm.mat +343 -0
- package/Samples~/Gas-Station/Materials/GS-Lamp-Glass-Warm.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Metal-Canopy.mat +345 -0
- package/Samples~/Gas-Station/Materials/GS-Metal-Canopy.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Metal-Column.mat +345 -0
- package/Samples~/Gas-Station/Materials/GS-Metal-Column.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Metal-Green.mat +345 -0
- package/Samples~/Gas-Station/Materials/GS-Metal-Green.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Metal-Pump.mat +345 -0
- package/Samples~/Gas-Station/Materials/GS-Metal-Pump.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Plastic-Sign.mat +342 -0
- package/Samples~/Gas-Station/Materials/GS-Plastic-Sign.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Price-Sign.mat +343 -0
- package/Samples~/Gas-Station/Materials/GS-Price-Sign.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Procedural-Sky.mat +54 -0
- package/Samples~/Gas-Station/Materials/GS-Procedural-Sky.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Rain-Splash.mat +323 -0
- package/Samples~/Gas-Station/Materials/GS-Rain-Splash.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Rain-Streak.mat +323 -0
- package/Samples~/Gas-Station/Materials/GS-Rain-Streak.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Rubber.mat +342 -0
- package/Samples~/Gas-Station/Materials/GS-Rubber.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Screen.mat +343 -0
- package/Samples~/Gas-Station/Materials/GS-Screen.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Silhouette-Wire.mat +342 -0
- package/Samples~/Gas-Station/Materials/GS-Silhouette-Wire.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Silhouette-Wood.mat +342 -0
- package/Samples~/Gas-Station/Materials/GS-Silhouette-Wood.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Sodium-Glass.mat +343 -0
- package/Samples~/Gas-Station/Materials/GS-Sodium-Glass.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Steel.mat +342 -0
- package/Samples~/Gas-Station/Materials/GS-Steel.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Tube-Glass-Flicker.mat +343 -0
- package/Samples~/Gas-Station/Materials/GS-Tube-Glass-Flicker.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials/GS-Tube-Glass.mat +343 -0
- package/Samples~/Gas-Station/Materials/GS-Tube-Glass.mat.meta +8 -0
- package/Samples~/Gas-Station/Materials.meta +8 -0
- package/Samples~/Gas-Station/Meshes/Pump-Hose.asset +181 -0
- package/Samples~/Gas-Station/Meshes/Pump-Hose.asset.meta +8 -0
- package/Samples~/Gas-Station/Meshes.meta +8 -0
- package/Samples~/Gas-Station/Prefabs/Fuel-Pump.prefab +9027 -0
- package/Samples~/Gas-Station/Prefabs/Fuel-Pump.prefab.meta +7 -0
- package/Samples~/Gas-Station/Prefabs.meta +8 -0
- package/Samples~/Gas-Station/References/Gas-Station-Ref-01-Main.png +0 -0
- package/Samples~/Gas-Station/References/Gas-Station-Ref-01-Main.png.meta +119 -0
- package/Samples~/Gas-Station/References/Gas-Station-Ref-02-Close.png +0 -0
- package/Samples~/Gas-Station/References/Gas-Station-Ref-02-Close.png.meta +119 -0
- package/Samples~/Gas-Station/References/Gas-Station-Ref-03-High.png +0 -0
- package/Samples~/Gas-Station/References/Gas-Station-Ref-03-High.png.meta +119 -0
- package/Samples~/Gas-Station/References.meta +8 -0
- package/Samples~/Gas-Station/Scripts/RippleFlipbook.cs +40 -0
- package/Samples~/Gas-Station/Scripts/RippleFlipbook.cs.meta +2 -0
- package/Samples~/Gas-Station/Scripts/TubeFlicker.cs +86 -0
- package/Samples~/Gas-Station/Scripts/TubeFlicker.cs.meta +2 -0
- package/Samples~/Gas-Station/Scripts.meta +8 -0
- package/Samples~/Gas-Station/Shaders/Gradient-Sky.shader +53 -0
- package/Samples~/Gas-Station/Shaders/Gradient-Sky.shader.meta +9 -0
- package/Samples~/Gas-Station/Shaders/Lit-Wet-Ground.shader +574 -0
- package/Samples~/Gas-Station/Shaders/Lit-Wet-Ground.shader.meta +9 -0
- package/Samples~/Gas-Station/Shaders/LitDepthNormalsPassWet.hlsl +167 -0
- package/Samples~/Gas-Station/Shaders/LitDepthNormalsPassWet.hlsl.meta +7 -0
- package/Samples~/Gas-Station/Shaders/LitForwardPassWet.hlsl +277 -0
- package/Samples~/Gas-Station/Shaders/LitForwardPassWet.hlsl.meta +7 -0
- package/Samples~/Gas-Station/Shaders/LitInputWet.hlsl +324 -0
- package/Samples~/Gas-Station/Shaders/LitInputWet.hlsl.meta +7 -0
- package/Samples~/Gas-Station/Shaders/PlanarReflectionWet.hlsl +30 -0
- package/Samples~/Gas-Station/Shaders/PlanarReflectionWet.hlsl.meta +7 -0
- package/Samples~/Gas-Station/Shaders/Procedural-Night-Sky.shader +138 -0
- package/Samples~/Gas-Station/Shaders/Procedural-Night-Sky.shader.meta +9 -0
- package/Samples~/Gas-Station/Shaders.meta +8 -0
- package/Samples~/Gas-Station/Textures/Fog-Noise3D.asset +38 -0
- package/Samples~/Gas-Station/Textures/Fog-Noise3D.asset.meta +8 -0
- package/Samples~/Gas-Station/Textures/Horizon-Glow.png +0 -0
- package/Samples~/Gas-Station/Textures/Horizon-Glow.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Lens-Dirt.png +0 -0
- package/Samples~/Gas-Station/Textures/Lens-Dirt.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Oil-Stain-MaskMap.png +0 -0
- package/Samples~/Gas-Station/Textures/Oil-Stain-MaskMap.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Oil-Stain.png +0 -0
- package/Samples~/Gas-Station/Textures/Oil-Stain.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/PolyHaven/concrete_floor_worn_001/concrete_floor_worn_001_albedo.jpg +0 -0
- package/Samples~/Gas-Station/Textures/PolyHaven/concrete_floor_worn_001/concrete_floor_worn_001_albedo.jpg.meta +119 -0
- package/Samples~/Gas-Station/Textures/PolyHaven/concrete_floor_worn_001/concrete_floor_worn_001_mask.png +0 -0
- package/Samples~/Gas-Station/Textures/PolyHaven/concrete_floor_worn_001/concrete_floor_worn_001_mask.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/PolyHaven/concrete_floor_worn_001/concrete_floor_worn_001_normal.jpg +0 -0
- package/Samples~/Gas-Station/Textures/PolyHaven/concrete_floor_worn_001/concrete_floor_worn_001_normal.jpg.meta +119 -0
- package/Samples~/Gas-Station/Textures/PolyHaven/concrete_floor_worn_001.meta +8 -0
- package/Samples~/Gas-Station/Textures/PolyHaven/green_metal_rust/green_metal_rust_albedo.jpg +0 -0
- package/Samples~/Gas-Station/Textures/PolyHaven/green_metal_rust/green_metal_rust_albedo.jpg.meta +119 -0
- package/Samples~/Gas-Station/Textures/PolyHaven/green_metal_rust/green_metal_rust_albedo_neutral.jpg +0 -0
- package/Samples~/Gas-Station/Textures/PolyHaven/green_metal_rust/green_metal_rust_albedo_neutral.jpg.meta +119 -0
- package/Samples~/Gas-Station/Textures/PolyHaven/green_metal_rust/green_metal_rust_mask.png +0 -0
- package/Samples~/Gas-Station/Textures/PolyHaven/green_metal_rust/green_metal_rust_mask.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/PolyHaven/green_metal_rust/green_metal_rust_normal.jpg +0 -0
- package/Samples~/Gas-Station/Textures/PolyHaven/green_metal_rust/green_metal_rust_normal.jpg.meta +119 -0
- package/Samples~/Gas-Station/Textures/PolyHaven/green_metal_rust.meta +8 -0
- package/Samples~/Gas-Station/Textures/PolyHaven.meta +8 -0
- package/Samples~/Gas-Station/Textures/Price-Sign.png +0 -0
- package/Samples~/Gas-Station/Textures/Price-Sign.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Puddle-Mask.png +0 -0
- package/Samples~/Gas-Station/Textures/Puddle-Mask.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Puddle-MaskMap.png +0 -0
- package/Samples~/Gas-Station/Textures/Puddle-MaskMap.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Rain-Splash.png +0 -0
- package/Samples~/Gas-Station/Textures/Rain-Splash.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Rain-Streak.png +0 -0
- package/Samples~/Gas-Station/Textures/Rain-Streak.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-00.png +0 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-00.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-01.png +0 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-01.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-02.png +0 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-02.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-03.png +0 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-03.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-04.png +0 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-04.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-05.png +0 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-05.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-06.png +0 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-06.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-07.png +0 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-07.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-08.png +0 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-08.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-09.png +0 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-09.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-10.png +0 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-10.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-11.png +0 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-11.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-12.png +0 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-12.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-13.png +0 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-13.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-14.png +0 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-14.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-15.png +0 -0
- package/Samples~/Gas-Station/Textures/Ripples/Ripple-15.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/Ripples.meta +8 -0
- package/Samples~/Gas-Station/Textures/URP/GS-Concrete-Curb-MetalSmooth.png +0 -0
- package/Samples~/Gas-Station/Textures/URP/GS-Concrete-Curb-MetalSmooth.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/URP/GS-Concrete-Ground-MetalSmooth.png +0 -0
- package/Samples~/Gas-Station/Textures/URP/GS-Concrete-Ground-MetalSmooth.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/URP/GS-Concrete-Roof-MetalSmooth.png +0 -0
- package/Samples~/Gas-Station/Textures/URP/GS-Concrete-Roof-MetalSmooth.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/URP/GS-Concrete-Wall-MetalSmooth.png +0 -0
- package/Samples~/Gas-Station/Textures/URP/GS-Concrete-Wall-MetalSmooth.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/URP/GS-Metal-Canopy-MetalSmooth.png +0 -0
- package/Samples~/Gas-Station/Textures/URP/GS-Metal-Canopy-MetalSmooth.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/URP/GS-Metal-Column-MetalSmooth.png +0 -0
- package/Samples~/Gas-Station/Textures/URP/GS-Metal-Column-MetalSmooth.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/URP/GS-Metal-Green-MetalSmooth.png +0 -0
- package/Samples~/Gas-Station/Textures/URP/GS-Metal-Green-MetalSmooth.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/URP/GS-Metal-Pump-MetalSmooth.png +0 -0
- package/Samples~/Gas-Station/Textures/URP/GS-Metal-Pump-MetalSmooth.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/URP/Lambert-Spot-170.png +0 -0
- package/Samples~/Gas-Station/Textures/URP/Lambert-Spot-170.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/URP/Wet-Map.png +0 -0
- package/Samples~/Gas-Station/Textures/URP/Wet-Map.png.meta +119 -0
- package/Samples~/Gas-Station/Textures/URP.meta +8 -0
- package/Samples~/Gas-Station/Textures/Window-Glow.png +0 -0
- package/Samples~/Gas-Station/Textures/Window-Glow.png.meta +119 -0
- package/Samples~/Gas-Station/Textures.meta +8 -0
- package/Samples~/Gas-Station/Tutorial/Contents.asset +180 -0
- package/Samples~/Gas-Station/Tutorial/Contents.asset.meta +8 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-00-Before-you-start-the-project.asset +804 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-00-Before-you-start-the-project.asset.meta +8 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-01-The-ground-and-the-layout.asset +525 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-01-The-ground-and-the-layout.asset.meta +8 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-02-The-island-and-the-pumps.asset +432 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-02-The-island-and-the-pumps.asset.meta +8 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-03-The-canopy.asset +525 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-03-The-canopy.asset.meta +8 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-04-The-kiosk-the-sign-and-the-backdrop.asset +544 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-04-The-kiosk-the-sign-and-the-backdrop.asset.meta +8 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-05-Materials-and-textures.asset +749 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-05-Materials-and-textures.asset.meta +8 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-06-The-wet-ground.asset +525 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-06-The-wet-ground.asset.meta +8 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-07-The-camera.asset +525 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-07-The-camera.asset.meta +8 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-08-Night-the-sky-and-the-ambient.asset +637 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-08-Night-the-sky-and-the-ambient.asset.meta +8 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-09-The-lights.asset +451 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-09-The-lights.asset.meta +8 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-10-The-fog-and-the-light-shafts.asset +749 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-10-The-fog-and-the-light-shafts.asset.meta +8 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-11-Reflections-on-the-wet-ground.asset +358 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-11-Reflections-on-the-wet-ground.asset.meta +8 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-12-The-rain.asset +804 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-12-The-rain.asset.meta +8 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-13-Post-processing.asset +916 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-13-Post-processing.asset.meta +8 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-14-The-flickering-tube-optional.asset +153 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-14-The-flickering-tube-optional.asset.meta +8 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-Intro.asset +284 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-Intro.asset.meta +8 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-References.asset +153 -0
- package/Samples~/Gas-Station/Tutorial/Gas-Station-References.asset.meta +8 -0
- package/Samples~/Gas-Station/Tutorial/Tutorial-Actions.asset +14 -0
- package/Samples~/Gas-Station/Tutorial/Tutorial-Actions.asset.meta +8 -0
- package/Samples~/Gas-Station/Tutorial.meta +8 -0
- package/package.json +21 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 26.5.0 — 2026-11-03
|
|
4
|
+
L05: the Gas-Station, built step by step with its in-editor tutorial. Uses the CQF URP Volumetric Fog from OpenUPM: the project needs the OpenUPM registry (see README).
|
|
5
|
+
|
|
3
6
|
## 26.0.0 — 2026-10-27
|
|
4
7
|
First version: the empty package.
|
package/README.md
CHANGED
|
@@ -4,3 +4,6 @@ Game Development 1 (NABA, AY26-27). Install this one package and everything the
|
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
In Unity: *Edit → Project Settings → Package Manager → Scoped Registries → +* — Name `Petar Mavrodiev`, URL `https://registry.npmjs.com`, Scope `com.mavrodiev` → **Save**. Then *Window → Package Manager → My Registries → Petar Mavrodiev*.
|
|
7
|
+
|
|
8
|
+
## Also needed: the OpenUPM registry (for the volumetric fog)
|
|
9
|
+
Some samples use the [CQF URP Volumetric Fog](https://openupm.com/packages/com.cqf.urpvolumetricfog/) (MIT), which comes from OpenUPM. Add a second scoped registry in the same place: Name `OpenUPM`, URL `https://package.openupm.com`, Scope `com.cqf.urpvolumetricfog` → **Save**.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
using System.Collections.Generic;
|
|
2
|
+
using Mavrodiev.Tutorials.Editor;
|
|
3
|
+
|
|
4
|
+
namespace Mavrodiev.Playground.GasStation
|
|
5
|
+
{
|
|
6
|
+
// Generated from Gas-Station-Tutorial.md (the readable version, next to the scene): one tutorial per section, one page per step.
|
|
7
|
+
public class GasStation00Definition : TutorialDefinition
|
|
8
|
+
{
|
|
9
|
+
public override string Id => "Gas-Station-00-Before-you-start-the-project";
|
|
10
|
+
public override string Title => "0 · Before you start: the project";
|
|
11
|
+
public override string Description => "The scene needs four renderer features and a few settings in the URP Asset.";
|
|
12
|
+
public override int Order => 1;
|
|
13
|
+
public override string ContentsTitle => "Gas Station";
|
|
14
|
+
public override string ContentsSubtitle => "Building the scene layer by layer";
|
|
15
|
+
|
|
16
|
+
public override IEnumerable<Page> Pages()
|
|
17
|
+
{
|
|
18
|
+
return new List<Page>
|
|
19
|
+
{
|
|
20
|
+
NewPage("0 · Before you start: the project",
|
|
21
|
+
Text("The scene needs four renderer features and a few settings in the URP Asset. They are project settings, so they are set once for the whole project.")),
|
|
22
|
+
NewPage("The Renderer",
|
|
23
|
+
Text("<b>The Renderer</b> (<i>Settings/PC_Renderer</i>), <i>Add Renderer Feature</i>:")),
|
|
24
|
+
NewPage("0.1 · Screen Space Ambient Occlusion",
|
|
25
|
+
Text("<b>Screen Space Ambient Occlusion</b> — the soft dark where objects meet.")),
|
|
26
|
+
NewPage("0.2 · Decal",
|
|
27
|
+
Text("<b>Decal</b> — used by other scenes; it does no harm here.")),
|
|
28
|
+
NewPage("0.3 · Screen Space Reflection",
|
|
29
|
+
Text("<b>Screen Space Reflection</b> — sharp reflections of what is on screen.")),
|
|
30
|
+
NewPage("0.4 · Volumetric Fog",
|
|
31
|
+
Text("<b>Volumetric Fog</b> — from the <i>URP Volumetric Fog</i> package by Cristian Qiu (included in the project). It makes fog that is lit by real lights and cut by their shadows.")),
|
|
32
|
+
NewPage("The rendering path",
|
|
33
|
+
Text("<b>The rendering path.</b> In the Renderer, the <i>Rendering Path</i> is <b>Forward+</b>. In Forward, each object is lit by a limited number of additional lights (<i>Per Object Limit</i>, at most 8). Forward+ has no limit per object, and this scene uses 26 lights.")),
|
|
34
|
+
NewPage("The URP Asset",
|
|
35
|
+
Text("<b>The URP Asset</b> (<i>Settings/PC_RPAsset</i>): <b>HDR</b> on (bright values above 1 are kept, so bloom can find them), <b>Depth Texture</b> and <b>Opaque Texture</b> on (the fog and the reflections read them), <b>Additional Lights: Per Pixel</b> with <b>Cast Shadows</b> on.")),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
using System.Collections.Generic;
|
|
2
|
+
using Mavrodiev.Tutorials.Editor;
|
|
3
|
+
|
|
4
|
+
namespace Mavrodiev.Playground.GasStation
|
|
5
|
+
{
|
|
6
|
+
// Generated from Gas-Station-Tutorial.md (the readable version, next to the scene): one tutorial per section, one page per step.
|
|
7
|
+
public class GasStation01Definition : TutorialDefinition
|
|
8
|
+
{
|
|
9
|
+
public override string Id => "Gas-Station-01-The-ground-and-the-layout";
|
|
10
|
+
public override string Title => "1 · The ground and the layout";
|
|
11
|
+
public override string Description => "All the geometry is made with ProBuilder (Tools › ProBuilder › ProBuilder Window).";
|
|
12
|
+
public override int Order => 2;
|
|
13
|
+
public override string ContentsTitle => "Gas Station";
|
|
14
|
+
public override string ContentsSubtitle => "Building the scene layer by layer";
|
|
15
|
+
|
|
16
|
+
public override IEnumerable<Page> Pages()
|
|
17
|
+
{
|
|
18
|
+
return new List<Page>
|
|
19
|
+
{
|
|
20
|
+
NewPage("1 · The ground and the layout",
|
|
21
|
+
Text("All the geometry is made with ProBuilder (<i>Tools › ProBuilder › ProBuilder Window</i>). Sizes are in metres; one Unity unit is one metre.")),
|
|
22
|
+
NewPage("1.1 · The forecourt",
|
|
23
|
+
Text("<b>The forecourt.</b> A ProBuilder cube 60 × 0.1 × 60 m, its top at y = 0, named <i>Ground</i> under an empty parent <i>Forecourt</i>. Its UVs are set to world space in metres (<i>UV Editor › Auto › World Space</i>), so a texture's tiling is the same on every face and size.")),
|
|
24
|
+
NewPage("1.2 · The far ground",
|
|
25
|
+
Text("<b>The far ground.</b> A large flat plane (400 m) just below the forecourt (y = −0.08), named <i>Far Ground</i>. It fills the horizon behind the fog.")),
|
|
26
|
+
NewPage("1.3 · The station's centre",
|
|
27
|
+
Text("<b>The station's centre</b> is the world origin. The station (island, canopy, rain) is turned <b>−25°</b> around Y, so its left end comes toward the camera and the canopy reads in depth, not flat on.")),
|
|
28
|
+
NewPage("Empty parents",
|
|
29
|
+
Text("<b>Empty parents.</b> Make an empty parent <i>1-4 · Objects</i> for all the geometry, and inside it one parent per group, so the Hierarchy stays readable: <i>Forecourt</i>, <i>Island</i>, <i>Canopy</i>, <i>Kiosk</i>, <i>Price Sign</i>, <i>Backdrop</i>.")),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
using System.Collections.Generic;
|
|
2
|
+
using Mavrodiev.Tutorials.Editor;
|
|
3
|
+
|
|
4
|
+
namespace Mavrodiev.Playground.GasStation
|
|
5
|
+
{
|
|
6
|
+
// Generated from Gas-Station-Tutorial.md (the readable version, next to the scene): one tutorial per section, one page per step.
|
|
7
|
+
public class GasStation02Definition : TutorialDefinition
|
|
8
|
+
{
|
|
9
|
+
public override string Id => "Gas-Station-02-The-island-and-the-pumps";
|
|
10
|
+
public override string Title => "2 · The island and the pumps";
|
|
11
|
+
public override string Description => "The curb.";
|
|
12
|
+
public override int Order => 3;
|
|
13
|
+
public override string ContentsTitle => "Gas Station";
|
|
14
|
+
public override string ContentsSubtitle => "Building the scene layer by layer";
|
|
15
|
+
|
|
16
|
+
public override IEnumerable<Page> Pages()
|
|
17
|
+
{
|
|
18
|
+
return new List<Page>
|
|
19
|
+
{
|
|
20
|
+
NewPage("2.1 · The curb",
|
|
21
|
+
Text("<b>The curb.</b> A cube 7.4 × 0.18 × 1.7 m (<i>Curb</i>), and on top of it a thin lip 7.5 × 0.03 × 1.8 m (<i>Curb Lip</i>). The lip sticks out slightly: that small edge catches a highlight and makes the curb read as a solid block.")),
|
|
22
|
+
NewPage("2.2 · The pump",
|
|
23
|
+
Text("<b>The pump</b> is a prefab (<i>Prefabs/Fuel-Pump.prefab</i>, 1.0 × 2.0 × 0.56 m). It is built once and placed twice: a change to the prefab changes both pumps. Look inside it in Prefab Mode: a plinth, two posts, a lower panel, a meter housing, a top cap, and on each face a screen, a price display, a keypad and a nozzle in its holster. The hose is a separate mesh (<i>Meshes/Pump-Hose.asset</i>).")),
|
|
24
|
+
NewPage("2.3 · Place the pumps",
|
|
25
|
+
Text("<b>Place the pumps</b> on the island at local x = −2.0 and x = +2.0, standing on the curb.")),
|
|
26
|
+
NewPage("2.4 · The waste bin",
|
|
27
|
+
Text("<b>The waste bin.</b> A small box 0.42 × 0.62 × 0.34 m with a lid, at the centre of the island.")),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
using System.Collections.Generic;
|
|
2
|
+
using Mavrodiev.Tutorials.Editor;
|
|
3
|
+
|
|
4
|
+
namespace Mavrodiev.Playground.GasStation
|
|
5
|
+
{
|
|
6
|
+
// Generated from Gas-Station-Tutorial.md (the readable version, next to the scene): one tutorial per section, one page per step.
|
|
7
|
+
public class GasStation03Definition : TutorialDefinition
|
|
8
|
+
{
|
|
9
|
+
public override string Id => "Gas-Station-03-The-canopy";
|
|
10
|
+
public override string Title => "3 · The canopy";
|
|
11
|
+
public override string Description => "The slab.";
|
|
12
|
+
public override int Order => 4;
|
|
13
|
+
public override string ContentsTitle => "Gas Station";
|
|
14
|
+
public override string ContentsSubtitle => "Building the scene layer by layer";
|
|
15
|
+
|
|
16
|
+
public override IEnumerable<Page> Pages()
|
|
17
|
+
{
|
|
18
|
+
return new List<Page>
|
|
19
|
+
{
|
|
20
|
+
NewPage("3.1 · The slab",
|
|
21
|
+
Text("<b>The slab.</b> A box 9.4 × 7.6 m seen from below. Its underside (the soffit) is at 4.05 m and its top at 4.45 m. Around it, a fascia 12 cm thick that hangs down to 3.90 m.")),
|
|
22
|
+
NewPage("3.2 · The columns",
|
|
23
|
+
Text("<b>The columns.</b> Two columns 28 cm square at local x = −1.05 and +1.05, inside the pumps, from the curb to the soffit.")),
|
|
24
|
+
NewPage("3.3 · The ribs",
|
|
25
|
+
Text("<b>The ribs.</b> Five thin ribs (6 × 5 cm) across the soffit at x = 0, ±1.57 and ±3.13. They divide the soffit into six equal panels and catch light along their edges.")),
|
|
26
|
+
NewPage("3.4 · The fixtures",
|
|
27
|
+
Text("<b>The fixtures.</b> Six housings 1.30 × 0.06 × 0.24 m, each with two tubes (radius 2.2 cm, length 1.2 m) under it: four along the long sides at (±2.35, ±3.1), two on the short sides at (±3.92, 0), turned 90°. Name them <i>Fixture 1</i> to <i>Fixture 6</i> under <i>Canopy/Light Fixtures</i>. Their lights come in § 9.")),
|
|
28
|
+
NewPage("Several materials on one mesh",
|
|
29
|
+
Text("<b>Several materials on one mesh.</b> The slab has two materials, one on its top and one on its underside. A mesh with several materials can be skipped by the <b>GPU Resident Drawer</b> (the URP Asset's fast drawing path) when it is built with ProBuilder: add a <b>Disallow GPU Driven Rendering</b> component to such meshes if they disappear in the Game view.")),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
using System.Collections.Generic;
|
|
2
|
+
using Mavrodiev.Tutorials.Editor;
|
|
3
|
+
|
|
4
|
+
namespace Mavrodiev.Playground.GasStation
|
|
5
|
+
{
|
|
6
|
+
// Generated from Gas-Station-Tutorial.md (the readable version, next to the scene): one tutorial per section, one page per step.
|
|
7
|
+
public class GasStation04Definition : TutorialDefinition
|
|
8
|
+
{
|
|
9
|
+
public override string Id => "Gas-Station-04-The-kiosk-the-sign-and-the-backdrop";
|
|
10
|
+
public override string Title => "4 · The kiosk, the sign and the backdrop";
|
|
11
|
+
public override string Description => "The kiosk stands at (9.2, 0, 4.32), turned 65°, so its front faces the station.";
|
|
12
|
+
public override int Order => 5;
|
|
13
|
+
public override string ContentsTitle => "Gas Station";
|
|
14
|
+
public override string ContentsSubtitle => "Building the scene layer by layer";
|
|
15
|
+
|
|
16
|
+
public override IEnumerable<Page> Pages()
|
|
17
|
+
{
|
|
18
|
+
return new List<Page>
|
|
19
|
+
{
|
|
20
|
+
NewPage("4.1 · The kiosk",
|
|
21
|
+
Text("<b>The kiosk</b> stands at (9.2, 0, 4.32), turned <b>65°</b>, so its front faces the station. A box 6.4 × 4.6 × 3 m, a roof slab 7.0 × 0.28 × 5.6 m that overhangs the front, a front step 6.8 × 0.14 × 1.4 m.")),
|
|
22
|
+
NewPage("4.2 · Its front",
|
|
23
|
+
Text("<b>Its front</b>, from left to right: a solid door, a window with one centre mullion (from 0.9 to 2.3 m high), and a night-pay counter window with a small hatch and a steel tray. Cut the openings with ProBuilder (select the faces, <i>Extrude</i> inward or <i>Subdivide</i> and delete). Thin dark frames go around every opening.")),
|
|
24
|
+
NewPage("4.3 · The interior",
|
|
25
|
+
Text("<b>The interior</b> is only seen through the glass: a counter, a shelf of goods, a fridge with a glowing front, a ceiling panel. Simple boxes are enough.")),
|
|
26
|
+
NewPage("4.4 · The price sign",
|
|
27
|
+
Text("<b>The price sign</b> at (−8.8, 0, −7.3): a pole (radius 0.12 m, 5 m tall), a cabinet 1.9 × 2.6 × 0.3 m at 6.1 m height, and a flat face in front of it for the prices.")),
|
|
28
|
+
NewPage("4.5 · The backdrop",
|
|
29
|
+
Text("<b>The backdrop.</b> Wooden poles every 22 m along a line 26 m behind the station, 10 m tall, with three wires between them. The wires are <b>Line Renderers</b> (width 3.5 cm), each with a few points that sag in the middle. Two street lamps on 8 m posts stand at x = −30 and x = 24. In the fog, only their glow will be seen."),
|
|
30
|
+
Text("<b>Save the scene.</b> This is the first checkpoint: the geometry, in grey.")),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
using System.Collections.Generic;
|
|
2
|
+
using Mavrodiev.Tutorials.Editor;
|
|
3
|
+
|
|
4
|
+
namespace Mavrodiev.Playground.GasStation
|
|
5
|
+
{
|
|
6
|
+
// Generated from Gas-Station-Tutorial.md (the readable version, next to the scene): one tutorial per section, one page per step.
|
|
7
|
+
public class GasStation05Definition : TutorialDefinition
|
|
8
|
+
{
|
|
9
|
+
public override string Id => "Gas-Station-05-Materials-and-textures";
|
|
10
|
+
public override string Title => "5 · Materials and textures";
|
|
11
|
+
public override string Description => "Every surface uses Universal Render Pipeline/Lit, except the wet ground (§ 6) and the rain (§ 12).";
|
|
12
|
+
public override int Order => 6;
|
|
13
|
+
public override string ContentsTitle => "Gas Station";
|
|
14
|
+
public override string ContentsSubtitle => "Building the scene layer by layer";
|
|
15
|
+
|
|
16
|
+
public override IEnumerable<Page> Pages()
|
|
17
|
+
{
|
|
18
|
+
return new List<Page>
|
|
19
|
+
{
|
|
20
|
+
NewPage("5 · Materials and textures",
|
|
21
|
+
Text("Every surface uses <b>Universal Render Pipeline/Lit</b>, except the wet ground (§ 6) and the rain (§ 12). The textures are two sets from Poly Haven (CC0): <i>concrete_floor_worn_001</i> and <i>green_metal_rust</i>. Each set has an albedo map, a normal map, and a map that holds metallic and smoothness (the <i>…-MetalSmooth.png</i> files in <i>Textures/URP/</i>, one per material, with the ambient occlusion in green).")),
|
|
22
|
+
NewPage("5.1 · The concrete materials",
|
|
23
|
+
Text("<b>The concrete materials.</b> <i>GS-Concrete-Curb</i> (curb, kiosk floor and step), <i>GS-Concrete-Wall</i> (kiosk walls), <i>GS-Concrete-Roof</i> (both roof tops). Base Map: the concrete albedo; Normal Map: the concrete normal; Metallic Map: the material's own MetalSmooth map. Tiling around 0.5 to 0.8, so one tile covers 1.2 to 2 m.")),
|
|
24
|
+
NewPage("5.2 · The metal materials",
|
|
25
|
+
Text("<b>The metal materials.</b> <i>GS-Metal-Canopy</i> (fascia, soffit, ribs, fixture housings, sign pole), <i>GS-Metal-Column</i>, <i>GS-Metal-Pump</i>, <i>GS-Metal-Green</i> (bin, kiosk door). They use the rusted-metal maps. The canopy and column metals use a neutral grey copy of the albedo (<i>green_metal_rust_albedo_neutral.jpg</i>), tinted by the Base Color, so one texture gives several metals.")),
|
|
26
|
+
NewPage("5.3 · The plain materials",
|
|
27
|
+
Text("<b>The plain materials</b>, with no maps: <i>GS-Steel</i> (metallic 1, smoothness 0.55: spouts, nozzles, keypads), <i>GS-Rubber</i> (almost black, smoothness 0.35: hoses and grips), <i>GS-Plastic-Sign</i> (pump sign panels), <i>GS-Asphalt-Far</i> (very dark, smoothness 0.6), and the two silhouette materials for the poles and wires.")),
|
|
28
|
+
NewPage("5.4 · The emissive materials",
|
|
29
|
+
Text("<b>The emissive materials.</b> These surfaces give off light of their own. Tick <b>Emission</b> and set the HDR colour. In the colour picker, <i>Intensity</i> multiplies the colour by 2 to the power of the value: 1 doubles it, 3 multiplies it by eight."),
|
|
30
|
+
Text("• <b><i>GS-Tube-Glass</i></b> — On: the fluorescent tubes · Emission colour (0–255): 170, 230, 255 · Intensity: 2.9\n• <b><i>GS-Lamp-Glass-Warm</i></b> — On: wall lamp glass, interior ceiling panel · Emission colour (0–255): 255, 217, 162 · Intensity: 2.4\n• <b><i>GS-Sodium-Glass</i></b> — On: street lamp heads · Emission colour (0–255): 255, 195, 127 · Intensity: 2.0\n• <b><i>GS-Glass-Window</i></b> — On: both kiosk windows · Emission colour (0–255): 255, 188, 120 · Intensity: 0.5 · Emission Map: <i>Window-Glow.png</i> (brighter at the top)\n• <b><i>GS-Fridge-Glow</i></b> — On: fridge front · Emission colour (0–255): 224, 249, 255 · Intensity: 0.4\n• <b><i>GS-Price-Sign</i></b> — On: sign face · Emission colour (0–255): 255, 255, 255 · Intensity: −0.6 · Emission Map: <i>Price-Sign.png</i> (the prices)\n• <b><i>GS-Screen</i></b> — On: pump screens and price displays · Emission colour (0–255): 191, 255, 236 · Intensity: −1.1")),
|
|
31
|
+
NewPage("Transparent glass",
|
|
32
|
+
Text("<b>Transparent glass.</b> The window glass is also <b>Transparent</b> (<i>Surface Type</i>), with an alpha of 0.75 in its Base Color, and it casts no shadows (<i>Mesh Renderer › Lighting › Cast Shadows: Off</i>), so the light from inside passes through.")),
|
|
33
|
+
NewPage("Emission and light",
|
|
34
|
+
Text("<b>Emission and light.</b> An emissive surface is only bright itself: it does not light anything around it. The light that falls on the canopy and the ground comes from real Light components, placed beside the emissive surfaces in § 9."),
|
|
35
|
+
Text("<b>Save the scene.</b>")),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
using System.Collections.Generic;
|
|
2
|
+
using Mavrodiev.Tutorials.Editor;
|
|
3
|
+
|
|
4
|
+
namespace Mavrodiev.Playground.GasStation
|
|
5
|
+
{
|
|
6
|
+
// Generated from Gas-Station-Tutorial.md (the readable version, next to the scene): one tutorial per section, one page per step.
|
|
7
|
+
public class GasStation06Definition : TutorialDefinition
|
|
8
|
+
{
|
|
9
|
+
public override string Id => "Gas-Station-06-The-wet-ground";
|
|
10
|
+
public override string Title => "6 · The wet ground";
|
|
11
|
+
public override string Description => "The forecourt uses its own shader, Gas-Station/Lit Wet Ground:";
|
|
12
|
+
public override int Order => 7;
|
|
13
|
+
public override string ContentsTitle => "Gas Station";
|
|
14
|
+
public override string ContentsSubtitle => "Building the scene layer by layer";
|
|
15
|
+
|
|
16
|
+
public override IEnumerable<Page> Pages()
|
|
17
|
+
{
|
|
18
|
+
return new List<Page>
|
|
19
|
+
{
|
|
20
|
+
NewPage("6 · The wet ground",
|
|
21
|
+
Text("The forecourt uses its own shader, <i>Gas-Station/Lit Wet Ground</i>: a copy of URP's Lit shader with three additions. The material is <i>GS-Concrete-Ground</i>.")),
|
|
22
|
+
NewPage("6.1 · The base",
|
|
23
|
+
Text("<b>The base.</b> The concrete maps, a dark grey Base Color (71, 71, 71), tiling 0.4 (one tile every 2.5 m), and a strong normal (Normal Map scale 2.4), so the wet surface breaks highlights into streaks.")),
|
|
24
|
+
NewPage("6.2 · The wet map",
|
|
25
|
+
Text("<b>The wet map.</b> One texture laid over the whole forecourt (<i>Textures/URP/Wet-Map.png</i>) tells the shader where each kind of wetness is: <b>red</b> for puddles (darker and very smooth: smoothness 0.92), <b>green</b> for oil stains (almost black and glossy), <b>blue</b> for where rain falls (outside the canopy). The puddles sit where they will mirror the lights toward the camera: in front of the island and along the lines below the fixtures.")),
|
|
26
|
+
NewPage("6.3 · The ripples",
|
|
27
|
+
Text("<b>The ripples.</b> Rings on the water where drops land. The shader reads a normal map (<i>Ripple Normal</i>, tile 1.2 m, strength 0.35) only where the wet map is blue. An empty GameObject <i>Ripples</i> carries the <b>Ripple Flipbook</b> script: it steps the material's <i>_RippleMap</i> through the 16 frames in <i>Textures/Ripples/</i> at 18 frames per second, so the rings appear and fade.")),
|
|
28
|
+
NewPage("The Water layer",
|
|
29
|
+
Text("<b>The Water layer.</b> Put <i>Ground</i> and <i>Far Ground</i> on the built-in <b>Water</b> layer (<i>Inspector › Layer</i>). The planar reflection in § 11 uses this layer.")),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
using System.Collections.Generic;
|
|
2
|
+
using Mavrodiev.Tutorials.Editor;
|
|
3
|
+
|
|
4
|
+
namespace Mavrodiev.Playground.GasStation
|
|
5
|
+
{
|
|
6
|
+
// Generated from Gas-Station-Tutorial.md (the readable version, next to the scene): one tutorial per section, one page per step.
|
|
7
|
+
public class GasStation07Definition : TutorialDefinition
|
|
8
|
+
{
|
|
9
|
+
public override string Id => "Gas-Station-07-The-camera";
|
|
10
|
+
public override string Title => "7 · The camera";
|
|
11
|
+
public override string Description => "The frame is decided before the lights, because lights are placed for what the camera sees.";
|
|
12
|
+
public override int Order => 8;
|
|
13
|
+
public override string ContentsTitle => "Gas Station";
|
|
14
|
+
public override string ContentsSubtitle => "Building the scene layer by layer";
|
|
15
|
+
|
|
16
|
+
public override IEnumerable<Page> Pages()
|
|
17
|
+
{
|
|
18
|
+
return new List<Page>
|
|
19
|
+
{
|
|
20
|
+
NewPage("7 · The camera",
|
|
21
|
+
Text("The frame is decided before the lights, because lights are placed for what the camera sees.")),
|
|
22
|
+
NewPage("7.1 · The frame",
|
|
23
|
+
Text("<b>The frame.</b> In the Game view, set the resolution to <b>1920 × 1080</b> (16:9).")),
|
|
24
|
+
NewPage("7.2 · Main Camera",
|
|
25
|
+
Text("<b>Main Camera:</b> position (−0.3, 1.3, −26.5), rotation (−3.7, 0.6, 0): eye height, looking very slightly up. <b>Field of View 40</b> (vertical). Clipping Planes: Near 0.05, Far 300.")),
|
|
26
|
+
NewPage("7.3 · Rendering",
|
|
27
|
+
Text("<b>Rendering.</b> In the camera's <i>Rendering</i> section: <b>Post Processing</b> on, <b>Anti-aliasing: Temporal Anti-aliasing (TAA)</b>, <b>Dithering</b> on (it hides banding in the dark gradients of the fog).")),
|
|
28
|
+
NewPage("7.4 · The reference overlay (optional)",
|
|
29
|
+
Text("<b>The reference overlay (optional).</b> The <i>Reference Overlay</i> canvas shows the reference image, semi-transparent, over the Game view, to match the frame. Switch it off when the frame is right.")),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
using System.Collections.Generic;
|
|
2
|
+
using Mavrodiev.Tutorials.Editor;
|
|
3
|
+
|
|
4
|
+
namespace Mavrodiev.Playground.GasStation
|
|
5
|
+
{
|
|
6
|
+
// Generated from Gas-Station-Tutorial.md (the readable version, next to the scene): one tutorial per section, one page per step.
|
|
7
|
+
public class GasStation08Definition : TutorialDefinition
|
|
8
|
+
{
|
|
9
|
+
public override string Id => "Gas-Station-08-Night-the-sky-and-the-ambient";
|
|
10
|
+
public override string Title => "8 · Night: the sky and the ambient";
|
|
11
|
+
public override string Description => "Open the Lighting window:";
|
|
12
|
+
public override int Order => 9;
|
|
13
|
+
public override string ContentsTitle => "Gas Station";
|
|
14
|
+
public override string ContentsSubtitle => "Building the scene layer by layer";
|
|
15
|
+
|
|
16
|
+
public override IEnumerable<Page> Pages()
|
|
17
|
+
{
|
|
18
|
+
return new List<Page>
|
|
19
|
+
{
|
|
20
|
+
NewPage("8 · Night: the sky and the ambient",
|
|
21
|
+
Text("Open the Lighting window: <i>Window › Rendering › Lighting › Environment</i>.")),
|
|
22
|
+
NewPage("8.1 · Skybox Material",
|
|
23
|
+
Text("<b>Skybox Material:</b> <i>GS-Procedural-Sky</i> (shader <i>Gas-Station/Procedural Night Sky</i>). It starts from three colours blended by height (top, middle, bottom) in a very dark teal, and adds what the shader computes itself: clouds drifting slowly, lit from below by a warm glow along the horizon (the town), stars that the clouds cover, and a moon with a soft glow. All its colours are typed as small linear numbers, because the sky must be about a hundred times darker than the lights. Try <i>Cover</i>, <i>Drift</i> and the moon's <i>Direction</i>; in the fog, the moon and the horizon glow read most. The simpler <i>GS-Gradient-Sky</i> (the three colours only) is in the same folder.")),
|
|
24
|
+
NewPage("8.2 · Environment Lighting",
|
|
25
|
+
Text("<b>Environment Lighting:</b> <i>Source: Gradient</i>, with the same three colours as the sky (Sky, Equator, Ground). This is the light every surface receives from all around. At night it is low and coloured, never black.")),
|
|
26
|
+
NewPage("8.3 · Environment Reflections",
|
|
27
|
+
Text("<b>Environment Reflections:</b> <i>Source: Custom</i>, no cubemap, so the shiny surfaces reflect nothing from the sky. The wet ground will only mirror the station and its haze.")),
|
|
28
|
+
NewPage("8.4 · Sun Source",
|
|
29
|
+
Text("<b>Sun Source:</b> leave it empty for now; § 10 sets it.")),
|
|
30
|
+
NewPage("8.5 · Lighting Settings",
|
|
31
|
+
Text("<b>Lighting Settings.</b> The scene's Lighting Settings asset has <i>Baked Global Illumination</i> and <i>Realtime Global Illumination</i> both off. Nothing is baked."),
|
|
32
|
+
Text("<b>Save the scene.</b>")),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
using System.Collections.Generic;
|
|
2
|
+
using Mavrodiev.Tutorials.Editor;
|
|
3
|
+
|
|
4
|
+
namespace Mavrodiev.Playground.GasStation
|
|
5
|
+
{
|
|
6
|
+
// Generated from Gas-Station-Tutorial.md (the readable version, next to the scene): one tutorial per section, one page per step.
|
|
7
|
+
public class GasStation09Definition : TutorialDefinition
|
|
8
|
+
{
|
|
9
|
+
public override string Id => "Gas-Station-09-The-lights";
|
|
10
|
+
public override string Title => "9 · The lights";
|
|
11
|
+
public override string Description => "URP's rectangle (area) lights work only with baked lighting, so the fluorescent fixtures are made from spot and point lights.";
|
|
12
|
+
public override int Order => 10;
|
|
13
|
+
public override string ContentsTitle => "Gas Station";
|
|
14
|
+
public override string ContentsSubtitle => "Building the scene layer by layer";
|
|
15
|
+
|
|
16
|
+
public override IEnumerable<Page> Pages()
|
|
17
|
+
{
|
|
18
|
+
return new List<Page>
|
|
19
|
+
{
|
|
20
|
+
NewPage("9 · The lights",
|
|
21
|
+
Text("URP's rectangle (area) lights work only with baked lighting, so the fluorescent fixtures are made from <b>spot</b> and <b>point</b> lights. Each fixture gets three lights placed at the fixture: an Area Light and a Tube Light under <i>9 · Lights › Canopy › Fixture n Lights</i>, and a Fog Spot, which belongs to the fog layer (<i>10 · Fog › Fog Spots</i>, § 10). The kiosk's, the sign's and the street lamps' lights have their own parents under <i>9 · Lights</i>. Copy the first fixture's lights to the other five once they look right.")),
|
|
22
|
+
NewPage("The lights: values",
|
|
23
|
+
Text("• <b>Area Light</b> (×6) — Type: Spot, pointing down, 12 cm under the soffit · Intensity: 5.3 · Range: 30 · Spot angle (outer / inner): 170 / 169 · Colour (0–255): 102, 204, 255 · Shadows: Soft · Notes: Cookie: <i>Lambert-Spot-170</i>\n• <b>Tube Light</b> (×6) — Type: Point, at the tube · Intensity: 0.9 · Range: 25 · Colour (0–255): 102, 204, 255 · Shadows: None · Notes: the soft light all around the fixture, on the soffit\n• <b>Fog Spot</b> (×6) — Type: Spot, pointing down · Intensity: 3.5 · Range: 8 · Spot angle (outer / inner): 170 / 90 · Colour (0–255): 92, 199, 255 · Shadows: Soft · Notes: lights only the fog (§ 10)\n• <b>Ceiling Light</b> — Type: Spot, down, inside the kiosk · Intensity: 6.4 · Range: 25 · Spot angle (outer / inner): 170 / 169 · Colour (0–255): 255, 140, 56 · Shadows: Soft · Notes: Cookie: <i>Lambert-Spot-170</i>\n• <b>Window Beam</b> (×2) — Type: Spot, from inside, out through each window, slightly down · Intensity: 104 · Range: 13 · Spot angle (outer / inner): 30 / 18 · Colour (0–255): 255, 140, 56 · Shadows: Soft · Notes: the warm shafts out of the windows\n• <b>Lamp Light</b> — Type: Spot, from the wall lamp, down and out · Intensity: 1.1 · Range: 18 · Spot angle (outer / inner): 120 / 50 · Colour (0–255): 255, 179, 92 · Shadows: Soft · Notes: Cookie: <i>Lambert-Spot-170</i>\n• <b>Sign Glow</b> — Type: Spot, toward the camera, in front of the sign · Intensity: 0.42 · Range: 12 · Spot angle (outer / inner): 120 · Colour (0–255): 217, 230, 255 · Shadows: None · Notes: the sign's halo\n• <b>Sodium Light</b> (×2) — Type: Spot, down, in each street lamp · Intensity: 3.3 · Range: 25 · Spot angle (outer / inner): 110 · Colour (0–255): 255, 140, 51 · Shadows: None · Notes: far away; only the glow will read")),
|
|
24
|
+
NewPage("Why a cookie on the wide spots",
|
|
25
|
+
Text("<b>Why a cookie on the wide spots.</b> A Spot light's brightness falls off quickly toward the edge of its cone. A flat panel of light (a fluorescent fixture) instead sends a lot of light sideways. The cookie <i>Textures/URP/Lambert-Spot-170.png</i> (<i>Texture Type: Cookie</i>) makes a 170° spot fade gradually from its centre to its edge, like a panel. With the inner angle almost equal to the outer one (169°), the cookie alone decides the falloff.")),
|
|
26
|
+
NewPage("Why the window beams are so bright",
|
|
27
|
+
Text("<b>Why the window beams are so bright.</b> Their cone is narrow (30°), so the same amount of light is concentrated into a small area. The kiosk's walls shadow them, so once the fog is on each window sends out its own shaft."),
|
|
28
|
+
Text("<b>Save the scene.</b> The station is now lit, but the air is still clear.")),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
using System.Collections.Generic;
|
|
2
|
+
using Mavrodiev.Tutorials.Editor;
|
|
3
|
+
|
|
4
|
+
namespace Mavrodiev.Playground.GasStation
|
|
5
|
+
{
|
|
6
|
+
// Generated from Gas-Station-Tutorial.md (the readable version, next to the scene): one tutorial per section, one page per step.
|
|
7
|
+
public class GasStation10Definition : TutorialDefinition
|
|
8
|
+
{
|
|
9
|
+
public override string Id => "Gas-Station-10-The-fog-and-the-light-shafts";
|
|
10
|
+
public override string Title => "10 · The fog and the light shafts";
|
|
11
|
+
public override string Description => "The fog comes from the Volumetric Fog renderer feature (§ 0).";
|
|
12
|
+
public override int Order => 11;
|
|
13
|
+
public override string ContentsTitle => "Gas Station";
|
|
14
|
+
public override string ContentsSubtitle => "Building the scene layer by layer";
|
|
15
|
+
|
|
16
|
+
public override IEnumerable<Page> Pages()
|
|
17
|
+
{
|
|
18
|
+
return new List<Page>
|
|
19
|
+
{
|
|
20
|
+
NewPage("10 · The fog and the light shafts",
|
|
21
|
+
Text("The fog comes from the Volumetric Fog renderer feature (§ 0). It is controlled from a Volume, and each light must be added to it one by one.")),
|
|
22
|
+
NewPage("10.1 · The Volume",
|
|
23
|
+
Text("<b>The Volume.</b> <i>GameObject › Volume › Global Volume</i>, named <i>Gas-Station Volume (global)</i>, with the profile <i>Gas-Station-Volume</i>. Add the override <b>Volumetric Fog</b>: <i>Enabled</i> on; <i>Distance</i> 100; <i>Base Height</i> 0, <i>Maximum Height</i> 16 (the fog thins out with height); <i>Density</i> 1; <i>Attenuation Distance</i> 15 (how far one sees through it); <i>Anisotropy</i> 0; <i>Scattering</i> 1; <i>Main Light</i> and <i>Additional Lights</i> contributions on; <i>Max Steps</i> 128; <i>Blur Iterations</i> 2.")),
|
|
24
|
+
NewPage("10.2 · Render Pass Event: Before Rendering Transparents",
|
|
25
|
+
Text("<b>Render Pass Event: Before Rendering Transparents.</b> The fog is then drawn before the reflections take their picture of the frame, so the wet ground mirrors the haze too (§ 11).")),
|
|
26
|
+
NewPage("10.3 · Add each light to the fog",
|
|
27
|
+
Text("<b>Add each light to the fog.</b> A light shows in the fog only with a <b>Volumetric Additional Light</b> component on it. Its <i>Scattering</i> is how much of its light the fog catches:"),
|
|
28
|
+
Text("• <b>Fog Spot</b> — Scattering: 4.34\n• <b>Ceiling Light</b> — Scattering: 1.24\n• <b>Sign Glow</b> — Scattering: 0.6\n• <b>Lamp Light, Sodium Light</b> — Scattering: 0.5\n• <b>Window Beam</b> — Scattering: 0.48\n• <b>Area Light</b> — Scattering: 0.1\n• <b>Tube Light</b> — Scattering: 0.06")),
|
|
29
|
+
NewPage("10.4 · The fog-only lights",
|
|
30
|
+
Text("<b>The fog-only lights.</b> The Fog Spots carry most of the haze under the canopy, but they should not light the surfaces a second time. The fog feature ignores <b>Rendering Layers</b>, while surfaces respect them. So the Fog Spots are set to a Rendering Layer that no object uses (<i>Light › Rendering › Rendering Layers</i>, a spare layer, for example layer 15), and their shadows keep the default layers, so the canopy, the columns and the pumps still cut their light into shafts. Their short Range (8 m) ends the bright haze about where the canopy ends.")),
|
|
31
|
+
NewPage("10.5 · The distance fog",
|
|
32
|
+
Text("<b>The distance fog.</b> Unity's own fog, in the Lighting window (<i>Environment › Other Settings › Fog</i>): on, <i>Mode: Exponential Squared</i>, <i>Density</i> 0.015, colour the sky's middle (very dark teal). It fades every surface with its distance from the camera, independently of the volumetric fog: the backdrop and the far ground fade first. Without the Volumetric Fog package, it is the only fog in the scene.")),
|
|
33
|
+
NewPage("10.6 · The fog's sky light",
|
|
34
|
+
Text("<b>The fog's sky light.</b> The fog is lit only by lights, never by the sky. A <b>Directional Light</b> pointing straight down, named <i>Fog Ambient (fog only)</i>, on the same spare Rendering Layer, gives the whole fog a faint teal glow: Intensity 0.012, colour 88, 194, 255, no shadows. In the Lighting window, set it as the <b>Sun Source</b>. The fog uses the main light for its general glow."),
|
|
35
|
+
Text("<b>Save the scene.</b> Compare it with the previous save: the halos around the fixtures, the shafts between the columns and the warm beams out of the kiosk come from this step.")),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
using System.Collections.Generic;
|
|
2
|
+
using Mavrodiev.Tutorials.Editor;
|
|
3
|
+
|
|
4
|
+
namespace Mavrodiev.Playground.GasStation
|
|
5
|
+
{
|
|
6
|
+
// Generated from Gas-Station-Tutorial.md (the readable version, next to the scene): one tutorial per section, one page per step.
|
|
7
|
+
public class GasStation11Definition : TutorialDefinition
|
|
8
|
+
{
|
|
9
|
+
public override string Id => "Gas-Station-11-Reflections-on-the-wet-ground";
|
|
10
|
+
public override string Title => "11 · Reflections on the wet ground";
|
|
11
|
+
public override string Description => "A smooth surface shows what is around it.";
|
|
12
|
+
public override int Order => 12;
|
|
13
|
+
public override string ContentsTitle => "Gas Station";
|
|
14
|
+
public override string ContentsSubtitle => "Building the scene layer by layer";
|
|
15
|
+
|
|
16
|
+
public override IEnumerable<Page> Pages()
|
|
17
|
+
{
|
|
18
|
+
return new List<Page>
|
|
19
|
+
{
|
|
20
|
+
NewPage("11 · Reflections on the wet ground",
|
|
21
|
+
Text("A smooth surface shows what is around it. Here three things are reflected: the station, the lights and the haze. The scene uses two kinds of reflection together.")),
|
|
22
|
+
NewPage("11.1 · Screen Space Reflections (SSR)",
|
|
23
|
+
Text("<b>Screen Space Reflections (SSR)</b> for every surface except the ground. In the Volume, add <b>Screen Space Reflection</b>: <i>Mode</i> switched on (not <i>Disabled</i>), <i>Minimum Smoothness</i> 0.25 (rougher surfaces reflect nothing), <i>Smoothness Fade Start</i> 0.35, <i>Max Ray Length</i> 60, <i>Max Ray Steps</i> 128, <i>Roughness Scale</i> −3 (sharp reflections, stretched into streaks). SSR can only reflect what is on screen: an object outside the frame, or hidden behind another, is missing from the reflection.")),
|
|
24
|
+
NewPage("11.2 · A planar reflection",
|
|
25
|
+
Text("<b>A planar reflection</b> for the ground. A second camera, mirrored below the ground, renders the scene upside down into a texture, and the wet-ground shader reads it. This reflects the haze, which SSR cannot capture well on a rough, bumpy surface.\n• An empty GameObject <i>Planar Reflection</i> with the <b>Planar Reflection</b> script: <i>Source</i> the Main Camera, <i>Plane Height</i> 0, <i>Resolution Scale</i> 0.5. The script creates its own child <i>Reflection Camera</i>.\n• Its <i>Culling Mask</i> leaves out the <b>Water</b> layer, so the ground does not block the view from below. Its <i>Volume Mask</i> is Water too: it uses only a second Volume, <i>Planar Reflection Volume (fog only)</i>, placed on the Water layer, whose profile has the fog and nothing else (no colour grading, so the grade is not applied twice).\n• <i>Reflect Sky</i> off: where the mirrored camera sees the sky, it sees black.\n• In the ground material: <i>Planar Reflection Strength</i> 3.5, <i>Distortion by the normal</i> 0.03, <i>Vertical stretch</i> 0.35 (the long vertical streaks of light on wet asphalt). <i>Smoothness seen by SSR</i> 0, so SSR does not reflect on the ground a second time."),
|
|
26
|
+
Text("<b>Save the scene.</b>")),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
using System.Collections.Generic;
|
|
2
|
+
using Mavrodiev.Tutorials.Editor;
|
|
3
|
+
|
|
4
|
+
namespace Mavrodiev.Playground.GasStation
|
|
5
|
+
{
|
|
6
|
+
// Generated from Gas-Station-Tutorial.md (the readable version, next to the scene): one tutorial per section, one page per step.
|
|
7
|
+
public class GasStation12Definition : TutorialDefinition
|
|
8
|
+
{
|
|
9
|
+
public override string Id => "Gas-Station-12-The-rain";
|
|
10
|
+
public override string Title => "12 · The rain";
|
|
11
|
+
public override string Description => "The rain is four Particle Systems (GameObject › Effects › Particle System) under an empty Rain at y = 12, turned −25° like the station.";
|
|
12
|
+
public override int Order => 13;
|
|
13
|
+
public override string ContentsTitle => "Gas Station";
|
|
14
|
+
public override string ContentsSubtitle => "Building the scene layer by layer";
|
|
15
|
+
|
|
16
|
+
public override IEnumerable<Page> Pages()
|
|
17
|
+
{
|
|
18
|
+
return new List<Page>
|
|
19
|
+
{
|
|
20
|
+
NewPage("12 · The rain",
|
|
21
|
+
Text("The rain is four <b>Particle Systems</b> (<i>GameObject › Effects › Particle System</i>) under an empty <i>Rain</i> at y = 12, turned −25° like the station. They are four boxes around the canopy, so no drop starts above it and the space under the canopy stays dry.")),
|
|
22
|
+
NewPage("The emitters: values",
|
|
23
|
+
Text("• <b>Rain Front</b> — Centre (local): (0, 0, −16.95) · Box size (m): 36 × 26.1 · Rate over Time: 11 275\n• <b>Rain Back</b> — Centre (local): (0, 0, 10.95) · Box size (m): 36 × 14.1 · Rate over Time: 6091\n• <b>Rain Left</b> — Centre (local): (−11.4, 0, 0) · Box size (m): 13.2 × 7.8 · Rate over Time: 1236\n• <b>Rain Right</b> — Centre (local): (11.4, 0, 0) · Box size (m): 13.2 × 7.8 · Rate over Time: 1236")),
|
|
24
|
+
NewPage("12.1 · Main module",
|
|
25
|
+
Text("<b>Main module:</b> Start Lifetime 1.33 s, Start Size 0.02 (2 cm). The drops fall from 12 m at 9 m/s, so they die exactly at the ground.")),
|
|
26
|
+
NewPage("12.2 · Shape",
|
|
27
|
+
Text("<b>Shape:</b> Box, with the size from the table, flat.")),
|
|
28
|
+
NewPage("12.3 · Velocity over Lifetime",
|
|
29
|
+
Text("<b>Velocity over Lifetime:</b> (0.5, −9, 0.15): straight down with a slight slant.")),
|
|
30
|
+
NewPage("12.4 · Renderer",
|
|
31
|
+
Text("<b>Renderer:</b> <i>Render Mode: Stretched Billboard</i>, <i>Velocity Scale</i> 0.06, so each drop is drawn as a streak in the direction it falls. Material <i>GS-Rain-Streak</i>: <i>Universal Render Pipeline/Particles/Lit</i>, Transparent, <i>Blend Mode: Additive</i>, alpha 0.4. Lit particles take the colour of the lights they pass through: the drops shine cyan under the canopy lights and warm near the kiosk.")),
|
|
32
|
+
NewPage("12.5 · The splashes",
|
|
33
|
+
Text("<b>The splashes.</b> A child Particle System <i>Splash</i>, used as a <b>Sub Emitter</b> of the rain on <i>Death</i>: 1 to 3 splashes per drop, lifetime 0.12 to 0.25 s, size 2 to 4 cm, <i>Shape: Hemisphere</i>, <i>Gravity Modifier</i> 1.5. Material <i>GS-Rain-Splash</i>.")),
|
|
34
|
+
NewPage("In the Editor",
|
|
35
|
+
Text("<b>In the Editor.</b> The rain moves only while one of its Particle Systems is selected, or in Play mode.")),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
using System.Collections.Generic;
|
|
2
|
+
using Mavrodiev.Tutorials.Editor;
|
|
3
|
+
|
|
4
|
+
namespace Mavrodiev.Playground.GasStation
|
|
5
|
+
{
|
|
6
|
+
// Generated from Gas-Station-Tutorial.md (the readable version, next to the scene): one tutorial per section, one page per step.
|
|
7
|
+
public class GasStation13Definition : TutorialDefinition
|
|
8
|
+
{
|
|
9
|
+
public override string Id => "Gas-Station-13-Post-processing";
|
|
10
|
+
public override string Title => "13 · Post-processing";
|
|
11
|
+
public override string Description => "Post-processing works on the finished image, after everything above.";
|
|
12
|
+
public override int Order => 14;
|
|
13
|
+
public override string ContentsTitle => "Gas Station";
|
|
14
|
+
public override string ContentsSubtitle => "Building the scene layer by layer";
|
|
15
|
+
|
|
16
|
+
public override IEnumerable<Page> Pages()
|
|
17
|
+
{
|
|
18
|
+
return new List<Page>
|
|
19
|
+
{
|
|
20
|
+
NewPage("13 · Post-processing",
|
|
21
|
+
Text("Post-processing works on the finished image, after everything above. Add these overrides to the same global Volume.")),
|
|
22
|
+
NewPage("13.1 · Tonemapping",
|
|
23
|
+
Text("<b>Tonemapping:</b> <i>Neutral</i>. It brings the bright values (the tubes, the beams) back into the range the screen can show without changing the colours much.")),
|
|
24
|
+
NewPage("13.2 · Bloom",
|
|
25
|
+
Text("<b>Bloom:</b> Threshold 0, Intensity 0.9, Scatter 0.9, <i>High Quality Filtering</i> on. Every bright surface glows, the tubes and the windows the most.")),
|
|
26
|
+
NewPage("13.3 · Shadows Midtones Highlights",
|
|
27
|
+
Text("<b>Shadows Midtones Highlights:</b> Shadows (0.8, 1, 1.03), Midtones (0.88, 1, 1.02). A little red is taken out of the dark and middle tones, which keeps the night teal.")),
|
|
28
|
+
NewPage("13.4 · Split Toning",
|
|
29
|
+
Text("<b>Split Toning:</b> Shadows (0.38, 0.50, 0.56), Highlights (0.60, 0.53, 0.45), Balance −15: cool shadows, warm highlights.")),
|
|
30
|
+
NewPage("13.5 · Screen Space Lens Flare",
|
|
31
|
+
Text("<b>Screen Space Lens Flare:</b> Intensity 0.35 (first flare 0.6, secondary 0.3, warped 0.3; streaks 0.5, length 0.4, threshold 0.4). The bright tubes leave the streaks and ghosts of a camera lens.")),
|
|
32
|
+
NewPage("13.6 · Chromatic Aberration",
|
|
33
|
+
Text("<b>Chromatic Aberration:</b> 0.08. A faint colour fringe toward the edges of the frame, as in a real lens.")),
|
|
34
|
+
NewPage("13.7 · Vignette",
|
|
35
|
+
Text("<b>Vignette:</b> Intensity 0.3, Smoothness 0.5.")),
|
|
36
|
+
NewPage("13.8 · Film Grain",
|
|
37
|
+
Text("<b>Film Grain:</b> <i>Type: Medium 3</i>, Intensity 0.2."),
|
|
38
|
+
Text("<b>Save the scene.</b> Compare your saves from the first to the last: each one shows what its layer adds.")),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|