Công nghệ Northlight trong Alan Wake 2
(remedygames.com)- Đội Northlight của Remedy đã xây mới hoặc cải tổ mạnh các công nghệ cốt lõi, từ kiến trúc engine đến kết xuất, cho Alan Wake 2, đặt nền tảng để xử lý một thế giới lớn hơn và phức tạp hơn
- Mô hình game object dựa trên ECS mới tăng hiệu quả bộ nhớ và khả năng thực thi song song an toàn, cho phép hiện thực hóa một thế giới năng động hơn trên phần cứng có số lượng lõi CPU đa dạng
- Character controller dựa trên voxel và di chuyển NPC dựa trên hoạt ảnh giúp nhân vật di chuyển tự nhiên trong cả những không gian chật hẹp và phức tạp, còn công cụ Scattering hỗ trợ tạo thảm thực vật dày đặc
- Phần kết xuất xử lý được nhiều hình học hơn cùng các hiệu ứng sương mù và trong suốt nhờ pipeline do GPU dẫn dắt, mesh shader, culling meshlet, hoạt ảnh thảm thực vật trên GPU, HDR và kết xuất trong suốt MBOIT
- Bản PC tận dụng DLSS Frame Generation, DLSS Ray Reconstruction và Path Traced Indirect Lighting khi cấu hình phần cứng cho phép, mang lại ray tracing chính xác và vững chắc hơn so với Control
Công nghệ nền tảng gameplay và engine Northlight
- Trong quá trình phát triển Alan Wake 2, Northlight đã chuyển sang một framework game object hướng dữ liệu hoàn toàn mới
- Mô hình mới dựa trên hệ thống thực thể - thành phần (ECS)
- ECS cho phép lưu trữ hiệu quả về bộ nhớ và thực thi song song hiệu quả, an toàn
- Hỗ trợ hiệu quả nhiều mức số lõi trên phần cứng mục tiêu, từ đó cho phép tạo ra những thế giới lớn hơn, năng động hơn và phong phú hơn
- Công cụ Scattering cho bố trí thảm thực vật quy mô lớn cũng tận dụng lợi thế của ECS
- Có thể đặt nhiều entity hơn trong thế giới
- Giảm nhu cầu phải tạo giải pháp tùy biến riêng cho việc rải object
- ECS cũng tăng tốc vòng lặp lặp lại trong quá trình hiện thực gameplay
- Được dùng để triển khai Case Board, bảng trực quan nơi Saga thu thập chứng cứ
- Việc thêm hoặc chỉnh sửa hệ thống mới hay game object trở nên dễ hơn
- Hiệu năng khi lưu và tải Case Board cũng được cải thiện
Điều khiển nhân vật và di chuyển NPC
- Alan Wake 2 là tác phẩm khiến Northlight phải thiết kế lại phần điều khiển nhân vật
- Character controller dựa trên voxel mới cho phép điều hướng mượt mà trong môi trường chật hẹp, phức tạp và động
- Chuyển động nhân vật trở nên tự nhiên và linh hoạt hơn
- Trọng tâm là giảm các vấn đề nhân vật va vào hoặc mắc kẹt với object trong không gian hẹp
- Di chuyển của NPC cũng được đại tu đáng kể
- Mọi NPC đều dùng di chuyển dựa trên hoạt ảnh kết hợp với Motion Matching dựa trên khoảng cách mới
- Chất lượng di chuyển được nâng cao, đồng thời kiểm soát tốt hơn việc hoạt ảnh được dùng khi nào và như thế nào
Gió, thảm thực vật và công cụ scripting
- Hệ thống gió chân thực trong Alan Wake 2 tác động đến vật lý, hạt và vải
- Nhà thiết kế game có thể dễ dàng định nghĩa tốc độ gió khác nhau cho khu vực trong nhà và ngoài trời
- Việc chuyển đổi giữa hai khu vực diễn ra mượt mà và theo cách không lưu trạng thái
- Bên trong chiếc xe Saga và Casey lái có áp dụng wind box di động để đánh dấu khoang xe là vùng trong nhà không có gió
- Hệ thống gió được xây dựng trên phương pháp Signed Distance Fields(SDF)
- wind box được dùng như primitive để định nghĩa trường cường độ gió toàn cục mượt mà
- Nó hoạt động như khối cơ bản quyết định độ mạnh của gió ở từng vùng, tạo nên mẫu gió mượt mà giữa trong nhà và ngoài trời
- Công cụ Scattering mới được phát triển để tạo thảm thực vật và đạo cụ môi trường ở quy mô lớn
- Được dùng để tạo nên các môi trường dày đặc, phong phú và sống động hơn của Alan Wake 2
- Kết hợp với khoảng cách hiển thị (draw distance) dài hơn trước, giúp người chơi nhìn thấy object và chi tiết ở xa hơn
- Ngôn ngữ scripting đã được chuyển từ ngôn ngữ nội bộ sang Luau, ngôn ngữ scripting nhúng do Roblox phát triển từ Lua
- Luau phơi bày rộng rãi các chức năng của engine và hỗ trợ chỉnh sửa trực tiếp
- Được dùng cho nhiều hệ thống gameplay như level scripting và hệ thống nâng cấp vũ khí
- Đội ngũ làm game có thể prototype và hiện thực nhiều tính năng gameplay cũng như hiệu ứng VFX mà không cần sự trợ giúp của lập trình viên engine
- Remedy đã tạo extension language server riêng cho VS Code và tích hợp nó vào pipeline phát triển
- Việc áp dụng Luau đã loại bỏ khoảng 80.000 dòng mã không còn cần bảo trì
Kết xuất lấy GPU làm trung tâm và hoạt ảnh thảm thực vật
- Alan Wake 2 trình diễn pipeline kết xuất do GPU dẫn dắt mới của Northlight
- Có thể đưa nhiều hình học hơn vào thế giới mà không phải hy sinh hiệu năng
- Kết xuất do GPU dẫn dắt dùng mesh shader cho phép culling che khuất với độ chính xác đến từng pixel
- Mọi yếu tố trong cảnh đều có thể được dùng làm vật che khuất
- Nhờ khả năng chỉ vẽ những gì nhìn thấy, thế giới của Alan Wake 2 có nhiều chi tiết hình học hơn các bản phát hành trước
- Pipeline kết xuất không chỉ cull mesh mà còn cull cả meshlet
- meshlet là các nhóm tam giác nhỏ hơn, được tối ưu hóa, trích ra từ mesh
- Có thể thấy cấu trúc meshlet trong ví dụ vị trí cửa hàng tiện lợi ở Cauldron Lake
- Môi trường rừng nguyên sinh rộng lớn được hiện thực bằng hệ thống thảm thực vật dựa trên shader mới
- Hệ thống này dựa trên một hệ thống skinning mới chạy hoàn toàn trên GPU
- Hỗ trợ hoạt ảnh bone shader do artist điều khiển
- Trong Alan Wake 2, nó cho phép dùng rig kiểu nhân vật cho mọi thảm thực vật xuất hiện trong môi trường
- bone shader phơi bày API để artist tự viết mã shader và nối vào hệ thống nền
- Về mặt kỹ thuật, có thể áp dụng không chỉ cho thảm thực vật mà còn cho object lắc lư trên mặt nước hoặc dây điện rung trong gió
- Tại Cauldron Lake, gần 300.000 bone được xử lý mỗi frame
HDR, kết xuất trong suốt, VFX và ray tracing
- Alan Wake 2 hỗ trợ đầy đủ HDR
- Ngay cả với thiết lập mặc định, hình ảnh vẫn được tinh chỉnh để trông đẹp trên cả màn hình SDR và HDR
- Hỗ trợ HDR đòi hỏi một cách tiếp cận mới với tone mapping
- Việc chỉnh màu được thực hiện bởi colorist thực thụ theo chuẩn HDR, để giữ được phong cách nghệ thuật, bầu không khí và cách kể chuyện riêng trên cả HDR lẫn SDR
- Các cảnh sương mù dày dựa trên những cải tiến về kết xuất trong suốt
- Northlight đã đại tu hoàn toàn kết xuất trong suốt trong quá trình phát triển Alan Wake 2
- Dùng MBOIT(Moment-Based Order-Independent Transparency) để các bề mặt trong suốt có mức độ chi tiết khác nhau vẫn hòa trộn mượt mà
- Các phần tử trong suốt được vẽ bằng MBOIT ở ba mức độ phân giải
- Có thể blend liền mạch sương mù, hình học trong suốt và hiệu ứng
- Pipeline kiểm soát chi tiết hơn việc bố trí sương mù trong thế giới cũng được cải thiện
- Bằng cách kết hợp chiếu sáng trong suốt theo từng pixel với phản xạ chịu ảnh hưởng của sương mù, các phần tử đục và trong suốt hòa hợp với nhau tốt hơn so với các dự án trước
- Sương mù mô phỏng gần đúng tán xạ ánh sáng nhiều lần để tạo ra bầu không khí dày và chân thực
- Công cụ VFX dạng node của Northlight đã tiến bộ lớn cả về tính năng hỗ trợ lẫn hiệu năng runtime
- Artist VFX có thể tạo các hiệu ứng phức tạp và động như mưa, độ ướt, mô phỏng nước và vết thương trên nhân vật
- Công cụ VFX cũng hưởng lợi từ kết xuất do GPU dẫn dắt, cho phép xử lý nhiều hình học qua GPU
- Ví dụ, nó được dùng khi kết xuất các object rain blocker vào dynamic mask để mưa không hiện ra trong nhà hoặc dưới mái che
- Ray tracing hỗ trợ đầy đủ ray-traced direct lighting
- Kết hợp với Nvidia để ghép khử nhiễu được cải thiện và thuật toán chiếu sáng gián tiếp
- Ray tracing của Alan Wake 2 chính xác và vững chắc hơn những gì từng thấy ở Control
- Vì toàn bộ hoạt ảnh hình học thảm thực vật đều được tạo và mô phỏng bằng skinning, ray tracing giúp thảm thực vật hoạt ảnh trông đẹp hơn
- Người chơi PC có thể dùng các công nghệ Nvidia DLSS mới nhất nếu cấu hình GPU và CPU cho phép
-
DLSS Frame Generation
-
DLSS Ray Reconstruction
- Path Traced Indirect Lighting
-
1 bình luận
Ý kiến trên Hacker News
Nếu xét việc toàn bộ studio Remedy chỉ có quy mô vài trăm người, đây là công ty luôn làm được phần đồ họa vượt xa “hạng cân” của mình
Trong số các cái tên đang nổi, có vẻ chỉ Remedy và CD Projekt Red là đủ sức cạnh tranh với các engine lớn như Unreal, Unity, EA Frostbite về chất lượng hình ảnh và hiệu năng
Nếu bạn quan tâm đến đồ họa máy tính hoặc technical art, các bài trình bày GDC/SIGGRAPH của họ rất đáng xem
Alan Wake 2 về mặt kỹ thuật là một trong những game đẹp nhất từ trước đến nay, và cá nhân tôi cũng thấy vậy về mặt nghệ thuật. Việc hạ toàn bộ thiết lập xuống mức thấp mà game vẫn đẹp thực sự là một thành tựu, vì làm cho game vừa mở rộng được xuống phần cứng cũ mà vẫn đẹp là chuyện khó
Tuy nhiên, như các nhà phân tích kiểu Digital Foundry đã nói, nếu GPU không hỗ trợ mesh shader thì hiệu năng sẽ rất tệ. Bài này cũng nhắc đến việc dùng mesh shader cho culling; nhờ đó có thể làm các vật thể như cốc cà phê hay lốp xe tròn hoàn toàn, đồng thời tránh được kiểu vấn đề “mỗi NPC có 10.000 polygon răng trong miệng” làm hỏng hiệu năng của Cities Skylines 2. Đây cũng là một trong những lợi thế lớn mà Nanite của Unreal 5 mang lại
Có thể vẽ một đường nối khá rõ từ bản demo đáng kinh ngạc Second Reality năm 1993 đến Alan Wake 2 sau 30 năm
https://www.youtube.com/watch?v=iw17c70uJes
Vấn đề hiệu năng lớn hơn nhiều so với chuyện đơn giản là “render răng không nhìn thấy”: https://blog.paavo.me/cities-skylines-2-performance/
Ví dụ đó dễ hiểu, nhưng vấn đề lớn hơn là thiếu LOD và culling không đủ
CD Projekt Red chẳng phải đang chuyển các tác phẩm tương lai sang UE5 sao? Tiếc thật. Cyberpunk thực sự rất đẹp, và tôi từng muốn thấy một game multiplayer được làm bằng engine đó
CDPR có 1.236 người, DICE, hãng tạo ra Frostbite, có 714 người, còn Epic trước đợt sa thải gần đây có 2.200 người
Tất cả đều là số liệu theo Wikipedia
Nếu không phải những người đã định nghĩa và phổ biến đồ họa máy tính hiện đại, thì còn ai sẽ đẩy GPU tới giới hạn?
Ngay trong ví dụ đầu tiên, việc bàn chân trượt trên sàn, hoặc bị vật thể chặn không thể tiến lên nhưng vẫn trượt như đang đi tại chỗ, khá khó chịu
Tôi tò mò không biết đến khi nào những vấn đề kiểu này mới được giải quyết
Tất nhiên bản thân engine rất ấn tượng, còn hiệu ứng hình ảnh và hệ thống thì thuộc hàng tốt nhất tôi từng thấy
RDR2 có animation rất chân thực, nhưng đổi lại cảm giác điều khiển hơi “lềnh bềnh”
Cá nhân tôi thích kiểu chuyển động nhạy, khi nhấn sang trái thì nhân vật trên màn hình lập tức di chuyển sang trái. Một hệ thống animation trông thực tế hơn sẽ tạo độ trễ cho đến khi animation của chân “bắt kịp” đầu vào của người chơi
Nhưng raycasting liên tục và tính toán IK không miễn phí, nên phải đánh đổi với hiệu năng, và cũng xung đột với độ phản hồi
Nhiều game chọn di chuyển nhanh hơn và phản hồi điều khiển tốt hơn. Rốt cuộc về mặt kỹ thuật đây là vấn đề đã được giải quyết từ nhiều năm trước, nhưng như mọi yếu tố trong thiết kế game, đó là lựa chọn và đánh đổi
Naughty Dog cùng nhiều studio khác cũng dùng phương pháp này. Tuy vậy, như các bình luận khác nói, sự căng kéo căn bản giữa độ phản hồi và độ chính xác của animation vẫn còn đó
Trong Control, tác phẩm trước đó dùng Northlight, chuyện này ít thấy hơn [2]
[1] https://youtu.be/jQb07FHJ-bQ?t=628
[2] https://youtu.be/fcDK6tnx4vM?t=6700
Thực ra đó là về một thuật toán trộn các animation để quá trình chuyển tiếp trông tự nhiên
Thật mới mẻ khi thấy thứ gì đó không phải lại là một game khác dựa trên Unreal Engine
Sở hữu engine nội bộ riêng hẳn là cực kỳ khó; bản thân engine đã là một vấn đề, nhưng phần công cụ để tạo level, animation, v.v. có khi còn khó hơn
Dù vậy chắc cũng có lợi thế. Khi kiểm soát nhiều hơn kiến trúc cấp thấp, cơ hội tối ưu hóa cũng tăng lên. Với một engine đa dụng như Unreal thì chuyện đó khó hơn
Tôi rất muốn sớm được chơi game này
Tôi vẫn không hiểu vì sao việc biên dịch shader lại gây giật, và hầu hết các engine nội bộ khác không gặp vấn đề đó. Tôi cũng không hiểu vì sao đến giờ vẫn chưa cải thiện. Ngay cả nếu ngày mai có bản cập nhật cải thiện, cũng sẽ mất nhiều năm để các game tận dụng được nó
Khi đã có rất nhiều engine làm sẵn với cộng đồng lớn như hiện nay, muốn tự làm thì hẳn phải thật sự cần quyền kiểm soát hoàn toàn
Tôi thích giọng văn của bài viết
Chẳng hạn, tôi thích đoạn nói rằng đội marketing sẽ bảo “nhân vật phản hồi tốt hơn và sống động hơn bao giờ hết”, còn trong ghi chú phát triển nội bộ thì viết “nhân vật không va vào đồ vật hoặc bị kẹt trong không gian hẹp”
Cả câu đều là marketing, và yếu tố hài trong đó cũng là marketing
Tôi tò mò hiện Remedy nghĩ thế nào về việc dùng ngôn ngữ D trong hệ sinh thái của họ. Nếu họ vẫn dùng, tôi cũng muốn biết họ đã gặp khó khăn gì trong quá trình phát triển AW2
Tài liệu tham khảo: Using an Emerging Language in Quantum Break (https://ubm-twvideo01.s3.amazonaws.com/o1/vault/gdceurope201...)
DConf 2016: Quantum Break: AAA Gaming With Some D Code -- Ethan Watson (https://www.youtube.com/watch?v=7YjLW7anNfc)
Chắc chắn là hiện họ cũng không tìm lập trình viên D
Nếu muốn lần theo nguồn, có thể bắt đầu từ liên kết này: https://forum.dlang.org/post/lymybpygzfalbdgoaizr@forum.dlan...
Người từng thuyết trình về việc đó không còn làm ở đó nữa, và nhìn việc những nơi lớn như Facebook cũng ngừng dùng D thì có lẽ họ không dùng nữa. Dù vậy, tôi vẫn mong là mình bị chứng minh là sai
Khi người đó rời đi hoặc không còn ở vị trí có thể đóng góp/bảo trì, nó sẽ dần bị thay thế nếu không có sự ủng hộ và chấp nhận từ phần còn lại của đội ngũ và studio
Theo tôi nghe được thì từng có một người thúc đẩy việc viết bằng D, nhưng tôi không biết người đó còn ở lại hay không
Tôi nhớ là một phần đội từng tạo nội dung hàng đầu trên Unreal Marketplace cũng đã tham gia trò chơi này
https://mawiunited.com/
Nội dung rất tuyệt. Mong sẽ có thêm nhiều studio làm nội dung UE5 theo kiểu này
Việc họ chuyển sang dùng Luau của Roblox làm môi trường scripting khá thú vị
Tôi luôn thắc mắc vì sao trong công nghệ game lại có nhiều nơi dùng Lua cho scripting đến vậy. Đặc biệt là ngay cả khi thiết kế từ đầu
Bất cứ thứ gì có thể dùng C runtime đều có thể nhúng scripting Lua
Vì thế nó đã được dùng như lựa chọn mặc định từ Baldur’s Gate 1 đến Warcraft III, rồi các tựa game hiện đại như Roblox
Chuyển động nhân vật vẫn có cảm giác khá thung lũng kỳ lạ
Trong video “bộ điều khiển nhân vật dựa trên voxel”, dáng đi trông như đang trượt, và vài giây đầu của “di chuyển NPC” cũng nhìn khá gượng
Có lẽ vì mỗi bước chân hoàn toàn giống nhau và đều dùng cùng một độ dài sải chân. Vì vậy các nhân vật di chuyển khớp nhau một cách kỳ cục
Ở nửa sau video, khi các nhân vật riêng lẻ chuyển giữa đi bộ và chạy, chuyển động đa dạng hơn nên trông thực tế hơn nhiều. Tôi tự hỏi vì sao việc đưa thêm nhiều khác biệt nhỏ trong chuyển động nói chung lại khó đến vậy
Nhưng để củng cố điểm đó, gần như toàn bộ NPC thân thiện đều đứng yên. Khi kẻ địch lao tới trong khu vực thù địch, bạn sẽ không để ý chúng đi như thế nào, mà dù sao chúng cũng bị sương mù che khuất
Cá nhân tôi xem Control là bản demo công nghệ cho tất cả những thứ này. Điều đó cũng giải thích vì sao số lượng kẻ địch ít hơn nhiều và game được xây dựng như một câu chuyện kinh dị
Tức là họ có game engine ECS, renderer cấp AAA, công nghệ tương tự Nanite, engine scripting dựa trên Lua, và hoạt ảnh khuôn mặt tầm Hollywood?
Họ nên phát hành engine. Nó có thể trở thành đối thủ mạnh của Unreal. Nhờ ECS nên có khả năng mở rộng tốt hơn, và cũng dễ viết bằng Luau hơn
Tôi đã đau đớn nhận ra điều đó khi định mua game trên Linux. Vì vậy nếu cạnh tranh với Unreal thì nhiều khả năng mối quan hệ phía đó sẽ xấu đi
Nhưng biến phần mềm nội bộ thành sản phẩm để người khác sử dụng lại là chuyện hoàn toàn khác
Đúng là Remedy đã áp dụng pipeline meshlet, nhưng trong rendering tiên tiến thì giờ nó gần như đã thành xu hướng chủ đạo. Tôi chưa thấy chỗ nào nói rằng họ dùng compute shader để thực sự render các tam giác nhỏ như Nanite, dù cũng có thể tôi đã bỏ sót
Giờ đến Alan Wake 2 thì tắt ray tracing rồi mà thiết lập High cũng chỉ vừa chạy nổi
Về mặt hình ảnh thì đây là một engine đáng kinh ngạc, nhưng cá nhân tôi thấy yêu cầu cấu hình quá cao
Kiến trúc Entity-Component-System (ECS) cũng được dùng trong các game engine mã nguồn mở còn trẻ như Bevy[1]
Dù đã lâu không làm phát triển game, nhưng khi nghe nói về một kiến trúc giúp gỡ bỏ kiểu hướng đối tượng nặng nề và phức tạp thường thấy trong game, tôi lại thấy muốn thử nhúng tay vào lần nữa
[1]: https://bevyengine.org/
Nó bắt đầu có đà từ đầu những năm 2000, và hiện nay tuy không phổ biến đến mức đại trà, nhưng đã được dùng từ lâu như một nền tảng cơ bản; một số engine mã nguồn mở cũng vậy
Ví dụ có thể xem https://github.com/Adelost/entity-component-systems-study#re...