Ánh sáng động và đổ bóng có thể nâng cao chất lượng hình ảnh và trải nghiệm gameplay của các game Godot. Chúng thêm chiều sâu, bầu không khí và tính chân thực, khiến thế giới game hấp dẫn, cuốn hút hơn.
Với các tính năng mạnh mẽ của Godot như CanvasModulate và PointLight2D, việc tạo, tùy biến ánh sáng động & đổ bóng là một nhiệm vụ dễ dàng.
Thiết lập game Godot
Trước khi đi sâu vào cách làm ánh sáng động, thiết lập game 2D cơ bản trong game engine Godot. Tạo một cảnh mới và thêm CharacterBody2D cho người chơi.
Bên trong CharacterBody2D, thêm CollisionShape2D với hình chữ nhật và Sprite2D để đại diện cho nhân vật người chơi. Ngoài ra, tạo một số nền tảng bằng node StaticBody2D.
Giờ, triển khai chuyển động người chơi và va chạm với các ranh giới của màn hình bằng GDScript:
extends CharacterBody2D
var speed = 200
func _physics_process(delta):
var velocity = Vector2()
if Input.is_action_pressed('ui_right'):
velocity.x += 1
if Input.is_action_pressed('ui_left'):
velocity.x -= 1
if Input.is_action_pressed('ui_down'):
velocity.y += 1
if Input.is_action_pressed('ui_up'):
velocity.y -= 1
velocity = velocity.normalized() * speed
move_and_collide(velocity * delta)
Với code này, người chơi có thể di chuyển sang trái, phải, lên và xuống, trong khi bị giới hạn bởi các cạnh màn hình.
Làm tối phần còn lại của cảnh
Để đạt được hiệu ứng ánh sáng động, bạn cần làm tối phần còn lại của cảnh, ngoại trừ vùng được các nguồn sáng chiếu tới. Bạn có thể làm việc này bằng cách dùng tính năng CanvasModulate của Godot.
extends Node2D
const DARKNESS = 0.7
func _ready():
var canvas_modulate = CanvasModulate.new()
canvas_modulate.color = Color(0, 0, 0, DARKNESS)
add_child(canvas_modulate)
Gắn tập lệnh này vào Node2D đã thêm vào phần gốc của cảnh. Node CanvasModulate sẽ áp dụng một lớp phủ màu đen bán trong suốt, làm tối toàn bộ cảnh, ngoại trừ khu vực được ánh sáng chiếu tới.
Tạo một biến DARKNESS không đổi, quyết định mật độ bóng tối đã áp dụng cho cảnh. Bằng cách điều chỉnh giá trị của DARKNESS, bạn có thể kiểm soát mức độ tối của cảnh khi không được chiếu sáng. Một giá trị cao hơn sẽ cho cảnh tối hơn, còn giá trị thấp hơn cho cảnh sáng hơn.
Đổ bóng ánh sáng
Để tạo đổ bóng, bạn cần thiết lập node LightOccluder2D trên vật cản chặn ánh sáng. Ví dụ, nếu có tường, nền tảng hay đối tượng khác cần đổ bóng, thêm LightOccluder2D vào từng thành phần.
Tạo node LightOccluder2D và điều chỉnh hình dạng của nó khớp với hình dạng của vật cản trong game. Bạn cũng có thể điều chỉnh thuộc tính của phần che khuất như polygon, segment để tinh chỉnh chuyển động của bóng đổ.
Thêm ánh sáng đa hướng
Giờ thêm node PointLight2D với một cấu trúc đại diện cho nguồn ánh sáng. Đèn điểm tỏa ánh sáng ra mọi hướng và tạo hiệu ứng chiếu sáng chân thực.
extends PointLight2D
var light_color = Color(1, 1, 0.8)
func _ready():
energy = 2.5
color = light_color
Bạn có thể tùy biến thuộc tính kiểm soát phạm vi và màu sắc của đèn tỏa ra bằng PointLight2D.
Bạn cũng có thể tạo hoặc nhập kết cấu đèn tùy chỉnh để xác định hình dạng và hình ảnh của nguồn sáng. Nó có thể là một hình tròn đơn giản hay hình dạng phức tạp hơn, phụ thuộc vào bầu không khí bạn muốn tạo.
Để áp dụng họa tiết cho node PointLight2D, hãy làm theo những bước sau:
- Chọn node PointLight2D trong cây cảnh.
- Trong bảng Inspector, xác định thuộc tính Texture trong phần Texture.
- Click box texture trống và chọn họa tiết đèn mong muốn từ trình duyệt file.
Giờ nguồn đèn sẽ tỏa sáng với hình dạng và màu sắc được xác định trước, thêm hiệu ứng hình ảnh bắt mắt cho ánh sáng và đổ bóng sinh động.
Trên đây là cách tạo đổ bóng và ánh sáng động cho game trong Godot. Hi vọng bài viết hữu ích với các bạn.