TÓM TẮT
- 1 1. Giới thiệu tổng quan
- 2 2. Hiểu rõ vai trò và loại platform
- 3 3. Chuẩn bị công cụ và tài nguyên
- 4 4. Quy trình vẽ platform 2D
- 5 5. Vẽ platform 3D – Từ Mesh đến Shader
- 6 6. Kỹ thuật nâng cao cho platform
- 7 7. Tối ưu hoá hiệu suất
- 8 8. Kiểm thử và iterating
- 9 9. Ví dụ thực tế: Tạo một level platformer đơn giản
- 10 10. Tổng kết
1. Giới thiệu tổng quan
Trong thiết kế game, platform (nền, mặt đất, bệ) là một trong những thành phần quan trọng nhất, đặc biệt đối với các thể loại game 2D side‑scroll, platformer, hoặc bất kỳ tựa game nào có yếu tố di chuyển và va chạm. Một platform không chỉ đơn thuần là một hình chữ nhật màu sắc, mà còn là yếu tố quyết định trải nghiệm người chơi: độ mượt mà của chuyển động, cảm giác trọng lực, độ khó, và thẩm mỹ tổng thể.
Bài viết này sẽ hướng dẫn chi tiết cách vẽ platform trong game từ khâu lên ý tưởng, lựa chọn công cụ, thiết kế đồ họa 2D/3D, tối ưu hoá cho engine, cho tới các kỹ thuật nâng cao như tạo texture, shader, và physics. Mục tiêu là giúp bạn, dù là người mới bắt đầu hay lập trình viên có kinh nghiệm, có thể tự tin tạo ra những nền tảng chất lượng, phù hợp với mọi thể loại game.
Lưu ý: Bài viết sẽ tập trung vào cách vẽ (visual design) chứ không chỉ là lập trình. Tuy nhiên, các phần liên quan tới code và physics cũng sẽ được đề cập để bạn có thể tích hợp platform một cách trơn tru.
2. Hiểu rõ vai trò và loại platform
2.1. Các loại platform cơ bản
| Loại platform | Đặc điểm | Ứng dụng thường gặp |
|---|---|---|
| Static Platform | Không di chuyển, không thay đổi hình dạng | Nền đất, tường, sàn nhà |
| Moving Platform | Di chuyển theo trục X, Y hoặc cả hai, có thể quay | Nền di chuyển, thang máy |
| Falling Platform | Rơi xuống khi người chơi đứng lên | Cạm bẫy, thách thức thời gian |
| One‑Way Platform | Cho phép người chơi đi lên nhưng không rơi qua | Nền mây, hành lang có thể nhảy qua |
| Breakable Platform | Vỡ hoặc biến mất sau một thời gian hoặc số lần va chạm | Cạm bẫy, level khó |
| Rotating Platform | Quay quanh trục trung tâm | Trục quay, vòng quay khó khăn |
2.2. Yếu tố ảnh hưởng đến cách vẽ

Có thể bạn quan tâm: Cách Vẽ Pixel Trên Paint: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
- Thể loại game: Platformer cổ điển thường có đồ họa pixel art, trong khi game 3D có thể dùng mesh và shader phức tạp.
- Phong cách nghệ thuật: Retro, low‑poly, cartoon, realistic… Mỗi phong cách yêu cầu cách vẽ, shading và texture khác nhau.
- Độ phân giải và tỷ lệ màn hình: 2D pixel art yêu cầu độ phân giải cố định, 3D thì phải cân nhắc LOD (Level of Detail).
- Performance: Nhiều platform đồng thời xuất hiện sẽ ảnh hưởng tới FPS, do đó cần tối ưu số lượng draw call và sử dụng atlas.
3. Chuẩn bị công cụ và tài nguyên
3.1. Lựa chọn phần mềm vẽ
| Phần mềm | Đặc điểm | Khi nào dùng |
|---|---|---|
| Adobe Photoshop | Công cụ raster mạnh, hỗ trợ layer, filter, brush | Vẽ texture 2D chi tiết, UI |
| Aseprite | Pixel‑art chuyên dụng, animation frame‑by‑frame | Game retro, 8‑bit |
| Adobe Illustrator | Vector, thích hợp cho UI, logo, shape | Platform dạng vector, scalable |
| Blender | 3D modeling, sculpt, shader, animation | Platform 3D, low‑poly, PBR |
| Spine / DragonBones | Skeletal animation 2D | Platform có animation phức tạp |
| Tiled Map Editor | Tạo tilemap, layout level | Platform dựa trên tileset |
3.2. Thiết lập dự án
- Resolution: Đối với 2D, thường dùng 1920×1080 hoặc 1280×720. Đối với pixel art, quyết định “pixel per unit” (PPU) – ví dụ 100 PPU = 1 Unity unit.
- Color Palette: Chọn palette giới hạn (ví dụ 16‑32 màu) để giữ tính đồng nhất và giảm dung lượng.
- Tile Size: 16×16, 32×32, 64×64 pixel là các kích thước phổ biến. Đối với 3D, quyết định kích thước mesh (ví dụ 1 unit = 1 mét).
4. Quy trình vẽ platform 2D
4.1. Bước 1: Phác thảo ý tưởng (Concept)
- Sketch nhanh trên giấy hoặc phần mềm (Photoshop, Procreate). Vẽ các hình dạng cơ bản: hình chữ nhật, hình tam giác, hình vòng.
- Xác định độ dày (thickness) của platform: 8‑12 pixel cho platform mỏng, 20‑30 pixel cho nền đất.
- Đánh dấu điểm giao cắt (collision points) – nơi player sẽ đứng, va chạm.
4.2. Bước 2: Tạo tileset cơ bản
- Mở một file mới, kích thước 256×256 (hoặc 512×512) pixel.
- Vẽ tile gốc (base tile) – thường là hình chữ nhật màu nền (ví dụ: nâu đất).
- Thêm edge tiles: góc, cạnh trái, cạnh phải, cạnh trên/dưới. Điều này giúp khi lắp ghép, platform không bị “cắt” lỗi.
- Shading: Sử dụng gradient nhẹ hoặc dithering để tạo độ sâu. Đối với pixel art, dùng dither để tạo texture đá/đất.
4.3. Bước 3: Thêm chi tiết (Detailing)

Có thể bạn quan tâm: Cách Vẽ Pixel Bằng Paint: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
- Texture: Vẽ các hạt đất, đá, cỏ, vết nứt. Đối với phong cách real‑life, có thể tạo noise và overlay.
- Decal: Đặt các vật phẩm phụ (cây, nấm, vết sơn) để tăng độ phong phú.
- Highlight & Shadow: Thêm điểm sáng ở góc trên‑phải (nếu ánh sáng tới từ trên‑trái) và bóng ở góc dưới‑trái.
4.4. Bước 4: Tạo atlas và export
- Sprite Atlas: Đặt tất cả các tile vào một atlas để giảm draw call.
- Format: PNG với alpha channel, hoặc WebP nếu engine hỗ trợ.
- Compression: Đối với mobile, giảm độ sâu màu (8‑bit) để giảm dung lượng.
4.5. Bước 5: Kiểm tra trong engine
- Nhập atlas vào Unity, Godot hoặc Unreal.
- Tạo TileMap (Unity: Grid + Tilemap, Godot: TileMap node) và vẽ level mẫu.
- Kiểm tra collision shape: Đảm bảo collider khớp với hình dạng platform.
- Chạy thử player controller để xem cảm giác di chuyển, độ mượt.
5. Vẽ platform 3D – Từ Mesh đến Shader
5.1. Tạo mesh cơ bản trong Blender
- Add → Mesh → Cube. Đặt scale thành (X, Y, Z) = (2, 0.2, 2) – tạo nền dày 0.2 unit.
- Bevel các cạnh để tạo độ tròn nhẹ, giảm “hard edge”.
- UV Unwrap: Sử dụng Smart UV Project hoặc Manual unwrap để chuẩn bị texture.
5.2. Phong cách low‑poly vs high‑poly
- Low‑poly: Giữ số polygon dưới 300, sử dụng màu solid hoặc flat shading. Thích hợp cho mobile và indie.
- High‑poly / PBR: Thêm subdivision, normal map, metallic‑roughness. Cần texture độ phân giải cao (2K‑4K).
5.3. Tạo material và shader
5.3.1. Shader đơn giản (Unlit)
Shader "Custom/PlatformUnlit"
{ Properties{ _MainTex ("Texture", 2D) = "white" {} } SubShader{ Tags {"RenderType"="Opaque"} LOD 100 Pass{ CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" sampler2D _MainTex; struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } fixed4 frag (v2f i) : SV_Target { return tex2D(_MainTex, i.uv); } ENDCG } }
}
5.3.2. PBR Shader (Standard)
- Sử dụng Standard Shader của Unity hoặc Material trong Unreal.
- Gán các texture: Albedo, Normal, Roughness, Metallic.
- Đặt Smoothness thấp cho nền đất, cao cho nền đá trơn.
5.4. Áp dụng physics

Có thể bạn quan tâm: Cách Vẽ Pie Of Pie Trong Excel: Hướng Dẫn Chi Tiết Từ A Đến Z
- Collider: Thêm Box Collider (Unity) hoặc Static Mesh Collision (Unreal). Đối với platform di chuyển, dùng Rigidbody + Collider.
- Layer & Mask: Đặt platform vào layer “Ground”, player vào layer “Player”. Thiết lập collision matrix để tránh va chạm không cần thiết.
6. Kỹ thuật nâng cao cho platform
6.1. Platform động (Moving Platform)
6.1.1. Di chuyển tuyến tính
// Unity C# example
public class MovingPlatform : MonoBehaviour
{ public Vector3 pointA; public Vector3 pointB; public float speed = 2f; private bool forward = true; void Update() { Vector3 target = forward ? pointB : pointA; transform.position = Vector3.MoveTowards(transform.position, target, speed Time.deltaTime); if (Vector3.Distance(transform.position, target) < 0.01f) forward = !forward; } // Khi player đứng lên, set parent để di chuyển cùng platform void OnCollisionEnter(Collision other) { if (other.gameObject.CompareTag("Player")) other.transform.SetParent(transform); } void OnCollisionExit(Collision other) { if (other.gameObject.CompareTag("Player")) other.transform.SetParent(null); }
}
6.1.2. Di chuyển dạng Path (Spline)
- Sử dụng Cinemachine Path (Unity) hoặc Spline Component (Unreal) để tạo đường cong mượt.
- Tính toán vị trí dựa trên t (0‑1) và speed.
6.2. One‑Way Platform (Platform một chiều)
- Physics Layer: Khi player nhấn “down” (hoặc nhảy xuống), tạm thời tắt collision giữa player và platform.
- Raycast: Kiểm tra phía dưới player, nếu có platform, cho phép qua.
// Unity pseudo code
if (Input.GetKeyDown(KeyCode.S) && IsStandingOnOneWay())
{ Physics2D.IgnoreLayerCollision(playerLayer, platformLayer, true); Invoke("RestoreCollision", 0.5f);
}
6.3. Breakable & Crumbling Platform
- Animation: Tạo sprite sheet “intact → cracked → broken”.
- Timer: Khi player đứng, bắt đầu đếm thời gian, sau 1‑2 giây chuyển sang trạng thái “cracked”, rồi “broken”.
- Collider: Khi trạng thái “broken”, tắt collider.
6.4. Shading và hiệu ứng đặc biệt
- Parallax Background: Tạo các layer nền di chuyển chậm hơn platform để tạo chiều sâu.
- Particle System: Khi platform di chuyển, phát ra khói, spark.
- Lightmapping: Đối với 3D, bake lightmap để nền platform nhận ánh sáng môi trường, giảm tính toán realtime.
7. Tối ưu hoá hiệu suất

Có thể bạn quan tâm: Cách Vẽ Popu Điểm Thi: Hướng Dẫn Chi Tiết Từ A Đến Z
7.1. Draw Call giảm
- Sprite Atlas cho 2D.
- Static Batching và GPU Instancing cho 3D.
- Combine Meshes: Nối các platform tĩnh thành một mesh lớn.
7.2. Collision tối ưu
- Composite Collider 2D (Unity) cho TileMap.
- NavMesh không cần cho platform, tránh tính toán pathfinding không cần thiết.
7.3. LOD và Culling
- Đối với 3D, tạo LOD Group: giảm polys khi platform xa camera.
- Occlusion Culling: Nếu platform bị che, không render.
8. Kiểm thử và iterating
- Playtest: Đánh giá cảm giác di chuyển, độ “sticky” của platform. Người chơi có cảm thấy “bị kẹt” không?
- Feedback Loop: Thu thập ý kiến, điều chỉnh độ dày, độ ma sát (physics material), và độ cao jump.
- Automated Tests: Viết unit test cho collision và movement logic (Unity Test Runner, Godot GUT).
9. Ví dụ thực tế: Tạo một level platformer đơn giản
9.1. Bước 1: Tạo tileset (32×32 pixel)
- Ground_01: Đá cơ bản.
- Ground_01_edge: Các góc và cạnh.
- Grass_01: Đá có cỏ.
9.2. Bước 2: Xây dựng TileMap trong Unity

// Tạo Grid
GameObject grid = new GameObject("Grid");
grid.AddComponent<Grid>(); // Tạo Tilemap
GameObject tilemapObj = new GameObject("Ground");
tilemapObj.transform.parent = grid.transform;
Tilemap tilemap = tilemapObj.AddComponent<Tilemap>();
TilemapRenderer renderer = tilemapObj.AddComponent<TilemapRenderer>();
- Kéo atlas vào Tile Palette, vẽ nền, đặt platform di chuyển.
9.3. Bước 3: Thêm moving platform
- Tạo prefab “MovingPlatform” với mesh (Cube) và script
MovingPlatformnhư ở mục 6.1. - Đặt trong scene, cấu hình
pointAvàpointB.
9.4. Bước 4: Thêm player controller
- Sử dụng CharacterController2D (Unity) hoặc KinematicBody2D (Godot). Đảm bảo gravity và jump phù hợp với độ cao platform.
9.5. Bước 5: Play và tinh chỉnh
- Kiểm tra thời gian platform di chuyển, độ trễ khi player lên/đi xuống.
- Điều chỉnh Physics Material (friction 0, bounciness 0) để tránh trượt.
10. Tổng kết
Việc vẽ platform không chỉ là tạo hình ảnh đẹp mắt mà còn là công việc tích hợp chặt chẽ giữa art, design và programming. Từ việc lên concept, tạo tileset hoặc mesh, áp dụng shader, đến việc lập trình chuyển động và physics, mỗi bước đều ảnh hưởng đến trải nghiệm cuối cùng của người chơi.
Những điểm quan trọng cần nhớ:
- Xác định loại platform và chức năng trước khi bắt tay vào vẽ.
- Lựa chọn công cụ phù hợp (Aseprite cho pixel art, Blender cho 3D, Tiled cho tilemap).
- Tạo atlas/tileset chuẩn, giảm draw call và tối ưu texture.
- Kết hợp physics một cách hợp lý: collider, rigidbody, layer mask.
- Thêm chi tiết và hiệu ứng (shading, particles, parallax) để tăng chiều sâu.
- Kiểm thử liên tục, lắng nghe feedback và điều chỉnh độ dày, ma sát, tốc độ di chuyển.
- Tối ưu hoá để game chạy mượt trên mọi thiết bị, đặc biệt là mobile.
Khi bạn đã nắm vững quy trình này, việc tạo ra các nền tảng đa dạng, sinh động và mượt mà sẽ trở nên dễ dàng hơn bao giờ hết. Hãy bắt đầu thử nghiệm, sáng tạo và đưa những platform độc đáo vào game của mình – chính chúng sẽ là “bậc thang” dẫn người chơi tới những thử thách mới, những câu chuyện mới và, quan trọng nhất, là niềm vui trong mỗi cú nhảy và bước chạy. Chúc bạn thành công!
