• Khám phá. Học hỏi. Phát triển. Mạng lưới truyền thông Fastlane

  • thương mại điện tửFastlane
  • POD Đường nhanh
  • SEOfastlane
  • Cố vấnFastlane
  • Người trong cuộc Fastlane

Đằng sau quá trình chế tạo: Quả cầu BFCM 2025 trong một máy chơi pinball 🌎🕹️ – Shopify

Đằng sau quá trình chế tạo: Quả cầu BFCM 2025 trong một máy chơi pinball 🌎🕹️ – Shopify

Hàng năm vào dịp cuối tuần Black Friday và Cyber ​​Monday (BFCM), chúng tôi ghi nhận lượng truy cập và doanh số bán hàng tăng đột biến hơn bao giờ hết. Chúng tôi chuẩn bị rất lâu và kỹ lưỡng. Đây quả là một kỳ tích kỹ thuật đồ sộ, nhưng điều kỳ diệu thực sự nằm ở những người kinh doanh đứng sau những con số.

Mỗi đơn hàng đồng nghĩa với việc một doanh nhân đã thực hiện được một giao dịch bán hàng. Có thể đó là giao dịch đầu tiên của họ. Cũng có thể là giao dịch thứ 10,000. Dù thế nào đi nữa, bên cạnh việc duy trì hiệu suất nền tảng, chúng tôi muốn thể hiện ý nghĩa đằng sau mỗi đơn hàng. Chúng tôi làm điều này bằng cách sử dụng... quả địa cầu trực tiếp, nơi bạn có thể theo dõi hoạt động thương mại diễn ra trong thời gian thực trên toàn thế giới.

Năm 2025, quả địa cầu của chúng ta… giống như một máy chơi pinball. Thực ra, nói đúng hơn thì quả địa cầu là… một máy chơi pinball. ở trong Một máy chơi pinball. Nếu điều đó nghe có vẻ nực cười, thì đúng là vậy, và nó thật tuyệt vời. Đó là ví dụ hoàn hảo về... khám phá không nghiêm túc trong hành động.

Kỹ sư trưởng Daniel Beauchamp cho biết ông đã dành 400 giờ để chế tạo máy chơi pinball trước khi nó đi vào hoạt động, vì vậy ông có một vài điều muốn chia sẻ về cách ông và nhóm của mình đã chế tạo nó:

Shopify Live Globe trở lại vào ngày Black Friday này!

Và chúng tôi đã tạo ra một trò chơi bắn bi từ đó.

Trò chơi chạy ở tốc độ 120 khung hình/giây trên trình duyệt với môi trường 3D đầy đủ, công cụ vật lý, hỗ trợ VR và nhiều hơn nữa. 👀 pic.twitter.com/dSq5ntRqpp

- Daniel Beauchamp (@pushmatrix) Tháng Mười Một 28, 2025

Đây là một ứng dụng three.js được xây dựng bằng react-three-fiber. Bộ công nghệ yêu thích của chúng tôi.

Khi người bán thực hiện giao dịch bán hàng, thông tin sẽ hiển thị trên bản đồ này chỉ vài giây sau đó. Mỗi đường cong trên bản đồ thể hiện một đơn đặt hàng thực sự. Chúng tôi sử dụng các sự kiện do máy chủ gửi để truyền dữ liệu.

Đây là ứng dụng three.js được xây dựng bằng react-three-fiber. Bộ công nghệ yêu thích của chúng tôi.

Khi người bán thực hiện giao dịch bán hàng, thông tin sẽ hiển thị trên bản đồ này chỉ vài giây sau đó. Mỗi đường cong thể hiện một đơn đặt hàng thực tế. Chúng tôi sử dụng các sự kiện được gửi từ máy chủ để truyền dữ liệu. pic.twitter.com/UbI6iZ3oMu

- Daniel Beauchamp (@pushmatrix) Tháng Mười Một 28, 2025

Mỗi bàn chơi pinball đều cần một màn hình ma trận điểm tốt. Chúng tôi đã viết một shader để phát lại các bảng sprite 128×32 pixel. Việc tạo ra những hình ảnh động này thật sự rất thú vị.

Mỗi bàn chơi pinball đều cần một màn hình ma trận điểm tốt. Chúng tôi đã viết một shader có thể phát lại các sprite sheet có kích thước 128×32 pixel.

Việc làm những đoạn hoạt hình này thật là thú vị. pic.twitter.com/TGELPsnVx8

- Daniel Beauchamp (@pushmatrix) Tháng Mười Một 28, 2025

Chúng tôi muốn tạo ra một trò chơi tôn vinh những khoảnh khắc của người bán hàng trong thời gian thực. Vì vậy, mỗi khi đạt được một cột mốc nào đó, chẳng hạn như 10, 100, 1 triệu đơn hàng, bảng trò chơi sẽ phản ứng. Khi người bán hàng của chúng tôi thắng, bạn cũng thắng.

Ngoài ra còn có một quả bóng đa năng tuyệt vời trong đợt bán đầu tiên:

Chúng tôi muốn tạo ra một trò chơi tôn vinh những khoảnh khắc của người bán hàng trong thời gian thực. Vì vậy, mỗi khi đạt được một cột mốc nào đó, chẳng hạn như 10, 100, 1 triệu đơn hàng, bảng trò chơi sẽ phản ứng.

Khi các thương nhân của chúng ta thắng, bạn cũng thắng.

Ngoài ra còn có một phiên bản multiball tuyệt vời trong lần bán đầu tiên. pic.twitter.com/VBNZ7gLPrp

- Daniel Beauchamp (@pushmatrix) Tháng Mười Một 28, 2025

Vì lý do hiệu năng, toàn bộ phần vật lý được thực hiện ở dạng 2D. Mặc dù 3D trông thực tế hơn, nhưng việc tiêu tốn thêm chu kỳ CPU sẽ không đáng.

Chúng tôi đã sử dụng phiên bản JavaScript của Rapier2D và thuật toán raycast xuống sàn để xử lý các đoạn dốc và độ cao. Điều này đã giảm độ trễ vật lý từ 2ms xuống còn 0.2ms.

Vì lý do hiệu năng, toàn bộ phần vật lý được thực hiện ở dạng 2D. Mặc dù 3D trông thực tế hơn, nhưng việc tiêu tốn thêm chu kỳ CPU sẽ không đáng.

Chúng tôi sử dụng phiên bản JavaScript của Rapier2D và raycast xuống sàn để xử lý độ dốc và độ cao. Điều này đã giảm bước vật lý từ 2ms xuống còn 0.2ms. pic.twitter.com/UyzWVhPHK9

- Daniel Beauchamp (@pushmatrix) Tháng Mười Một 28, 2025

Khung cảnh có rất nhiều thứ để tương tác. Có một màn hình máy tính để bàn mà bạn có thể sử dụng để xem thời gian thực. Shopify Số liệu thống kê về cơ sở hạ tầng và cả những điều thú vị bất ngờ nữa.

Khung cảnh có rất nhiều thứ để tương tác. Có một màn hình máy tính để bàn mà bạn có thể sử dụng để xem thời gian thực. Shopify Số liệu thống kê về cơ sở hạ tầng và cả những điều thú vị bất ngờ nữa.

Bạn có thể tìm thấy tất cả không? Gợi ý: 4364 pic.twitter.com/w54ZNl9shW

- Daniel Beauchamp (@pushmatrix) Tháng Mười Một 28, 2025

Và tất nhiên, bàn chơi pinball hoạt động trong môi trường thực tế ảo tăng cường (AR), nhờ thư viện @react-three/xr tuyệt vời. Chỉ cần khoảng 100 dòng mã để kết nối. Mọi người có thể tải nó lên thiết bị đeo thực tế ảo yêu thích của mình để chơi trong không gian riêng!

Và tất nhiên, bàn chơi pinball hoạt động được trong AR! Cảm ơn rất nhiều! @phản ứng- Thư viện three/xr. Chỉ cần khoảng 100 dòng mã để kết nối.

Hãy tải nó vào tai nghe yêu thích của bạn để chơi trong không gian riêng của bạn! pic.twitter.com/PYJHQ7Ws2V

- Daniel Beauchamp (@pushmatrix) Tháng Mười Một 28, 2025

Ngoài việc chơi trò chơi pinball, bạn có thể khám phá và thực hiện những việc vô cùng quan trọng như thêm dứa vào bánh pizza, làm cho con vịt cao su kêu, và tìm các mật mã bí mật được giấu khắp màn chơi.

Một số thống kê kỹ thuật theo thời gian thực được hiển thị trên màn hình máy tính:

Ai mà có thể cưỡng lại việc nhấp chuột vào thư mục có tiêu đề "Hậu trường" chứ?

Tệp README của nhóm: “Sẽ chẳng ai đọc blog này đâu.”

Tôi, dù sao cũng viết ra: 🫡

Tiếp theo… Đây là một số nội dung đã được giấu kín trong các tập tin đó.

Ghi chú thiết kế

Phần này được viết bởi Brennan Letkeman, nhà thiết kế sản phẩm của công ty.

Những thứ triết học nhàm chán

Trước dự án này, thực ra tôi không biết nhiều về trò chơi pinball. Tất nhiên, tôi biết nó là gì và đã từng chơi ở một số khu trò chơi điện tử, nhưng trong quá trình thiết kế chiếc bàn này, chúng tôi thực sự đã đi sâu vào một thế giới thú vị và quyến rũ của những người thực sự yêu thích trò chơi này.

Với tư cách là một nhà thiết kế, thật thú vị khi được hòa mình vào các tiểu văn hóa và cố gắng tìm hiểu điều gì tạo nên sức hút của chúng. Điều này thường hướng đến khía cạnh thẩm mỹ – bạn thường thấy những gì và làm thế nào để tái tạo chúng – nhưng đó chỉ là sản phẩm của đám đông; phần thú vị thực sự nằm ở chỗ họ tạo ra những sản phẩm đó bằng cách nào, tại sao và bằng cách nào, triết lý, cá tính và mục tiêu nào đã dẫn họ đến những sản phẩm đó.

Đối với tôi bây giờ, trò chơi pinball là sự thể hiện niềm vui thông qua sự chính xác giữa sự hỗn loạn. Khi mới chơi, bạn chỉ cố gắng giữ cho quả bóng sống đủ lâu để không bị mất tiền xu, nhưng khi bạn tích lũy được những kỹ năng cơ bản đó, bạn bắt đầu mở khóa khả năng điều khiển bóng nâng cao hơn và nhận ra rằng mỗi bàn chơi đều có một nhịp điệu riêng. Sau đó, bạn bắt đầu nhận ra rằng các bàn chơi khác nhau từ các thời kỳ, công ty và nhà thiết kế cụ thể khác nhau đều mang đến những cảm nhận khác nhau – bạn bắt đầu có ý kiến ​​và sở thích riêng về máy này hay máy kia. Bạn có một phong cách chơi riêng. Bạn thích và không thích một số yếu tố nhất định.

Mượn một thuật ngữ từ giới game thủ, trò chơi pinball thường là trò chơi đòi hỏi thực hiện những cú đánh chính xác đến từng khung hình. Một số bàn chơi có độ khó dễ hơn, nhưng ở đỉnh cao của đường cong kỹ năng, có những cú đánh mà bạn chỉ có thể thực hiện nếu nhấn cần gạt chính xác đến từng mili giây, và đôi khi là nhiều lần liên tiếp. Chắc chắn rồi, đây là một trò chơi mà các yếu tố vật lý ngẫu nhiên xảy ra, nhưng nó cũng là một trò chơi mà bạn hoàn toàn kiểm soát được thời gian. Sự luân phiên giữa kiểm soát và may rủi, theo tôi, là một trong những phần độc đáo nhất của pinball với tư cách là một thể loại, và là điều tạo nên trạng thái "nhập tâm" khi chơi.

Điều chúng tôi muốn

Tất cả chúng tôi đều đồng ý rằng chúng tôi thích những pha bóng dài, mượt mà hơn là những pha bóng ngắn, dứt khoát của một số trò chơi khác. Chúng tôi không thích những pha khóa bóng, vì nó làm gián đoạn nhịp điệu. Chúng tôi thích những đường dốc lớn và cơ hội thực hiện cú đánh thứ ba bằng cần gạt, nơi bạn đi hết vòng quanh đỉnh và sau đó – nếu căn thời gian chính xác – sẽ có vị trí hoàn hảo để cần gạt thứ ba nhắm trúng mục tiêu mà bình thường không thể với tới.

Nhưng chúng ta cũng có cả một thế giới ảo để thỏa sức sáng tạo, vậy nên câu hỏi đặt ra là: chúng ta còn có thể làm gì khác với thế giới này?

Kỷ nguyên ngầm

Một trong những điểm bất ngờ lớn đầu tiên là bo mạch ban đầu được "giấu kín" và có một bo mạch thứ hai hoàn chỉnh được giấu "bên trong" thùng máy.

Tôi nghĩ chúng ta sẽ thiết kế theo chủ đề phù hợp, với dây điện, bánh răng và cơ cấu xếp dọc các bức tường của không gian chơi, đèn pha chiếu sáng ấn tượng ở giữa, và một hệ thống trò chơi nhỏ kiểu WarioWare, trong đó mỗi khi bạn rơi xuống đó, chúng ta sẽ chọn ngẫu nhiên một loạt các hoạt động bắn kỹ năng đơn giản chỉ cần một động từ.

Những thứ đầu tiên, chỉ để có cái gì đó để làm việc và mày mò, là một khung thành bóng đá có thủ môn di chuyển sang trái và phải, và một rổ bóng rổ theo kiểu Shaq Attack năm 1995.

Thật là chán.

Đã có một vài vấn đề:

Việc có cả một chiếc bàn kích thước tiêu chuẩn để tạo ra nội dung cho một trò chơi nhỏ thật kỳ lạ và không đúng lắm. Bạn có thể thu nhỏ khu vực chơi và trang trí xung quanh, nhưng rồi bạn lại tự hỏi tại sao mình lại phải làm vậy.

Nhưng chúng ta cũng phải hỗ trợ thiết bị di động và thực tế ảo, những nền tảng mà việc di chuyển camera tùy ý là rất khó khăn hoặc thậm chí là không thể.

Vậy là chúng tôi đã thử theo hướng đó trong một hoặc hai tuần và cuối cùng đã quyết định loại bỏ nó.

Trò chơi nhỏ dạng mô-đun

Tuy nhiên, đến lúc đó, chúng tôi đã thích ý tưởng này và có một danh sách gồm nửa tá trò chơi nhỏ mà chúng tôi rất hào hứng, vì vậy chúng tôi cần tìm một nơi để đưa chúng vào.

Trong một số bản phác thảo ban đầu của tôi, tôi đã vẽ một vòng quay ngựa gỗ bên dưới quả địa cầu, và đó chỉ là một ý tưởng thoáng qua: ý tưởng là vì chúng ta đã có quả địa cầu lớn ở đó (và chúng ta luôn có quả địa cầu ở đó, vì những lý do hiển nhiên) nên chúng ta có thể có một tháp pháo lớn quay quanh nó và chứa nhiều mục tiêu khác nhau để bắn.

Điều chúng ta học được là việc chỉ cần một dàn nhân vật luân phiên thực hiện các mục tiêu hành động đơn lẻ thực sự khá hiệu quả. Điều chúng ta cũng học được là việc khiến tất cả chúng hoạt động cùng một lúc và ở một vị trí cố định lại khá khó khăn.

Ví dụ, tòa tháp bán hàng đầu tiên rất cao – làm thế nào để chúng ta có thể xoay nó bên dưới các đường dốc và đường ray?

Nhưng nếu nó trồi lên từ sàn nhà…

Và thế là trò chơi nhỏ dạng mô-đun ra đời.

Nó tiện lợi vì nhiều lý do, nhưng một lợi ích miễn phí là chúng cực kỳ dễ thay thế, dễ hơn nhiều so với việc phải cố định các bộ phận của bo mạch trong quá trình phát triển. Tính cố định có ảnh hưởng đến mô hình, cũng như quá trình nung chảy ánh sáng, vật liệu và lập trình logic cho từng bộ phận, v.v. Tính mô-đun thật tuyệt vời.

Một lợi ích khác là nó cho phép chúng ta giải phóng vị trí tương đối của mỗi trò chơi nhỏ – cột mốc có thể làm gián đoạn trò chơi nhỏ số 1, và khi bạn hoàn thành trò chơi đó, bạn có thể chuyển sang trò chơi nhỏ số 3, rồi khi giao dịch đầu tiên diễn ra thì trò chơi quay lại số 3, bạn thắng trò chơi đó và chuyển sang số 4 hoặc số 5, v.v.

Đường dốc rất khó đi

Ban đầu tôi đã thiết kế những đường dốc phức tạp phân nhánh vào và ra khỏi nhau, điều này thực sự phổ biến ở nhiều loại bàn chơi, nhưng việc lập trình với công cụ vật lý 2D của chúng tôi cực kỳ khó khăn vì không có trọng lực thực sự - không có gì kéo các quả bóng xuống (vào trong bàn).

Tôi chắc chắn rằng đã có những cách để khắc phục điều này trong lập trình, nhưng sự thật là nó không mang lại nhiều giá trị cho trò chơi.

Thay đổi lớn nhất mà chúng tôi đã thực hiện (và bạn sẽ thấy đây là một sự thay đổi cốt lõi trong các bản vẽ và phác thảo) là việc bổ sung lại làn đường trung tâm chính vào khu vực cản trước.

Nó đã thay đổi hoàn toàn bầu không khí.

Ban đầu, khu vực giữa đó chỉ có vài lối vào dốc và một số bức tường. Chúng tôi nghĩ rằng đây là cách bố trí các yếu tố khá bình thường trên những bàn chơi thực tế, nhưng vì lý do nào đó, nó lại tạo cảm giác ngột ngạt và khó chịu. Bởi vì đó là vị trí tự nhiên mà những cú đánh bằng cần gạt của bạn thường kết thúc, và bởi vì nó ngay lập tức làm bạn dừng lại, ngay cả khi có mục tiêu và những thứ để nhắm trúng, cảm giác chủ đạo của trò chơi không phải là sự trôi chảy mà là sự cản trở.

Việc mở rộng lối đi theo một con đường khác dẫn bạn lên cao và tránh xa những cần gạt là một luồng gió mới cho chiếc bàn này.

Các đoạn dốc khác được di chuyển xung quanh, nhưng dù sao chúng cũng chỉ là những đoạn dốc mà thôi. Tôi thích việc chúng ta có được một đoạn dốc dễ hơn và một đoạn dốc khó hơn một cách tự nhiên.

Trò chơi pinball mà cô ấy chơi

Phần còn lại hầu như chỉ là các thao tác tiêu chuẩn của trò chơi pinball.

Ban đầu chúng tôi đã suy nghĩ rất nhiều về việc tạo ra những thứ kỳ lạ – trọng lực ngang, hệ thống nghiêng trái phải, bàn xoay và các bức tường trở thành sàn nhà mới, phần ngầm như đã đề cập ở trên, vân vân.

Nhưng cuối cùng, đôi khi bạn chỉ cần làm một việc bình thường thật tốt mà thôi.

Tôi rất vui vì sau khi đã dành hàng trăm giờ để chế tạo (và cũng ngần ấy giờ để thử nghiệm), chúng tôi đã chọn một chiếc bàn bình thường.

Nó cho phép bạn tập trung sâu vào những chi tiết quan trọng thay vì chỉ cố gắng tìm hiểu những chi tiết mới lạ.

Ghi chú kỹ thuật

Kỹ sư cao cấp Diego Macario Bello và kỹ sư ưu tú Daniel Beauchamp đã chia sẻ một số hiểu biết về kỹ thuật trong một thư mục "hậu trường" khác. Dưới đây là những gì họ đã viết:

Thoạt nhìn, trò chơi pinball rất đơn giản, nhưng khi tìm hiểu sâu hơn, bạn sẽ thấy vô số hệ thống cần phối hợp với nhau để tạo nên trải nghiệm thú vị. Ví dụ như:

  • Một mô phỏng vật lý cần giải quyết các va chạm tốc độ cao với vô số vật thể như cần gạt, tấm chắn bật, súng cao su, bệ phóng, mục tiêu quay, v.v.
  • Một hệ thống chiếu sáng cần điều khiển hàng chục đèn (trong trường hợp của chúng tôi là 86 đèn) để trình chiếu các hình ảnh động thú vị và truyền đạt các thông tin như nhiệm vụ, phần thưởng, sự kiện đặc biệt, v.v.
  • Một hệ thống âm thanh cần phát cả âm thanh cơ học và điện tử để tạo ra trải nghiệm hấp dẫn.
  • Màn hình ma trận điểm (DMD) cần hiển thị hàng chục hình ảnh động khác nhau.

Việc các máy chơi pinball được chế tạo ngoài đời thực quả là một điều kỳ diệu sau khi đã vượt qua mọi trở ngại để mô phỏng chúng bằng phần mềm.

Vật lý

Khi mới bắt đầu dự án này, chúng tôi đã sử dụng công cụ vật lý 3D Rapier. Chúng tôi nghĩ rằng việc sử dụng công cụ 3D sẽ giúp dễ dàng xử lý những thứ như đường dốc. Bạn chỉ cần tạo một collider cho đường dốc và cho phép công cụ vật lý lăn quả bóng lên xuống đường dốc.

Khi bối cảnh trở nên phức tạp hơn, chúng tôi nhận thấy máy chơi pinball của mình không còn hoạt động tốt trên các thiết bị di động cũ. Các phép toán cần thiết để thực hiện mô phỏng vật lý 3D quá phức tạp đối với các thiết bị đó, đặc biệt là khi các sự kiện như chơi nhiều bóng được kích hoạt.

Vào thời điểm đó, chúng tôi đã đưa ra quyết định khó khăn là chuyển sang sử dụng công cụ vật lý 2D Rapier. Chúng tôi phải chỉnh sửa lại rất nhiều mã nguồn, nhưng chúng tôi biết rằng cuối cùng điều đó sẽ xứng đáng.

Có thể bạn sẽ thấy điều này khá bất ngờ. Làm thế nào quả bóng của chúng ta có thể lên xuống các đường dốc và được Shoppy ném đi nếu chúng ta đang sử dụng công cụ vật lý 2D?

Để làm được điều đó, chúng tôi phải tạo ra một hệ thống cảm biến kích hoạt và vô hiệu hóa các bộ phận va chạm khi quả bóng di chuyển. Ví dụ, khi quả bóng chạm vào lối vào của một đường dốc, tất cả các bộ phận va chạm trên bàn đều bị vô hiệu hóa ngoại trừ các bộ phận va chạm của đường dốc. Khi quả bóng chạm vào lối ra của đường dốc, chúng tôi làm ngược lại. Tất cả đều là một màn trình diễn được dàn dựng tỉ mỉ.

Việc chuyển sang đồ họa 2D ban đầu khá khó khăn, nhưng mọi thứ đã tốt hơn sau đó. Ngay cả khi có 6 quả bóng trên bàn với tính năng phát hiện va chạm liên tục (CCD) được bật, bước xử lý vật lý của chúng tôi trung bình chỉ dài 0.2 mili giây, đủ thời gian để hiển thị những hiệu ứng thú vị như pháo hoa!

Rendering

Về phía hiển thị, toàn bộ trang web này được xây dựng bằng Three.js và React-Three-Fiber (R3F). Three.js là một công cụ hiển thị tuyệt vời, và khả năng kết hợp được bổ sung bởi R3F giúp dễ dàng xây dựng bất kỳ hệ thống nào bạn có thể tưởng tượng.

Hầu hết các vật liệu trong cảnh của chúng ta đều là MeshBasicMaterials vì hệ thống chiếu sáng đã được xử lý sẵn trong Blender. Điều này rất tốt cho hiệu năng!

Quản lý nhà nước

Để quản lý trạng thái, chúng tôi sử dụng zustand, có lẽ là một trong những dự án mã nguồn mở tốt nhất hiện nay.

Ánh sáng máy chơi pinball

Một trong những phần quan trọng nhất để làm cho bàn chơi trở nên sống động là thêm hệ thống chiếu sáng động. Sự chuyển động của ánh sáng nhấp nháy và rung động là đặc trưng của trò chơi pinball. Nhưng bàn chơi của chúng tôi có tổng cộng 85 đèn, điều này là không thể thực hiện được bằng cách sử dụng kỹ thuật dựng hình đơn giản và ánh sáng điểm. Chúng tôi phải tìm ra cách để tạo hiệu ứng động và hiển thị hệ thống chiếu sáng trên bàn.

Để làm điều này, chúng tôi đã sử dụng hai họa tiết cho sàn nhà; một họa tiết với màu nền và một họa tiết chỉ chứa các nguồn sáng phát quang. Sau đó, chúng tôi tạo ra một họa tiết riêng biệt để che đi từng nguồn sáng phát quang. Kênh “R” mã hóa ID của nguồn sáng:

Điều này có nghĩa là với mỗi pixel trong mặt nạ của chúng ta, chúng ta có thể xác định nó thuộc về nguồn sáng nào.

Chúng ta có thể sử dụng chỉ số ánh sáng đó để bật và tắt ánh sáng một cách có điều kiện trong bản đồ phát xạ:

lightValues ​​là một mảng số thực đồng nhất chứa tất cả các giá trị ánh sáng hiện tại của chúng ta. Chúng tôi đã phát triển một hệ thống hoạt ảnh cho phép chúng ta phát các hiệu ứng ánh sáng khác nhau và điều khiển mảng lightValues ​​đó.

Màn hình ma trận chấm

Màn hình ma trận điểm, hay DMD, có một nhiệm vụ cực kỳ quan trọng. Nó không chỉ phải hiển thị điểm số trò chơi pinball của bạn mà còn phải hiển thị số liệu thống kê doanh số bán hàng trực tiếp. Chúng tôi đã tạo ra một hệ thống đơn giản có thể tải các bảng hình ảnh riêng lẻ và sau đó hợp nhất chúng thành một bảng hình ảnh khổng lồ.

Mỗi khung hình, CPU sẽ xác định phần nào của bảng sprite cần hiển thị và tải các offset texture lên GPU. Kích thước khung hình là 128×32, giống như máy DMD đời cũ. Một shader sẽ điều khiển việc chọn đúng phần của hình ảnh và hiển thị nó, cùng với việc áp dụng hiệu ứng chấm để tạo ra giao diện hiển thị ma trận đặc trưng.

Của chúng tôi ngăn xếp xử lý hậu kỳ Việc sử dụng hiệu ứng bloom đã thực sự nâng tầm hiệu ứng lên một cấp độ mới bằng cách tạo ra ánh sáng ấm áp.

Những trò chơi nhỏ

Một điều mà chúng tôi khá tự hào là hệ thống trò chơi nhỏ trong máy chơi pinball của mình. Có năm trò chơi nhỏ khác nhau và hai trò chơi nhỏ đặc biệt được kích hoạt bằng dữ liệu trực tiếp.

Khi người dùng hoàn thành một trò chơi nhỏ, trò chơi đó sẽ được hạ xuống lòng đất và một trò chơi mới sẽ nổi lên. Quá trình này nhanh chóng và thú vị, nhưng chúng tôi đã phải xem xét nhiều trường hợp ngoại lệ trong quá trình xây dựng. Ví dụ:

  • Nếu có một quả bóng trong khu vực trò chơi nhỏ khi bạn hoàn thành một trò chơi nhỏ thì sao? Chúng ta cần đợi cho đến khi nó ra khỏi khu vực đó trước khi thực hiện việc hoán đổi.
  • Vậy nếu bạn có 6 quả bóng đang được sử dụng thì sao? Khi đó, chúng ta cần kiểm tra xem không có quả bóng nào nằm trong khu vực trò chơi nhỏ trước khi thực hiện thao tác đổi bóng.

Hậu quả thật khủng khiếp. Hãy để ý, khi một cuộc trao đổi bắt đầu, chúng tôi nhanh chóng dựng một hàng rào kim loại phía trước khu vực trò chơi nhỏ. Đó là để ngăn bạn nghịch ngợm ở đó khi cuộc trao đổi đang diễn ra!

Ghi chú cá nhân

Tất cả mọi người trong nhóm này đều từng chơi trò chơi pinball Space Cadet khi còn nhỏ vào những năm 90. Nhiều người trong chúng tôi đã chơi nó trong phòng máy tính của trường tiểu học, nhưng không ai trong chúng tôi tưởng tượng rằng một ngày nào đó chúng tôi sẽ cố gắng tạo ra một trò chơi giống như Space Cadet.

Việc chế tạo một máy chơi pinball vừa là một trải nghiệm đầy thử thách, vừa là một phần thưởng xứng đáng. Ban đầu, mọi thứ có vẻ thật dễ dàng.

Chúng tôi hy vọng bạn sẽ thích chơi trò chơi này nhiều như chúng tôi đã thích thú khi tạo ra nó.

Ghi chú dữ liệu

Một vài nhận định về dữ liệu từ Kỹ sư dữ liệu chính Joir-dan Gumbs, Kỹ sư dữ liệu cấp cao Trish Gillett và Kỹ sư dữ liệu Dimitri Yacoub:

Những gì bạn thấy trên BFCM Globe là hoạt động thương mại ở quy mô toàn cầu, được hỗ trợ bởi các đường dẫn dữ liệu xử lý luồng được xây dựng để đáp ứng sự kiện cuối tuần lớn nhất trong năm của Shopify.

Mỗi cung tròn đại diện cho một đơn đặt hàng thực tế, vẽ ra một đường đi theo đường chim bay từ cửa hàng đến người mua. Về mặt kỹ thuật, các pipeline của Apache FlinkSQL xử lý một lượng lớn sự kiện để xác định các cung tròn và tính toán các chỉ số bán hàng và người mua, và Grafana cung cấp số liệu thống kê cho cơ sở hạ tầng của chúng tôi.

Dữ liệu được gửi qua trình duyệt bằng Server Sent Events. Bạn có thể mở tab mạng và xem dữ liệu về số liệu thống kê cơ sở hạ tầng, chỉ số bán hàng và các dự báo của chúng tôi.

Trực tiếp trên Sphere

Nếu bạn chưa nhận ra thì chúng tôi rất chú trọng đến quả địa cầu. Vì vậy, năm thứ ba liên tiếp, chúng tôi đã trình chiếu hình ảnh quả địa cầu trên màn hình LED lớn nhất thế giới: Exosphere ở Las Vegas.

— tobi lutke (@tobi) Tháng Mười Một 28, 2025

Thông tin thú vị: Tất cả những cảnh quay về Sphere này đều được ghi lại bằng máy bay không người lái và trực thăng chỉ bốn giờ trước khi video được phát sóng. Đoạn phim được chuyển đến phòng dựng phim tạm thời của chúng tôi trong một phòng khách sạn Wynn, được chỉnh sửa với tốc độ ánh sáng, và sau đó được đăng tải ngay trong ngày. Đây chỉ là một trong nhiều thử thách thú vị mà nhóm của chúng tôi đã vượt qua trong tháng Black Friday và Friday the 1007 (BFCM) năm nay.

Vậy là phần tổng kết quá trình xây dựng quả địa cầu trực tiếp năm 2025 đã kết thúc. Giờ là lúc bắt đầu mơ về năm 2026…


Nếu bạn quan tâm đến việc cùng chúng tôi thực hiện sứ mệnh làm cho thương mại tốt hơn cho mọi người, hãy xem thông tin chi tiết tại đây. trang nghề nghiệp.

Bài viết này ban đầu xuất hiện trên Kỹ thuật Shopify và có sẵn ở đây để tìm hiểu thêm.
Chiến lược tăng trưởng Shopify cho các thương hiệu bán hàng trực tiếp (DTC) | Steve Hutt | Cựu Quản lý Thành công Khách hàng Shopify | Hơn 440 tập podcast | 50 lượt tải xuống hàng tháng