Pokemon

นินเทนโดประกาศความสำเร็จของเกม Pokémon Scarlet and Violet สามารถทำยอดขาย 10 ล้านชุดได้ภายใน 3 วันแรกที่วางขาย ถือเป็นเกมที่ยอดขายช่วงเปิดตัวสูงสุดในประวัติศาสตร์ของนินเทนโด

ยอดขาย 4.05 ล้านชุดมาจากในญี่ปุ่นประเทศเดียว ส่วนที่เหลือคือประเทศอื่นๆ รวมกัน ส่วนสถิติของภาคที่แล้ว Pokémon Sword and Shield ทำไว้คือ 2 ล้านชุดใน 3 วันแรกที่วางขาย

ถึงแม้ Pokémon Scarlet and Violet ถูกวิจารณ์อย่างหนักเรื่องคุณภาพของเกม โดยเฉพาะกราฟิกที่มีบั๊กการแสดงผลมากมาย แต่กระแสโปเกมอนรอบนี้มาแรงจริงๆ ต่อให้มีเสียงวิจารณ์ก็ไม่สามารถส่งผลกระทบต่อยอดขายได้

สถิติยอดขายเกมอันดับหนึ่งของ Nintendo Switch คือ Mario Kart 8 Deluxe มียอดขายสะสมอยู่ที่ 48.41 ล้านชุด ตามด้วย Animal Crossing: New Horizons ยอดขายสะสม 40.17 ล้านชุด

ที่มา - Nintendo, Kotaku

Hiring! บริษัทที่น่าสนใจ

CP AXTRA Public Company Limited - Lotus's company cover
CP AXTRA Public Company Limited - Lotus's
CP AXTRA Lotus's is revolutionizing the retail industry as a Retail Tech company.
Token X company cover
Token X
Blockchain, ICO, Tokenization, Digital Assets, and Financial Service
Carmen Software company cover
Carmen Software
Hotel Financial Solutions
Next Innovation (Thailand) Co., Ltd. company cover
Next Innovation (Thailand) Co., Ltd.
We are web design with consulting & engineering services driven the future stronger and flexibility.
United Information Highway Co., Ltd. company cover
United Information Highway Co., Ltd.
UIH is Thailand’s leading Digital Infrastructure and Solution Provider for Business
KKP Dime company cover
KKP Dime
KKP Dime บริษัทในเครือเกียรตินาคินภัทร
Kiatnakin Phatra Financial Group company cover
Kiatnakin Phatra Financial Group
Financial Service
Fastwork Technologies company cover
Fastwork Technologies
Fastwork.co เว็บไซต์ที่รวบรวม ฟรีแลนซ์ มืออาชีพจากหลากหลายสายงานไว้ในที่เดียวกัน
Thoughtworks Thailand company cover
Thoughtworks Thailand
Thoughtworks เป็นบริษัทที่ปรึกษาด้านเทคโนโยลีระดับโลกที่คว้า Great Place to Work 3 ปีซ้อน
Iron Software company cover
Iron Software
Iron Software is an American company providing a suite of .NET libraries by engineer for engineers.
CLEVERSE company cover
CLEVERSE
Cleverse is a Venture Builder. Our team builds several tech companies.
Nipa Cloud company cover
Nipa Cloud
#1 OpenStack cloud provider in Thailand with our own data center and software platform.
CDG GROUP company cover
CDG GROUP
Provider of IT solutions to public, state, and private sectors in Thailand for over 56 years
Bangmod Enterprise company cover
Bangmod Enterprise
The leader in Cloud Server and Hosting in Thailand.
CIMB THAI Bank company cover
CIMB THAI Bank
MOVING FORWARD WITH YOU - CIMB is the leading ASEAN Bank
Bangkok Bank company cover
Bangkok Bank
Bangkok Bank is one of Southeast Asia's largest regional banks, a market leader in business banking
Gofive company cover
Gofive
“We create world-class software experience”
KBTG - KASIKORN Business-Technology Group company cover
KBTG - KASIKORN Business-Technology Group
KBTG - "The Technology Company for Digital Business Innovation"
Siam Commercial Bank Public Company Limited company cover
Siam Commercial Bank Public Company Limited
"Let's start a brighter career future together"
Icon Framework co.,Ltd. company cover
Icon Framework co.,Ltd.
Global Standard Platform for Real Estate แพลตฟอร์มสำหรับธุรกิจอสังหาริมทรัพย์ครบวงจร มาตรฐานระดับโลก
REFINITIV company cover
REFINITIV
The Financial and Risk business of Thomson Reuters is now Refinitiv
H LAB company cover
H LAB
Re-engineering healthcare systems through intelligent platforms and system design.
LTMH TECH company cover
LTMH TECH
LTMH TECH มุ่งเน้นการพัฒนาผลิตภัณฑ์ที่สามารถช่วยพันธมิตรของเราให้บรรลุเป้าหมาย
Seven Peaks company cover
Seven Peaks
We Drive Digital Transformation
Wisesight (Thailand) Co., Ltd. company cover
Wisesight (Thailand) Co., Ltd.
The Best Choice For Handling Social Media · High Expertise in Social Data · Most Advanced and Secure
MOLOG Tech company cover
MOLOG Tech
We are Modern Logistic Platform, Specialize in WMS, OMS and TMS.
Data Wow Co.,Ltd company cover
Data Wow Co.,Ltd
We enable our clients to realize increased productivity by solving their most complex issues by Data
LINE Company Thailand company cover
LINE Company Thailand
LINE, the world's hottest mobile messaging platform, offers free text and voice messaging + Call
LINE MAN Wongnai company cover
LINE MAN Wongnai
Join our journey to becoming No.1 food platform in Thailand

whitebigbird Thu, 11/24/2022 - 10:41

ถล่มทลายครับ

บั๊กเพียบถล่มทลาย แล้วผมซื้อแบบดิจิตอลด้วย เฮ้อ

rattananen Thu, 11/24/2022 - 11:26

ไม่ค่อยได้เล่นเกม ไม่รู้เดี๋ยวนี้ยังใช้แค่ thread เดียว (ไม่นับ render loop thread) กันอยู่หรือเปล่า
สมัยนี้ต้อง event-base driven (แบบ Chrome, Firefox, Nginx ) แยก thread ทำแต่ละหน้าที่หรือ สร้าง worker ช่วยกัน process แล้วล่ะ
ไม่งั้นเอา graphic สมัยนี้ไม่อยู่

mr_tawan Fri, 11/25/2022 - 00:52

In reply to by rattananen

ถ้าไม่ใช่ dev คงไม่มีทางรู้นะผมว่า (ฮา) หรือเราจะหารอมมาแล้วต่อ debugger เถื่อนดี

ส่วนตัวผมว่า ก็อาจจะเป็น event-driven ได้ครับ คือเรามี game object แล้วแต่ละ object ก็ spawn event ออกมา แล้วก็มี Handler มารับไป ฯลฯ แต่ event ทั้งหมดจะถูก process ใน frame เดียวกัน ไม่ใช่ว่าทำแยกออกจาก rendering ครับ ไม่งั้นจะเกิดปัญหาการ synchronization คือมันไม่ใช่แบบ กดปุ่ม A แล้วไปกระโดดในอีก 3 เฟรมข้างหน้า แบบนี้ไม่ได้ input ของเฟรมไหนต้องทำงานในเฟรมนั้น

ปรกติแล้วโครงสร้างของเกมมันจะมีโค๊ดประมาณว่า

state_t state{};
while(true) {
  auto input = read_input();
  state = process(state, input);
  render(state);
}

(อันนี้โค๊ดผมนะ โค๊ดคนอื่นก็คงเขียนแตกต่างกันออกไป แล้วก็เขียนย่อสุด ๆ ด้วย อย่างเรื่อง frame time นี่ผมตัดไปก่อนละกัน คิดซะว่ามันเป็นโค๊ด Doom ที่รันบนเครื่องตรวจครรภ์ก็ได้ครับ 555)

ถ้าจะทำ Multi-thread เท่าที่เคยอ่าน (คือสมัยผมเขียนเอนจินเอง ผมเขียนแค่ single-thread น่ะครับ 555) เค้าจะใช้วิธีการแตก thread ในแต่ละขั้นตอนให้ทำงานย่อย ๆ พร้อมๆ กัน เช่นขั้นตอน process เองก็อาจจะทำการคำนวน state ใหม่ของหลาย ๆ Object ในฉากพร้อมๆ กัน ส่วนขั้นตอน render ก็จะอัพเดตพวก VBO, image, ฯลฯ (ตรงนี้ลืมหมดแล้ว api ใหม่ๆ ก็คงมีอะไรอย่างอื่นอีก) เหมือน ๆ กันหมด คือจะต้องรอให้ process เสร็จก่อนแล้วค่อย render ทีเดียว เพราะถ้า process ไป render ไป ก็มีโอกาสที่ภาพกับ state ไม่ตรงกันได้ อะไรงี้ครับ

ที่จริง จะเขียน process กับ rendering เป็น 2 thread แยกกันก็ได้ (แล้วให้แต่ละ thread ไปแตก task ย่อย ๆ เอง) แต่ว่าการ sync ข้อมูลก็จะ sync กันทีเดียวพร้อม ๆ กันทุก object ในฉาก ไม่ใช่ว่าเฮ้ยทำอันไหนเสร็จแล้วเอาไปก่อน แบบนี้เจ๊งครับ ส่วนตัวผมว่า มันก็เวิร์คถ้าเรา process กับ render ด้วยความถี่ที่แตกต่างกัน แต่ดูแล้วการ sync ข้อมูลกันมันดูน่าปวดหัวแปลกๆ และอาจจะเกิด deadlock/livelock ได้ด้วย ส่วนข้อดีคือไม่ว่า hw จะช้าหรือเร็ว การคำนวนจะเกิดด้วยความถี่เท่ากัน ดังนั้นไอ้เรื่องแบบใครใช้ hw แรงๆ เฟรมไทม์สั้น ๆ แล้วได้เปรียบ ก็จะไม่เกิดครับ

ทีนี้ เครื่องเกมสมัยนี้เป็น multi-core หมดแล้ว อย่าง Nintendo Switch ก็ใช้ Tegra X1 ที่มี Cortex-A57 4 คอร์ (จริง ๆ เคยมีอีกสี่คอร์ แต่ปิดไป) ผมเดาว่านอกจากมือใหม่มาก ๆ คงไม่เขียน single-thread แล้วล่ะครับ แต่การแตก thread ก็อย่างที่ว่า คือไม่ใช่มีหลาย ๆ เธรดทำงานหลายๆ อย่างพร้อมกันตลอดเวลา แต่จะเป็นการทำงานเป็นอย่างๆ ให้เสร็จทั้งหมดแล้ว terminate

ทั้งนี้มันก็อาจจะมี thread บาง thread ที่ทำงานตลอดเวลาบ้างเหมือนกันครับ เช่น audio mixer แต่ก็ขึ้นกับการออกแบบครับ จะเขียนเป็น synchronized ก็ได้เหมือนกัน (mixer thread นี่ ขอให้เติมดาต้าลงบัฟเฟอร์ได้ทันก่อนอันเดอร์รัน ก็เป็นอันใช้ได้)

ผมเขียนคอมมเม้นนี้แบบ พิมพ์ไปพลาง คิดไปพลาง ก็ตกผลึกอะไรใหม่ ๆ ได้เหมือนกัน ขอบคุณครับ ทั้งนี้คือผมก็ไม่ได้เขียนเกมเอนจินเป็นอาชีพ (แล้ว) ล่ะนะ สมัยนี้เค้าอาจจะมีอะไรใหม่ ๆ ก็ได้ แล้วก็อาจจะมีอะไรผิดพลาดได้เหมือนกันครับ อ่านอะไรยาว ๆ แบบนี้ก็ระวังนิดนึงนะครับ 555

rattananen Fri, 11/25/2022 - 10:31

In reply to by mr_tawan

พอเห็นเกมมัน Fps ต่ำ ผมก็คิดว่าน่าจะเป็นที่ object มันเยอะทำให้ recalculate meshes แต่ละ frame นาน
เลยนึกได้ครับ (ผมชอบเปิด process ดู แต่ไม่ค่อยได้สังเกต thread)
ว่าเกมน่ะมันชอบมีอยู่ process เดียว
แต่ software สมัยนี้มันชอบมีหลายๆ process เลยคิดว่าน่าจะเอามาช่วยตรงนี้ได้

คือสร้างเป็น recalculate mesh worker ให้ run เป็น parallel ไปเลยไม่ต้องเสียเวลา create/join thread บ่อยๆ ใช้ event communicate ระหว่าง thread เอา

ข้อดีคือ ถ้ายังไม่พอมันก็สร้าง worker เพิ่มได้
ข้อเสีย อาจจะยุ่งยากตอนออกแบบ program

อย่าเชื่อผมมากนะครับ ผมไม่เคยเขียนเกม เคยใช้แค่ 3D engine เขียน application เท่านั้นเอง

ส่วนเรื่อง replay ยาวนี้ไม่มีปัญหาครับ ถึงผมจะอ่านเร็ว อ่านตก แต่ผมจะชอบอ่านซ้ำๆ เพื่อให้แน่ใจว่าเข้าใจถูกด้วย

(เผื่อใครงงว่าทำไมเดี๋ยว thread เดี๋ยว process คือ process ก็คือ main thread นะครับ)

mr_tawan Fri, 11/25/2022 - 21:16

In reply to by rattananen

ที่ web browser เค้าแยกโปรเซสกัน คือเรื่องความปลอดภัยครับ เป็นการสร้าง sandbox เผื่อไว้เวลาที่ถ้า tab นึงมีช่องโหว่ มันจะได้ไปโดนการจัดการโปรเซสของ OS ดักเอาไว้อีกชั้นนึงครับ เว็บไซต์นึงมันจะได้ไม่สามารถเข้าถึงข้อมูลของอีกเว็บนึงที่อยู่ในแท๊บข้างๆ ได้ ข้อเสียคือมันมี overhead สูงครับ สังเกตได้ ตอนที่ Browser เปลี่ยนมาใช้โมเดลนี้ใหม่ ๆ browser กินแรมหนักกว่าเดิมมาก (น่าจะเป็นเท่าตัวเลยถ้าผมจำไม่ผิด)

แล้วก็สื่อสารกันระหว่าง process เอง (สมมติว่าใช้ service worker) เองก็มี overhead และ latency ประมาณนึง อันนี้คนเคยเขียนพวก electron น่าจะรู้

ซึ่งเกมมันไม่ได้มีความจำเป็นนี้ไง เพราะทั้งเกมก็มาจากผู้ผลิตเจ้าเดียวกัน ในทางกลับกันเค้าต้องพยายามลด overhead ให้ได้เยอะที่สุดเพราะว่า resource มีจำกัดและข้อมูลที่ใช้ก็มีขนาดใหญ่ด้วย

เนื่องจากเกมจะเป็น multi-threading ไม่ใช่ multi-process แบบพวก Browser ดังนั้นถ้าเราเปิด task manager ขึนมาดูจะเห็นแค่ process เดียวครับ ใน windows เหมือนจะเคยดูได้มั้งว่า process นั้นมีกี่ thread แต่ผมหาไม่เจอละ เจอแต่ว่าทั้งระบบรันอยู่กี่ thread

เรื่องการคำนวน mesh นี่มันเกิดขึ้นใหม่ทุกเฟรมและขึ้นกับ state ของ object นั้นครับ ถ้าเป็นพวก static mesh มันก็อัพขึ้น gpu ตรง ๆ ได้เลย แต่พอมันเป็น skin mesh ปุ๊บ ก็ต้องคำนวน mesh ใหม่ในเฟรมนั้นว่า เออแขนต้องยื่นไปข้างหน้าเท่านี้นะ หน้าต้องหันไปทางนี้นะ ฯลฯ ตรงนี้คำนวนใน cpu ดังนั้นปริมาณ object ที่ใช้ skin mesh อย่างพวกตัวละครต่าง ๆ เนี่ยมีผลต่อ cpu load มากครับ

แน่นอนว่า ก็แตก thread ไปได้ ซีพียูมี 8 คอร์ อาจจะใช้สัก 4 thread สำหรับเรื่อง animation อย่างเดียว ก็ได้ ก็เป็นวิธีที่ทำกันปรกติอยู่แล้วครับ... คิดว่านะ 555

ทั้งนี้ก็มีคนที่ทำ skin mesh animation ใน gpu ด้วยเหมือนกันครับ

rattananen Mon, 11/28/2022 - 15:24

In reply to by mr_tawan

  • ถึง pattern มันจะคล้าย service worker ของ web API แต่มันเอา performance มาเทียบกันไม่ได้เลยครับ เพราะ web API มันต้องถูกจำกัดอะไรหลายอย่างว่าด้วยเรื่อง security
  • worker ที่ผมพูดถึงน่ะไม่จำเป็นต้องเป็น process ครับเพราะมันอาจจะช้ากว่าแบบ thread ด้วยเรื่องข้อจำกัดของ การ access memory (ถ้าสร้าง worker ให้เป็น thread มันจะ access memory ใน process เดียวกันได้ไม่ต้องใช้ IPC ซึ่งมันควรจะเร็วกว่าถ้า access memory กันตรงๆ)
  • idea ผมมาจาก coroutine ของ GO https://youtu.be/LvgVSSpwND8?t=973 + Nginx worker + PHP fpm + ASIO library ที่ create หลาย thread listen socket ได้
  • เดี๋ยวนี้ตอนผมอ่าน API reference ของ c++ library หรืออื่นๆ ผมจะเจอคำว่า non-blocking function มากขึ้น ทีแรกผมก็ไม่รู้ว่ามันคืออะไร พอลองหาคำตอบที่แท้มันก็คือ event base/observe pattern นั้นเอง ประกอบกับเดี๋ยวนี้ผมใช้ pattern นี้มากขึ้นผมเลยคิดว่า event base/observe pattern มันต้องมีดีอะไรคนเลยใช้กันมากขึ้น

ส่วนเรื่องทำไมเฟรมเรทต่ำ

ผมเดาว่า ... object ในฉากมันเยอะครับ ซีพียูทำงานไม่ทันมั้ง คือกราฟิคมันไม่ได้หนี arceus เท่าไหร่เลยน่ะครับ

ก็เห็นปู่บอกว่า arceus ไม่ใช่ภาคย่อย เป็นภาคหลัก ก็อาจจะสร้างเกม pokemon legends กับ pokemon เป็นเกมหลักแยกจากกัน 2 เกมก็ได้ แต่ก็นั้นแหละ งงว่าอะไรดีๆ ใน arceus ถึงไม่เอามาลงใน S/V

akira Thu, 11/24/2022 - 20:48

ผมว่าเรื่อง bug สำหรับผมแทบจะมองข้ามเลย ถ้าเคยเล่น Pokemon มาเยอะๆ จะรู้ว่าภาคนี้พัฒนาเยอะมาก Gameplay สนุกมากด้วย น่าจะเป็นต้นแบบสำหรับ Pokemon ภาคถัดๆ ไป ถ้าเป็นภาคเก่ามันเป็นเส้นตรง เล่นแป๊บเดียวก็จบ พอมาเป็น Open World แวะนู่น แวะนี่ไปเรื่อย ยังไปไม่ถึงไหนเลย 555

Apple
public://topics-images/apple_webp.png
SCB10X
public://topics-images/347823389_774095087711602_515970870797767330_n_webp.png
Windows 11
public://topics-images/hero-bloom-logo.jpg
Doom
public://topics-images/doom_logo.png
Huawei
public://topics-images/huawei_standard_logo.svg_.png
Threads
public://topics-images/threads-app-logo.svg_.png
Google Keep
public://topics-images/google_keep_2020_logo.svg_.png
Fortnite
public://topics-images/fortnitelogo.svg_.png
Instagram
public://topics-images/instagram_logo_2022.svg_.png
SCB
public://topics-images/9crhwyxv_400x400.jpg
Microsoft
public://topics-images/microsoft_logo.svg_.png
Basecamp
public://topics-images/bwpepdi0_400x400.jpg
Tinder
public://topics-images/hwizi8ny_400x400.jpg
FTC
public://topics-images/seal_of_the_united_states_federal_trade_commission.svg_.png
Pinterest
public://topics-images/pinterest.png
Palantir
public://topics-images/-nzsuc6w_400x400.png
Gemini
public://topics-images/google_gemini_logo.svg__0.png
AIS Business
public://topics-images/logo-business-2021-1.png
PostgreSQL
public://topics-images/images.png
JetBrains
public://topics-images/icx8y2ta_400x400.png
Krungthai
public://topics-images/aam1jxs6_400x400.jpg
Palworld
public://topics-images/mccyhcqf_400x400.jpg
Bill Gates
public://topics-images/bill_gates-september_2024.jpg
VMware
public://topics-images/1nj4i1gp_400x400.jpg
Take-Two Interactive
public://topics-images/0khle7nh_400x400.jpg
OpenAI
public://topics-images/ztsar0jw_400x400.jpg
Thailand
public://topics-images/flag_of_thailand.svg_.png
NVIDIA
public://topics-images/srvczsfq_400x400.jpg
ServiceNow
public://topics-images/ytnrfphe_400x400.png
PS5
public://topics-images/playstation_5_logo_and_wordmark.svg_.png
Klarna
public://topics-images/urcllpjp_400x400.png
Google Play
public://topics-images/play.png
Drupal
public://topics-images/drupal.png
Virtua Fighter
public://topics-images/virtua_figther_2024_logo.png