...ไม่ได้บอกว่าให้ผลักงานออกไปจากตัวเองให้หมดนะครับ (ไม่งั้นคุณจะโดนเจ้านายผลักออกไปจากออฟฟิซแทน) สิ่งที่จะบอกก็คือ ... จากประสพการณ์ตอนที่ทำเกมที่ Sanuk Software ผมได้มีโอกาสได้ทำงานหลาย ๆ อย่างซึ่ง ... ไม่น่าจะเป็นหน้าที่ของโปรแกรมเมอร์เลย ทั้งการหาลูปในไฟล์เพลง การนั่งอนิเมทสไปร์ท 2D การวาง Tile ใส่ Map และอื่น ๆ สิ่งทีเกิดขึ้น มันเกิดจาการที่ ... เอ้อ ผมใจอ่อนเอง ... เฮ้ย ไม่ใช่! มันเกิดจากการที่ทีมงานในฝ่าย Content นั้นไม่สามารถที่จะจัดเตรียม Content ตามที่เราต้องการได้ หรือจัดเตรียมให้ได้แต่ไม่ครบถ้วน และกลายเป็นทางฝ่ายโปรแกรมเมอร์จะต้องมาทำหน้าที่ตรงนี้แทน
จะบอกว่าจริง ๆ มันไม่ลำบากหรืออะไรหรอก แต่ว่ามันกลายเป็นว่า งานในส่วน Content นั้นมีบางส่วนมากองอยู่ที่โปรแกรมเมอร์ ซึ่งนั่นเป็นสิ่งสุดท้ายที่ Project Manager ต้องการ (อ้างหน่อย ฮ่าๆ จริง ๆ คือไม่อยากเหนื่อยเองแหละ) เพราะว่า load ของโปรแกรมเมอร์มันจะเยอะกว่าทีมอื่น (และปรกติแล้วค่าตัวโปรแกรมเมอร์จะแพง 555) ทำให้ balance load ของงานของแต่ละคนได้ลำบาก
แล้วทีนี้จะเอาไงดี ... เราก็ต้องทำไงก็ได้ที่จะทำให้เขาทำงานของตัวเองให้ได้น่ะสิครับ โดยวิธีการตรงนี้นั้นก็ประกอบไปด้วยสองส่วนหลัก ๆ ก็คือ
ค้าจะเขียนโค๊ดแทนเรา (ถ้าเป็นงั้นจริงแนะนำให้เขียน resume เตรียมไว้เลย ได้ใช้เร็ว ๆ นี้แน่ๆ) สิ่งที่เราต้องทำก็คือ เราจัดหาเครื่องมือที่เป็นมิตรกับเขาให้มากที่สุด (ในหลาย ๆ กรณีก็รวมถึงการสร้างใหม่ด้วยครับ ถ้าจำเป็น)
ทีนี้คงมีคำถามว่า มันคุ้มหรือเปล่ากับการที่จะต้องจัดเตรียมเครื่องมือ หรือ วิธีการที่จะทำให้ฝ่ายจัดทำ content นั้นสามารถเตรียม content ที่เราสามารถใช้ได้ทันที ... แทนที่เราจะมาเสียเวลาจัดเตรียมเอง ผมต้องบอกก่อนเลยว่าในระยะแรก ๆ จะยังไม่เห็นผล เพราะเราต้องเสียเวลาเตรียมทั้งอุปกรณ์ให้เขา (ถ้าต้องสร้างใหม่เลยก็ใช้เวลามากขึ้นไปอีก) สอนวิธีใช้ ต้องคอยให้คำปรึกษา แต่พอถึง ณ. จุดที่เค้าสามารถทำงานในส่วนของเขาเองได้ ภาระเราจะลดลงไปเยอะมาก ๆ แล้วถ้ามีคนใหม่เข้ามาก็ให้เขาไปสอนกันเอาเอง
พูดกันง่าย ๆ คือ เหนื่อยตอนแรก แต่จะสบายในระยะยาวครับ
อีกสิ่งนึงที่ควรพิจารณาก็คือ นอกจากเราต้องปรับให้เขาเข้ามาใช้เครื่องมือเราแล้ว เราก็ต้องปรับโค๊ดเราให้รองรับกับเครื่องมือที่เขาใช้ด้วย คือ ถ้าจะทำเครื่องมือที่ใช้งานกับโปรแกรมของเราได้ทันทีมันก็ทำได้ แต่คงเสียเวลามากในหลาย ๆ กรณี ดังนั้นการปรับตัวเข้าหากันทั้งสองฝ่ายน่าจะเป็นทางเลือกที่ดีกว่า
...พล่ามมาก็เยอะ คิดว่าคงอ่านไปก็งงไป ... ยกตัวอย่างสักสองสามเคสก็แล้วกัน
1. Sprite Animation
Sprite Animation ก็คือการ Animate ตัวกราฟิค 2D คิดว่าหลายๆ คนคงรู้จักกันดี การทำ Animation ลักษณะนี้คือการวาดภาพ 2D ที่จะเปลี่ยนภาพไปมาตามเวลา (หรือเฟรม) ที่กำหนด เช่น ณ. วินาทีแรกให้เล่นภาพที่หนึ่ง วินาทีที่สองให้เล่นภาพที่สอง ... เป็นต้น
ที่ผมเคยเจอก็คือ ทางทีมกราฟิคสร้างชุดของ Sprite (หรือ Sprite Sheet, tileset แล้วแต่จะเรียกนะครับ) แล้วจะบอกแค่ว่า เฟรมแรกจนถึงเฟรมที่ห้าเล่นภาพแรก เฟรมต่อไปภาพที่สอง แล้วกลับมาเล่นภาพแรก ฯลฯ ซึ่งเขาไปทดลองสร้าง Animation บน Flash แล้วมาบอกเรา แต่เนื่องจากว่า Timing บนเกมเรากับบน Flash มันไม่ตรงกัน มันก็จะมีการคลาดเคลื่อนเสมอ ๆ แล้วเค้าจะบอกให้เราปรับ ๆๆ ไปเรื่อยจนกว่าเค้าจะพอใจ ซึ่งการขอให้เราปรับตรงนี้เกิดจากการที่เขาไม่รู้ว่าเขาจะปรับยังไง แล้วการที่จะเข้าเกมเพื่อทดลองว่ามันอนิเมทได้ถูกต้องหรือไม่นั่นก็เสียเวลาพอสมควร
อันที่จริง ผมไม่ได้ hardcode ตรงส่วน animation แต่จะทำงานผ่าน script ที่เป็น xml แต่ว่า .......... ไอ้ xml เนี่ยทางฝ่าย artist แกงงครับ ! คือ เขาไม่สามารถแก้ไขเองได้ สุดท้ายผมก็เลยต้องเป็นคนที่มานั่งแก้สคริปท์ตรงนี้ ... xml มัน human-friendly ก็จริง แต่สำหรับคนฝ่ายอาร์ทแล้ว ... มันอาจจะยังไม่ friendly เท่าที่ควร
ทางแก้ของผมก็คือ ผมทำโปรแกรม Sprite Editor (หรือ Animation Editor) ขึ้นมาตัวนึง โดยทำให้เขาสามารถสร้างอนิเมชั่นได้จากโปรแกรมนี้ด้วยการลากวาง (และอื่น ๆ ตามมาตรฐานโปรแกรมสากล) รวมทั้งใส่ฟีเจอร์ที่เกมของผมรองรับ (แต่แฟลชไม่มี) ลงไปด้วย ซึ่งจริง ๆ ผมอาจจะไม่ต้องทำมันขึ้นมาก็ได้ (ลอง Google ดูก็เห็นมีหลายโปรแกรมอยู่) ตรงนี้ขึ้นกับวิจารณญาณละกันครับ
2. BGM Loop Point
น่าจะเคยสังเกตกันว่าเกมส่วนใหญ่นั้น BGM มันจะ Loop และ การที่เพลงมันจะ Loop ได้นั้นเราก็ต้องรู้ก่อนว่าเราจะ Loop ไปตรงไหน ตรงนี้คนที่ทำ BGM มา (ซึ่งอาจจะเป็น Sound Designer ก็ได้ หรือถ้าโปรเจคใหญ่ ๆ อาจจะเป็น Composer) เค้าต้องบอกเราว่าจะ Loop ไปตรงไหน
ถ้าคุณโชคดี เค้าจะบอกว่า มัน Loop ไปที่ Sample ที่เท่าไหร่ (หน่วย Sample เป็นหน่วยย่อยที่สุดของไฟล์เสียงครับ โดยที่เพลง 44.1KHz จะมี Sample 44.1k Sample ต่อนาที) ...
พอเค้าบอกมาเสร็จ เราก็ต้องจด ๆๆ แล้วเอาไปใส่ในโปรแกรม ทดลองฟัง ... ถ้าวันนั้นเป็นวันแย่ ๆ ของเดือน (หรือวันแย่ ๆ ของเดือนมาไม่ปรกติ) คุณอาจจะเจอว่าไอ้ที่คุณจดน่ะมันหาย ??
ทางแก้ของผมคือ ผมจะขอให้เค้าหา Loop Point มาเป็นหน่วย Sample (อาจจะต้องสอนเขาใช้ Tool พวก Sound Forge) เพราะว่าถ้าเป็นหน่วย sample แล้วมันจะไม่ค่อยพลาดครับ คือไม่ค่อยมีอาการ loop ผิดหรือต่อกันไม่สนิท แล้ว สอนให้เขาบรรทึก Loop Point ลงไปเป็น Field นึงของไฟล์ ogg (ผมใช้ ogg ครับตอนนั้น) (บน ogg จะเรียกว่า comment) จากนั้นเราก็เขียนโค๊ดส่วนที่โหลดไฟล์ ogg ให้มันอ่านค่า loop point ออกจากไฟล์ ogg จาก field ที่เรากำหนดไว้
วิธีนี้ดีกว่า การกำหนด loop point ในโค๊ด ตรงที่ถ้าเราเขียนลงไปในโค๊ด แล้วมีการเปลี่ยนไฟล์เพลง เราต้องมานั่งแก้โค๊ดทุกครั้ง แล้วถ้ามันเป็นวันแย่ ๆ ของเดือน ... ผมคงไม่ต้องพูดต่อล่ะนะ
อันที่จริงมีอีกวิธีที่ง่ายกว่า embed ข้อมูลลงไปในไฟล์ตรง ๆ ก็คือการสร้างอีกไฟล์เป็น descriptor คอยบอกข้อมูลในไฟล์ว่าเป็นไง (เช่นไฟล์ xxx.ogg ลูปที่ตำแหน่ง 3000000) แต่มันมีโอกาสพลาดมากกว่า ที่สำคัญคือถ้าเราทำวิธีนี้ ฝ่าย Sound เขาจะไม่มาเขียนไฟล์นี้ให้เรา และสุดท้ายเราก็ต้องมานั่งแก้เอง ...
คิดว่าน่าจะพอเป็นแนวทางคร่าว ๆ ให้กับโปรแกรมเมอร์ (โดยเฉพาะมือใหม่ ๆ ... แต่เวปเราน่าจะยังไม่มีนะ ?) ให้ไม่ต้องทำงานมันซะทุกอย่าง ผลักงานที่ไม่งานของเราให้คนอื่นทำครับ ... การทำงานในส่วนของคนอื่นถือเป็นการลบหลูเพื่อนร่วมงานนะครับ !
ปล. การทำตรงนี้ ส่วนนึงคือการหลีกเลี่ยงการ hard code ให้มากที่สุดด้วย และโยนงานตรงนี้ให้ฝ่ายจัดเตรียม content แทน
Last updated 149 days ago by นายตาหวาน
ผมว่ามันเหมือนการลงทุนเนอะ
ลงทุนทำโปรแกรม Tool ดีๆ ให้ฝ่านศิลป์ใช้ง่ายๆแล้วภาระและงานในภายภาคหน้าจะลดลง
แล้วก็มีความเสี่ยง(การลงทุนต้องมีความเสี่ยง ผู้ลงทุนควรศึกษาให้พร้อม :D) เกิดเปลี่ยนเทคโนโลยี หรือต้องเพิ่มฟีเจอร์ ไอ้ที่เราทำไปก็อาจจะไม่คุ้ม
Thaina 149 days ago
ขอบคุณครับ ได้แนวคิดไปเยอะเลย
darkyuu 149 days ago
เดี๋ยวเรื่องเล่นเพลง loop ผมจะเขียนเป็นอีกหน้านึงแยกกันครับ
นายตาหวาน 149 days ago
เรื่องเล่นเพลง Loop รบกวนเขียนไว้ที่ game-sound-music-talk นะครับ เพื่อความสะดวกในการค้นหาเวลามี Page เยอะ ๆ และเหมาะกับกลุ่มเป้าหมายเข้ามาช่วยกันเพิ่มเติมข้อมูลครับ
Nike 149 days ago
เรื่อง Loop Sound นี่ความรู้ใหม่เลยนะครับ >.>
Penz Acole 149 days ago
มีภาษิตว่า คนออกแบบ script มักจะได้เป็นคนใช้เอง... เหมือนหมองูตายเพราะงู
Thanit A. 149 days ago
อ่านแล้วจี๊ดมากๆครับ
ต้องยอมรับว่าโปรแกรมเมอร์ส่วนใหญ่ ทำเกมทั้งเกมมาแล้ว ทั้งแต่งเพลง ทำกราฟฟิก (อย่างน้อยก็เอาเพลงมาใส่เอง) เพราะงั้น เราจะรู้ว่าต้องทำอะไรบ้างจนจบเกม แต่คนทำงานด้านอื่นบางคน ก็ไม่เคยทำงานออกมาเสร็จเลย เคยแต่เป็นส่วนหนึ่งเท่านั้น เลยไม่รู้ว่าผลงานของเราจะไปสู่เกมได้ขนาดไหน มีข้อจำกัดยังไง
แต่พอมาทำงานเป็นทีม ที่สำคัญคือเราต้องแสดงจุดเด่นของแต่ละส่วนของทีมออกมาให้มากที่สุด เช่น คนทำกราฟฟิก ต้องกำหนด animation เอง เพื่อให้เป็นไปตามที่เค้าคิด ไม่ใช่ส่วนหนึ่งมาจากการวาดรูปที่สวย อีกส่วนมาจากการวางเฟรมโดยโปรแกรมเมอร์ ซึ่งโปรแกรมเมอร์น้อยคนที่จะมาอ้างว่า animation ชุดนี้เป็นฝีมือเค้า ซึ่งขอบอกว่าทุเรศมาก เหมือนการทำงานส่งๆ เพื่อรับเงิน ตอนสุดท้ายงานเป็นไงไม่สน (คือผมเคยเจอประเภทสุดท้ายที่ให้เราไปทำเอง ตามความเหมาะสม บ่อยๆ)
เรื่องการผลักงาน ผมมีแง่คิดอย่างนี้ครับ สมมุติเราสั่งเพลงในเกม ให้เค้าดู theme เกมแล้ว การทำงานจะไม่ได้บอกแค่ว่า เอาเพลง 1 เพลงจบ แต่เราจะต้องบอกด้วยว่า จะเป็น loop ยังไง ถ้าเป็นเกม shooting ซึ่งมีการเลื่อนฉากที่แน่นอน อย่างเช่นเมื่อถึงยริเวณนึง เราอาจจะกำหนดเพลงให้มีจังหวะแบบนึง เช่นบินออกมาจากยานก็ให้มีการเอากลองออก เป็นต้น อันนี้เราต้องคุยกันอย่างละเอียดเพื่อให้ฝ่ายต่างๆได้รับงานที่ชัดเจนมากกขึ้น (ผมเข้าใจว่าคนทำเพลงที่ไม่ได้กำหนด loop บางคนอาจไม่รู้ด้วยซ้ำว่าเพลงมันต้อง loop ครับ)
ba 148 days ago

Hima
Profile
Friends
Friends of
Blog
Files
Pages
Videos
แต่ทำกันในกลุ่ม 2 คนก็ไม่รู้จะผลักยังไงเหมือนกันนะพี่ 555+
เรื่องลูปเพลงนี่ผมไม่รู้มาก่อนว่าควรทำยังไง ขอบคุณมากครับสำหรับบทความ :) ส่วนสไปรท์กับอนิเมชั่นทางนี้ก็ทำเป็น xml เหมือนกัน จะได้แบ่งเบาภาระไปได้บ้าง ^ ^;
ว่าแต่เรื่องทำscripting แบบ user friendly มาให้ หวังให้ฝ่ายศิลป์ได้ใช้ แต่สุดท้ายโปรแกรมเมอร์ก็ต้องมาใ้ช้เองนี่รู้สึกจะเกิดขึ้นทุกแห่งหนเลยจริงๆ 5555+
Hima 149 days ago