- Trong các game xây dựng thành phố, việc hiện thực hóa hệ thống đường sá một cách chân thực là yếu tố cốt lõi, không chỉ là thành phần thị giác đơn thuần mà còn là nền tảng quyết định độ hoàn thiện về cấu trúc
- Các game hiện nay thường dùng đường cong Bezier spline để biểu diễn đường sá, nhưng cách này có giới hạn trong việc duy trì độ cong và tính song song của đường thực tế
- Đường sá ngoài đời cần phản ánh khoảng cách giữa các trục xe và các ràng buộc khi vào cua, trong khi phương pháp Bezier làm biến dạng hình dạng khi offset, dẫn đến những đường cong phi thực tế
- Để giải quyết điều này, có thể áp dụng các đường cong kỹ thuật như cung tròn (Circle Arc) và clothoid (Clothoid), giúp chuyển đổi độ cong mượt mà và giữ được offset song song
- Tác giả đã tự xây dựng hệ thống đường sá để vượt qua những giới hạn này và dự định sẽ công bố quy trình triển khai kỹ thuật trong tương lai
Sức hấp dẫn của đường sá và các mô thức
- Tác giả tìm thấy sự thỏa mãn trong đường sá, tương tự như cảm giác trước những mô thức hỗn độn trong trật tự của tự nhiên
- So sánh với hiện tượng những quy tắc đơn giản chồng lớp tạo thành cấu trúc phức tạp như tổ kiến, tổ ong hay gân lá
- Mạng lưới đường sá cũng được mô tả là một trong những mô thức thú vị nhất do con người tạo ra
- Tác giả nhấn mạnh vẻ đẹp cấu trúc của đường sá khi tưởng tượng về dấu tích của mạng lưới đường bộ vẫn còn lại ngay cả sau khi thành phố biến mất
Game xây dựng thành phố và sự tiến hóa của đường sá
- Từ SimCity 2000 đến Cities: Skylines 2, hệ thống đường sá đã không ngừng phát triển
- SimCity 4 hỗ trợ độ cao và đường chéo, SimCity 2013 hỗ trợ đường cong, còn Cities: Skylines cho phép bố trí tự do và tạo nút giao
- Tuy vậy, vẫn còn tồn tại các vấn đề như đường cong thiếu tự nhiên, bán kính quay gắt và các nhánh lên xuống cao tốc phi thực tế
- Dù có thể hiện thực làn đường, vạch kẻ và đường cong chân thực hơn thông qua mod, nhưng vẫn không thể vượt qua những giới hạn nền tảng của engine
Giới hạn của Bezier spline
- Đường cong Bezier là một công cụ toán học mạnh mẽ để nối mượt hai điểm, nên được dùng trong hầu hết các game engine
- Tuy nhiên, đường cong này không giữ nguyên hình dạng và độ cong khi offset, tức là “offset của một đường cong Bezier không phải là một đường cong Bezier”
- Vì vậy phát sinh các hiện tượng lệch giữa đường cong phía trong và phía ngoài, tự giao nhau và pinching (thắt bóp)
- Kết quả là rất khó để hiện thực các đường cong song song phản ánh quỹ đạo xe thực tế như ngoài đời
Ứng dụng của cung tròn (Circle Arc) và clothoid (Clothoid)
- Cung tròn mang lại tính song song hoàn hảo vì vẫn giữ nguyên hình dạng sau khi offset
- Việc tính giao điểm giữa hai cung tròn đơn giản hơn Bezier rất nhiều và hiệu quả với độ phức tạp tính toán O(1)
- Khi nối các cung tròn có bán kính khác nhau, có thể tạo nên hình dạng đường sá hợp lý về mặt kỹ thuật
- Tuy nhiên, cung tròn có độ cong không đổi, nên khi chuyển từ đoạn thẳng sang đoạn cong sẽ gây ra sự thay đổi đột ngột của gia tốc ngang
- Để khắc phục điều này, người ta dùng clothoid (Clothoid)
- Độ cong tăng dần theo từng bước, mang lại cảm giác lái và độ êm tự nhiên hơn
- Dù phức tạp về mặt toán học, đây là yếu tố thiết yếu trong thiết kế đường cho xe chạy tốc độ cao
- Với các đoạn tốc độ thấp như nút giao trong đô thị, thiết kế dựa trên cung tròn cũng đủ để đạt được cảm giác chân thực
Vì sao tác giả tự làm hệ thống đường sá
- Phần lớn người chơi không quá quan tâm đến độ chính xác của độ cong tại nút giao, nhưng tác giả lại khám phá chủ đề này vì sự tò mò và thách thức kỹ thuật
- Mức độ hiện thực trong các game thương mại hiện nay khá cao, nhưng tài liệu hay asset mà lập trình viên indie có thể tiếp cận vẫn còn thiếu
- Tác giả tự triển khai hệ thống nhằm tạo ra một giải pháp tinh vi hơn và có thể chia sẻ được, thay vì chỉ làm đường dạng lưới đơn giản
- Ở bài viết tiếp theo, tác giả sẽ công bố chi tiết kỹ thuật của quá trình triển khai, và người đọc có thể đăng ký theo dõi để nhận cập nhật
1 bình luận
Ý kiến trên Hacker News
Đọc bài viết nói rằng đường là cốt lõi trong game xây dựng thành phố, tôi nghĩ mình hiểu vì sao các nhà quy hoạch đô thị hay gặp ác mộng
Nền tảng của đô thị không phải là đường cho ô tô (road), mà là phố (street) nơi người đi bộ, xe đạp và giao thông công cộng cùng sử dụng
Có thể tham khảo bài về khái niệm liên quan Stroad
Đường là trọng tâm của vận chuyển (transportation), còn phố là trọng tâm của tương tác công cộng (public interaction)
Dù vậy, tôi vẫn cảm thấy trích dẫn trong bài gốc đang bị chỉ trích hơi quá. Xã hội hiện đại có nhu cầu vận chuyển khổng lồ, nên mạng lưới đường sá trong và ngoài đô thị chính là bộ xương của thành phố
Trước những năm 1900, thành phố chỉ có thể được xây gần đường thủy, nhưng giờ thì nhờ đường sá mà điều đó cũng khả thi ở vùng nội địa
Nếu muốn tạo ra một thành phố chân thực, tôi nghĩ cách tiếp cận này đúng đắn hơn là làm những con đường giả tạo
Thỉnh thoảng tôi vẫn tưởng tượng — nếu một nền văn minh chỉ dùng xe đạp và đi bộ để thiết kế đô thị thì nó sẽ trông ra sao
Có một trò mà tác giả hẳn sẽ thích, đó là game sandbox Junxions, tập trung vào việc tạo các nút giao thông đường bộ
Subreddit liên quan ở đây. Có vẻ game này sẽ thỏa mãn rất tốt cơn nghiện thiết kế đường sá
Tôi cũng thích Junxions, nhưng cách tiếp cận của tôi khác. Bên đó dùng cấu trúc Bézier dựa trên node, còn tôi tự động tạo giao lộ bằng va chạm giữa các đoạn đường
Tôi định sẽ viết kỹ hơn về sự khác biệt giữa hai cách tiếp cận trong bài blog tiếp theo
Người ta bảo chỉ có 1% số người để ý đến bán kính góc ở giao lộ, và tôi chính là thuộc 1% đó
Định nghĩa đường bằng đường cong Bézier không hề dễ
Đặc biệt ở các đoạn cua gắt, kết quả nhìn sẽ rất xấu
Năm ngoái khi làm dự án Azoth, tôi cũng gặp đúng vấn đề này và đã tìm ra một cách giải quyết đơn giản hơn
Tham khảo: kho lưu trữ Azoth, ví dụ Bézier
Những yếu tố trông rất hiển nhiên trong game thực ra là kết quả của một lượng lao động và thiết kế khổng lồ
Ví dụ như đường sá, người chơi thường không nhìn kỹ nhưng chỉ cần nó trông sai là sẽ thấy kỳ ngay
Gần đây chơi Kingdom Come 2 tôi cảm nhận rất rõ điều đó — mọi thứ trông tự nhiên như ngoài đời, nhưng toàn bộ chi tiết ấy được làm ra bằng mồ hôi và nước mắt của các nhà phát triển
Vì thế tôi hiểu vì sao ngành game lại bị ám ảnh bởi crunch
Bài liên quan: The Door Problem, bài trên IGN
Chính những bài như thế này khiến tôi cứ tiếp tục đọc Hacker News. Tôi chỉ muốn nhắn tác giả hãy tiếp tục viết nữa
Có nhiều người cùng quan tâm đến chủ đề này nên tôi định sẽ tiếp tục hoạt động nhiều hơn
Bài này đúng gu tôi thật sự. Tôi cũng có cùng một nỗi ám ảnh về đường sá
Thành phố được cấu thành bởi đường như mạch máu, còn những con đường làng ở châu Âu và châu Á là những câu chuyện được dựng lên từ dấu chân qua lại
Trong khi đó, đường nông thôn ở quê tôi cứ kéo thẳng ra rồi bất ngờ bẻ ngoặt nếu nông dân không chịu bán đất
Chỉ một số khu thời thuộc địa hay đô thị quy hoạch mới có dạng ô bàn cờ, còn phần lớn thì đổi hướng theo dòng sông hay địa hình
Những điểm giao giữa các mạng lưới ô bàn cờ như vậy là phần đẹp nhất và thú vị nhất về mặt kiến trúc trong thành phố
Sẽ tuyệt biết bao nếu có một game mô phỏng sự thay đổi trong quá trình phát triển đô thị
Thành phố thật phát triển như tổ kiến, với sự phức tạp trong một trật tự tự nhiên
Có lẽ sau này tôi sẽ viết riêng một bài về chủ đề này
Trong game tiếp theo Canalpunk, tôi vẫn sẽ tiếp tục dùng spline Bézier
Tôi nghĩ một hệ thống thảm họa phát sinh khi tuyến đường tự cắt nhau sẽ rất thú vị
Tôi đang ám ảnh với việc triển khai clothoid (đường cong chuyển tiếp) trong trình chỉnh sửa đường ray
Trong khoảng trống thì dễ, nhưng khi nối các đoạn ray lại với nhau mới khó
Tôi có tài liệu giải thích từng làm trước đây: Euler Spiral Explanation
Tôi muốn thử xem có thể dùng giao điểm đó để nội suy một spline mới hay không
Hình minh họa: ví dụ trực quan
Cứ làm thành đường thẳng như người La Mã là xong :-)
Tất nhiên người La Mã thì chẳng mấy quan tâm đến đất tư nhân. Ở Lincolnshire, Anh, nơi tôi sống, đường La Mã vẫn còn được sử dụng đến giờ
Chỉ khi mở rộng đường băng RAF Scampton thì người ta mới ngoại lệ bẻ cong con đường đi
Xem thêm: Roman aqueduct
Đến giờ tim đường vẫn thẳng hàng hoàn hảo với hướng của các tháp nhà thờ. Quan niệm đất đai lấy nhà thờ làm trung tâm này khá giống với người La Mã