วิธี Optimize Assets FiveM ให้โหลดเร็ว ลด FPS ตก และลดปัญหา Texture/Map โหลดไม่ทัน
การ Optimize Assets FiveM คือการลดภาระที่ Client ต้องดาวน์โหลด, Stream, เก็บใน Memory และ Render จาก Resources ต่าง ๆ เช่น รถ, Map/MLO, YTD Texture, YDR Model, YBN Collision, เสื้อผ้า, Ped, Props, NUI, Images และ Scripts
Server ที่มี Assets จำนวนมากไม่ได้แปลว่าจะต้องกระตุกเสมอไป ปัญหาสำคัญคือ Asset แต่ละชิ้นหนักแค่ไหน ถูกโหลดเมื่อไร และ Resource/Scripts จัดการ Assets เหล่านั้นอย่างไร
FiveM มีเครื่องมือสำหรับวิเคราะห์ทั้ง Resource CPU/Memory และระบบ Streaming โดยตรง เช่น resmon, strdbg, strlist และ strmem ขณะที่ cl_drawperf สามารถแสดง FPS, CPU, GPU, Ping และ Packet Loss บนหน้าจอได้.
บทความนี้จาก comsiam จะรวมวิธี Optimize Assets ทั้งระบบ ตั้งแต่รถและ Map ไปจนถึง NUI พร้อม Workflow สำหรับหาว่า Asset ตัวไหนกำลังสร้างปัญหาจริง
① Assets FiveM คืออะไร
ในบริบทนี้ Assets หมายถึงไฟล์ที่ Resource ใช้ เช่น
Vehicle ModelsVehicle TexturesMap / MLOCollisionLODClothesPedsPropsAudioNUI ImagesFontsVideo
รวมถึง Data Files ที่ Resource Manifest กำหนดให้เกมโหลดผ่าน Extra Content Mounting System ของ FiveM.
② Optimize Assets ไม่ใช่แค่บีบไฟล์
หลายคนคิดว่า
Optimize=ลด MB
จริง ๆ ต้องดูอย่างน้อย
Download SizeStreaming MemoryRendering CostCollisionLODTexturesResource CPUNUI Rendering
เพราะไฟล์เล็กไม่ได้หมายความว่าจะ Render เบาเสมอ และ Resource ขนาดใหญ่ก็ไม่ได้หมายความว่าจะเป็นต้นเหตุ FPS ต่ำโดยอัตโนมัติ
③ ต้องแยก Download กับ FPS ก่อน
สองปัญหานี้ไม่เหมือนกัน
เข้า Server ช้า
ให้ดูเรื่อง
DownloadResource Filesจำนวน AssetsMap CacheNetwork
เข้าแล้ว FPS ตก
ให้ดู
ModelsTexturesLODCollisionScriptsNUIGPU/CPU
การ Optimize ที่ดีต้องรู้ก่อนว่าปัญหาอยู่ช่วง Connection หรือ Gameplay
④ เปิด Performance Metrics ก่อน
ใช้
cl_drawperf true
FiveM ระบุว่าคำสั่งนี้แสดง FPS, Ping, Packet Loss, CPU Usage, GPU Usage และ GPU Temperature.
จึงเหมาะสำหรับสร้าง Baseline ก่อนและหลัง Optimize
⑤ อย่า Optimize จากความรู้สึก
ก่อนแก้ ให้จด
FPSCPUGPUResource CPUStreaming Memoryสถานที่Vehicleจำนวนผู้เล่น
แล้วทดสอบภายใต้สถานการณ์ใกล้เคียงกัน
ไม่เช่นนั้นอาจคิดว่า Optimize ได้ผลทั้งที่ FPS เปลี่ยนเพราะ Map หรือจำนวน Entities รอบตัว
⑥ resmon ใช้ทำอะไร
FiveM มี
resmon true
เพื่อเปิด Resource Monitor ซึ่งแสดง CPU Usage และ Memory Usage ของ Resources และเหมาะกับการวิเคราะห์ Performance ระหว่าง Gameplay.
ถ้า Resource ชื่อ
vehicle_packcustom_hudmap_resource
มี Client Processing สูงผิดปกติ ให้ตรวจ Script ของ Resource นั้นเพิ่มเติม
⑦ resmon ไม่ได้วัด Texture ทุกไฟล์
resmon เน้น Resource CPU/Memory Overview
ถ้าต้องการเจาะระบบ GTA Streaming ให้ใช้เครื่องมือกลุ่ม
strdbgstrliststrmem
ซึ่ง FiveM มีไว้สำหรับตรวจ Streamer โดยเฉพาะ.
⑧ strmem คืออะไร
ใช้
strmem true
FiveM ระบุว่า strmem แสดง Streaming Memory ของ Streaming Assets รายตัว รวมถึง Global Overview.
นี่เป็นหนึ่งในเครื่องมือสำคัญเมื่อสงสัยว่า
รถMapTexturesClothes
กำลังใช้ Streaming Memory สูง
⑨ strdbg คืออะไร
ใช้
strdbg true
FiveM ระบุว่า strdbg ใช้ดูว่าสิ่งใดกำลังถูกโหลดอยู่ใน GTA Streamer และช่วยตรวจปัญหา Streaming เช่นโลกหรือ Assets โหลดไม่ทัน.
เหมาะกับอาการ
Map หายTexture ไม่มาโลกโหลดไม่ทันObject Pop-in ผิดปกติ
⑩ strlist คืออะไร
ใช้
strlist true
FiveM ระบุว่า strlist เป็น Graphical Interface ที่แสดง Entries ที่ลงทะเบียนใน GTA Streamer และ Current Status ของแต่ละรายการ.
ช่วยให้เห็นภาพรวม Streamer มากกว่าการเดาจากชื่อ Resource
⑪ Developer Commands อาจ Access Denied
คำสั่งอย่าง
resmonstrdbgstrliststrmem
อยู่ในกลุ่ม Developer Commands และ FiveM ระบุว่าอาจขึ้น Access denied หรือถูก Disabled ใน Production Mode หาก Client ไม่ได้อยู่ใน Developer Mode.
ดังนั้น Access Denied ไม่ได้หมายความว่าคำสั่งถูกลบ
⑫ เริ่ม Optimize รถ FiveM จากอะไร
ตรวจ
ModelTexturesLODจำนวน VariantsLiveryVehicle PackSoundScripts
ก่อน
รถหนึ่งคันอาจไม่ได้หนักเพราะ Model อย่างเดียว แต่รวม Texture/Livery และ Data ที่เกี่ยวข้องด้วย
⑬ รถ 100 คันไม่ได้เท่ากับหนักกว่ารถ 20 คันเสมอ
จำนวนไฟล์เป็นเพียงตัวแปรหนึ่ง
ต้องดูว่า
แต่ละคันหนักแค่ไหนTexture ใหญ่แค่ไหนLOD มีไหมมี Variant ซ้ำหรือไม่
ดังนั้นอย่า Optimize โดยลบรถจากจำนวนอย่างเดียว
⑭ ตรวจ Texture รถก่อน
รถ Custom มักมี Texture Dictionary เช่น YTD
สิ่งที่ควรตรวจ
ความละเอียด Textureจำนวน TexturesLiveryTexture ซ้ำNormal/Specular Maps
หาก Texture ใหญ่เกินสิ่งที่ผู้เล่นเห็นจริง ควรลดตามความเหมาะสม
⑮ Texture ทุกชิ้นไม่จำเป็นต้อง 4K
ชิ้นเล็ก ๆ เช่น
Logo เล็กButtonBadgeรายละเอียดภายในเล็ก
อาจไม่ต้องใช้ Resolution สูงเท่าพื้นผิวรถใหญ่
แนวทางคือใช้ Resolution ตามพื้นที่ที่ Texture ถูกเห็นจริง
⑯ อย่าลด Texture ทุกอย่างจนแตก
Optimize ไม่ได้แปลว่า
4096↓512
ทุกไฟล์
ต้องรักษาความสมดุลระหว่าง
Visual QualityStreaming MemoryVRAM/GPU Cost
แล้วทดสอบในเกมจริง
⑰ Livery จำนวนมากควรตรวจ
รถหนึ่งคันอาจมี
Police Livery 1Police Livery 2Police Livery 3...
หากทุก Livery ใช้ Texture ความละเอียดสูงมาก Pack เดียวสามารถสะสม Asset Cost ได้
ควรเก็บเฉพาะลายที่ใช้งานจริง
⑱ ลบ Files ที่ไม่ใช้
Pack ที่ผ่านการแก้หลายรอบอาจมี
oldbackuptestunused
อยู่ใน Resource
ควรตรวจก่อนลบว่าถูก Reference หรือไม่ แล้วค่อยตัด Assets ที่ไม่มีผู้ใช้งาน
⑲ รถที่ไม่มี LOD ต้องระวัง
LOD ช่วยให้เกมใช้ Representation ที่เหมาะสมเมื่อวัตถุอยู่ไกล
ถ้า Custom Asset ใช้รายละเอียดสูงตลอดในระยะที่ไม่จำเป็น ก็มีโอกาสสร้าง Rendering Cost มากกว่าที่ควร
จึงควรตรวจ LOD Structure ของรถและ Models ขนาดใหญ่
⑳ Map/MLO เป็น Assets ที่ต้องให้ความสำคัญมาก
Map อาจมี
YMAPYTYPYDRYTDYBN
รวมหลายไฟล์
ดังนั้น Map หนึ่ง Resource สามารถมีทั้ง Placement, Archetype, Model, Texture และ Collision ที่ Stream พร้อมกัน
㉑ Map โหลดช้าควรใช้ strdbg
ถ้าเกิด
ตึกไม่มาพื้นหายObject Pop-in
ใช้
strdbg true
เพื่อตรวจว่าสิ่งใดกำลังถูก Stream อยู่ เพราะ FiveM ระบุว่าเครื่องมือนี้ช่วยดูปัญหา Streaming ของ GTA Streamer ได้.
㉒ Map ใช้ Memory สูงให้ดู strmem
ใช้
strmem true
แล้วดู Streaming Assets และ Memory Overview.
แทนการเปิด Folder แล้วเดาจาก File Size อย่างเดียว
㉓ Collision หนักมีผลได้
Map/MLO ที่มี Collision ซับซ้อนมากหรือจำนวน Collision Files สูงสามารถเพิ่มภาระ Asset Loading
FiveM จึงมี save_gta_cache ซึ่ง Documentation ระบุว่าใช้กับ Resources ที่มี Collision หรือ Map Files จำนวนมากเพื่อช่วยเร่ง Initial Loading สำหรับผู้เล่น.
㉔ save_gta_cache คืออะไร
ใช้
save_gta_cache <resource name>
FiveM ระบุว่าใช้สร้าง Cache Data สำหรับ Resource ที่มี Collision หรือ Map Files จำนวนมาก และ Cache File ต้องถูกนำไปวางที่ Root ของ Resource แล้วประกาศใน fxmanifest.lua.
นี่เป็นเครื่องมือเฉพาะที่ควรพิจารณากับ Map Resource ขนาดใหญ่
㉕ ตัวอย่าง Manifest สำหรับ GTA Cache
หลังสร้าง Cache File แล้วต้องประกาศใน
files {'ชื่อไฟล์_cache_y.dat'}
โดยชื่อไฟล์ต้องตรงกับ Cache ที่สร้างจริง ตามแนวทางใน FiveM Console Documentation.
อย่า Copy ชื่อ Example โดยไม่เปลี่ยนให้ตรง Resource จริง
㉖ อย่าใช้ save_gta_cache กับทุก Resource
FiveM ระบุ Use Case ของคำสั่งนี้สำหรับ Resources ที่มี Collision หรือ Map Files จำนวนมาก.
จึงไม่ใช่ Magic Optimization สำหรับ
HUDInventorySimple Lua Script
ทุกชนิด
㉗ MLO ควร Optimize Rooms และ Content
อย่าวาง Objects จำนวนมากเพียงเพราะ Editor รองรับ
ตรวจ
PropsDecorationsLightsMaterialsTexturesCollisionLOD
ว่ามีสิ่งใดซ้ำหรือมองไม่เห็นจริง
㉘ Object ด้านหลังผนังยังต้องคิด
แม้ผู้เล่นมองไม่เห็นด้วยสายตาตลอดเวลา Resource และ Game ยังต้องจัดการ Asset/Data ที่เกี่ยวข้องตามระบบ Streaming/Rendering
จึงควรลบ Geometry และ Props ที่ไม่มีประโยชน์จริงเมื่อ Asset Pipeline อนุญาต
㉙ Collision ไม่ควรละเอียดเท่า Mesh เสมอไป
Visual Mesh อาจมีรายละเอียดสูง
แต่ Collision ไม่จำเป็นต้องตามทุก Curve เล็ก ๆ หาก Gameplay ไม่ต้องการ
Collision ที่เรียบพอสำหรับการเดิน/ขับชนมักดูแลง่ายกว่า
แต่ต้องทดสอบ
เดินวิ่งรถBulletPhysics
ตาม Use Case
㉚ Map ใหญ่ควรมี LOD
Assets ที่มองเห็นจากระยะไกลควรมี LOD Strategy ที่เหมาะสม
ถ้า Server มีเมือง Custom ขนาดใหญ่แต่ทุก Object ใช้ High-detail Model จนไกลมาก Performance อาจลดลง
㉛ Pop-in ไม่ได้แปลว่าต้องเพิ่ม Draw Distance เสมอ
ถ้า Map Pop-in
อย่าเพิ่ม Draw Distance อย่างเดียว
ให้ตรวจ
LODAsset StructureStreamer StatusTextureCollision
ผ่านเครื่องมือ Streaming ก่อน.
การเพิ่มระยะโดยไม่แก้ Asset อาจเพิ่มภาระมากกว่าเดิม
㉜ Optimize เสื้อผ้า FiveM อย่างไร
ตรวจ
จำนวน DrawablesTexture VariantsTexture Resolutionไฟล์ที่ไม่ได้ใช้Duplicates
โดยเฉพาะ Server ที่มี Clothing Packs หลายชุดซ้อนกัน
㉝ เสื้อผ้า Texture ใหญ่ทุก Variant ไม่จำเป็น
เสื้อหนึ่งตัวอาจมี
ดำขาวแดงน้ำเงินลาย 1ลาย 2
ถ้าแต่ละ Variant เป็น Texture ใหญ่ทั้งหมด Asset Cost จะสะสม
ควรใช้ Resolution ที่เหมาะกับพื้นที่บนตัวละครและระยะที่ผู้เล่นมองเห็น
㉞ Clothes Pack เก่ากับใหม่อาจซ้ำ
หลัง Update อาจมี Resource
clothes_oldclothes_new
ทำงานพร้อมกันโดยไม่ได้ตั้งใจ
นอกจากสร้างความสับสนเรื่องลำดับแล้ว ยังทำให้ Server เก็บ Assets ที่ไม่ต้องการเพิ่ม
ตรวจ server.cfg และ Resource Startup List
㉟ Custom Ped ก็ต้อง Optimize
Ped มี
ModelTexturesSkeleton/RigClothingProps
ถ้าใช้ Model รายละเอียดสูงมากกับ NPC หลายตัวพร้อมกัน Client Load สามารถเพิ่มขึ้นได้
ควรใช้ Custom Ped ตามความจำเป็นจริง
㊱ Props จำนวนมากต้องดูทั้ง Asset และ Spawn Logic
มีสองเรื่อง
Prop Asset+จำนวน Prop Entities ที่ Spawn
Model เบาแต่ Spawn หลายร้อย/หลายพัน Entities ก็อาจสร้างภาระคนละแบบ
อย่าดู File Size อย่างเดียว
㊲ NUI ก็เป็น Asset เช่นกัน
NUI Resource อาจมี
HTMLCSSJavaScriptPNGWebPSVGFontsVideoAudio
Resource Manifest ใช้ files เพื่อประกาศไฟล์ที่ Resource ต้องให้ Client ใช้งาน.
ดังนั้น UI หนักมากก็เพิ่ม Asset Footprint ได้
㊳ Loading Screen Video ต้องระวัง
Video Full HD/4K ขนาดใหญ่ใน Loading Screen เพิ่มข้อมูลที่ Client ต้องรับและงาน Decode/Render ฝั่ง NUI
ถ้า Branding ไม่จำเป็นต้องใช้ Video สามารถใช้
ภาพ Background+CSS Animation เบา ๆ
แทน
㊴ รูป NUI ควรใช้ขนาดตามที่แสดง
ถ้า Icon แสดง
32×32
แต่ Source Image มีขนาดหลายพัน Pixel
อาจไม่มีประโยชน์สำหรับการมองเห็นจริง
ควร Resize/Compress Assets ให้สัมพันธ์กับ Display Size
㊵ Font ก็เป็น Asset
ถ้า NUI โหลด
ThinLightRegularMediumSemiBoldBoldExtraBoldBlack
แต่ใช้จริงเพียง
RegularBold
ควรตัด Font Weights ที่ไม่ใช้
㊶ JavaScript Library ที่ไม่ใช้ควรถอด
เช่น Resource ถูก Copy มาจาก Template แล้วมี Packages/Files ที่ไม่ได้ใช้จริง
ลดสิ่งที่ Browser ต้อง Parse/Load และทำให้ Resource ดูแลง่ายขึ้น
㊷ Optimize NUI ไม่ใช่แค่ Files
ต้องดู Runtime ด้วย
SendNUIMessageJavaScriptDOM UpdatesAnimationsTimers
ถ้า Resource Client CPU สูงให้ตรวจ resmon; ถ้า Lua/C#/JS Thread มีปัญหาซับซ้อน FiveM มี Profiler สำหรับหา Threads/Code ที่ใช้เวลาสูง.
㊸ Profiler ใช้เมื่อไร
ใช้เมื่อ
รู้ว่า Resource หนักแต่ไม่รู้ Code ส่วนไหน
FiveM Profiler ถูกออกแบบมาเพื่อช่วยระบุ Threads และ Code Lines ที่สร้างปัญหา Performance.
จึงควร Profile ก่อน Rewrite Resource ทั้งตัว
㊹ อย่าผสม Script Optimization กับ Asset Optimization
ตัวอย่าง
YTD ใหญ่→ Asset Problemwhile true + งานหนัก→ Script ProblemNUI animation หนัก→ UI Rendering Problem
แม้ผู้เล่นจะเรียกรวมว่า
Server หนัก
แต่แนวทางแก้ต่างกัน
㊺ วิธีหาว่ารถ Pack ไหนหนัก
ทำ A/B Test
Baseline↓เปิด Pack A↓วัดปิด Pack A↓เปิด Pack B↓วัด
แล้วใช้
strmemstrdbgFPSGPU
เปรียบเทียบ
อย่า Disable รถ 20 Packs พร้อมกันแล้วสรุปไม่ได้ว่าตัวไหนเป็นต้นเหตุ
㊻ วิธีหา Map ที่หนัก
ทดสอบ Resource ทีละตัวใน Development Server
Map A ONMap B OFFแล้วสลับ
เดิน/ขับผ่านพื้นที่เดิม
ดู
FPSGPUStreamingTexture Pop-inCollision
จากนั้นค่อย Optimize Map ที่มีหลักฐานชัด
㊼ ใช้ Developer Server สำหรับ Optimize
อย่าทดลองลบ Assets กลาง Production โดยไม่มี Backup
ควรมี
ProductionDevelopment/Test
แยกกัน
โดยเฉพาะ Map, Cars และ Clothes ที่ผู้เล่นใช้ต่อเนื่อง
㊽ ทำ Backup ก่อน Optimize
ก่อน
ลด Textureแก้ Modelแก้ Collisionลบ Filesรวม Resources
ควรเก็บ Version เดิม
เพราะ Optimize บางอย่างอาจทำให้
Texture หายCollision แตกVehicle CrashClothes เพี้ยน
ได้
㊾ อย่าลบ File จากชื่ออย่างเดียว
ไฟล์ที่ดูเหมือน
unusedoldextra
อาจยังถูก Meta หรือ Model Reference อยู่
ควรตรวจ Dependency/Reference ก่อน Remove
㊿ Resource Manifest ควรสะอาด
fxmanifest.lua เป็น Resource Manifest ที่ใช้กำหนด Metadata, Files และ Data Entries ของ Resource.
อย่าประกาศ Files ที่ Resource ไม่ใช้โดยไม่จำเป็น
และอย่าลบ Data File Entry ที่ Asset ยังต้องใช้
51. data_file คืออะไร
FiveM ระบุว่า Data File คือ Entry ใน Resource Manifest ซึ่งอ้างถึง File ที่ต้องถูกโหลดผ่าน Game Extra Content Mounting System.
ตัวอย่าง Category ของ Vehicle Packs อาจมี Meta Files หลายประเภท
จึงต้องรักษา Manifest ให้ตรงกับ Assets จริง
52. รวม Resource ทุกอย่างเป็น Pack เดียวดีไหม
ไม่เสมอไป
Pack เดียว
แก้ง่ายบางกรณี
แต่
Debug ยากA/B Test ยากRestart แยกไม่ได้
Resource ที่ดีควรแบ่งตาม Ownership และ Lifecycle ที่เหมาะสม
ไม่ควรรวมเพียงเพื่อให้จำนวน Folder น้อย
53. Resource เล็กมากหลายร้อยตัวดีไหม
ก็ไม่ใช่ว่าดีเสมอ
การแบ่งละเอียดเกินทำให้
จัดการยากDependency เยอะStartup Config ยาว
ควรแบ่งตามระบบจริง เช่น
police_carscivilian_carshospital_mlocity_clotheshud
มากกว่าหนึ่ง Resource ต่อ File
54. จำนวน Resource ไม่ใช่ KPI เดียว
Server ที่มี
300 Resources
ไม่ได้แปลว่าช้ากว่า
100 Resources
เสมอ
ต้องดูว่าแต่ละ Resource ทำอะไร ใช้ Assets และ Scripts แค่ไหน
ใช้ resmon/Profiler/Streaming Tools เป็นหลักฐานแทนจำนวน Folder.
55. Optimize Download Size อย่างไร
เริ่มจาก
ลบ Assets ไม่ใช้Compress Imagesลด Videoลด Audio ที่ไม่ใช้ลด Texture Variantsตัด Backup Files
แต่ต้องตรวจว่า File เหล่านั้นยัง Reference อยู่หรือไม่
56. อย่าใส่ ZIP Backup ใน Resource
ไฟล์เช่น
backup.zipold.rarsource.psdproject.blend
ไม่ควรอยู่ใน Production Resource หากเกมไม่ได้ใช้
แยก Source Project ไปเก็บ Repository/Storage สำหรับทีมพัฒนา
57. PSD และ Source Files ไม่ใช่ Runtime Asset
Production Resource ควรมีไฟล์ที่เกมต้องใช้จริง
Source Editing Files ควรเก็บแยก
ช่วยให้ Resource สะอาดและลดความสับสนระหว่างแก้ไข
58. Audio Pack ต้อง Optimize เช่นกัน
Custom Vehicle Sounds หรือ UI Audio อาจมี Assets จำนวนมาก
ตรวจ
BitrateDurationDuplicate AudioUnused Files
และอย่ารวม Sound Pack ที่ไม่มี Vehicle ใช้งานแล้ว
59. Map Cache ช่วย Initial Loading ได้
FiveM ระบุ save_gta_cache สำหรับ Resources ที่มี Collision หรือ Map Files จำนวนมากเพื่อเร่ง Initial Loading และมีขั้นตอนเพิ่ม Cache File เข้า Resource Manifest.
จึงเป็นเครื่องมือที่ควรรู้สำหรับ Map Resource ใหญ่
60. Texture Pop-in ให้ Debug Streamer ก่อน
ใช้
strdbg truestrlist truestrmem true
FiveM ระบุว่า strdbg ใช้ดู Loading ใน GTA Streamer, strlist แสดง Registered Entries/Status และ strmem แสดง Streaming Memory.
สามคำสั่งนี้ช่วยแยกปัญหาได้ดีกว่าการเพิ่ม RAM Server แบบเดาสุ่ม
61. GPU 99% ให้มอง Rendering Assets
ถ้า
GPU Usage สูงFPS ต่ำ
ขณะอยู่บริเวณ Map/รถเฉพาะจุด
ให้ A/B Test
TexturesModelsLODNUI Effects
เพราะ cl_drawperf สามารถแสดง GPU Usage และ FPS พร้อมกันได้.
62. CPU สูงให้ดู Resource Scripts
ถ้า
CPU สูงGPU ไม่เต็ม
และ resmon ชี้ Resource บางตัวสูง
ให้ตรวจ
LoopsNative CallsFramework QueriesEntity LogicNUI Messages
ก่อนลด Texture
เพราะ resmon ถูกออกแบบมาเพื่อดู CPU/Memory ของ Resource.
63. FPS ตกเฉพาะจุดหนึ่งของเมือง
นี่เป็นเบาะแสสำคัญ
อาจเกี่ยวกับ
MLOMapPropsPedsVehiclesNUI/Zone Script
ที่ Active ในพื้นที่นั้น
ทดสอบ Resource ของพื้นที่แบบ A/B
64. FPS ตกเฉพาะตอนรถหลายคัน
เน้น
Vehicle ModelsTexturesLODVehicle ScriptsCustom Sound
และเปรียบเทียบกับ Vanilla Vehicles
ถ้า Vanilla หลายคันลื่นแต่ Custom Pack เดียวกันทำ FPS ลด จึงค่อยวิเคราะห์ Pack นั้น
65. FPS ตกเฉพาะตอนเปิด Inventory
เน้น
NUIDOMImagesJavaScript
ไม่ต้องไปลด Polygon ของรถ
การแยก Trigger ของปัญหาช่วยลดเวลาหา Root Cause
66. FPS ตกเฉพาะตอนเข้า MLO
ตรวจ
Interior ModelsTexturesCollisionPropsLightsScripts ที่ทำงานใน Zone
แล้วใช้ Streaming Tools ร่วมกับ Resource Monitor.
67. Server RAM กับ Client Streaming Memory ต่างกัน
อย่าสับสน
FXServer RAM
กับ
Client Streaming Memory
strmem เป็นเครื่องมือฝั่ง Client สำหรับดู Streaming Memory ของ Assets.
ดังนั้นเพิ่ม RAM Server ไม่ได้เป็นคำตอบอัตโนมัติสำหรับ Texture Streaming ฝั่ง Client
68. Internet เร็วก็ยัง FPS ต่ำได้
Download Speed มีผลกับการรับ Resources
แต่หลัง Assets อยู่บน Client แล้ว FPS ยังขึ้นกับ Client-side Rendering/Scripting
ดังนั้น
โหลดเร็ว
ไม่เท่ากับ
เล่นลื่น
69. เครื่องแรงยังเจอ Asset Problem ได้
GPU/VRAM/CPU ที่แรงช่วยรับภาระได้มากขึ้น
แต่ Asset ที่มีปัญหา เช่น
LOD ไม่ดีTexture มากเกินScript Loop ผิด
ยังควรถูกแก้ที่ Resource
ไม่ควรใช้ Hardware แรงเป็นข้ออ้างไม่ Optimize
70. ทดสอบหลายระดับ Hardware
Production Server ควรทดสอบอย่างน้อย
เครื่องระดับกลางเครื่องแรงVRAM ต่างกัน1080p1440p4K
เพราะ Bottleneck ของผู้เล่นแต่ละเครื่องไม่เหมือนกัน
71. อย่าใช้ FPS ของ Developer คนเดียว
Developer อาจใช้
CPU รุ่นสูงGPU รุ่นสูงSSD เร็ว
Resource ที่ดูปกติบนเครื่องนี้อาจมีปัญหากับฐานผู้เล่นจริง
ควรมี Test Clients หลายระดับ
72. ขั้นตอน Optimize แบบมืออาชีพ
ใช้ Flow
BASELINE↓MEASURE↓ISOLATE↓OPTIMIZE↓TEST↓COMPARE↓DEPLOY
อย่าทำ
ลบมั่ว↓Restart↓รู้สึกว่าลื่นขึ้น
73. Baseline ต้องเก็บอะไร
ก่อนแก้จด
FPSCPUGPUResource CPUStreaming MemoryLoad TimeบริเวณทดสอบResource State
FiveM มี cl_drawperf, resmon และ Streaming Tools ช่วยเก็บข้อมูลกลุ่มนี้ได้.
74. A/B Test Resource
ตัวอย่าง
Map ON→ วัดMap OFF→ วัด
หรือ
Vehicle Pack AvsVehicle Pack B
เปลี่ยนตัวแปรครั้งละหนึ่งกลุ่ม
จะรู้ได้ว่าการแก้ใดสร้างผลจริง
75. ถ้า Script หนักใช้ Profiler
FiveM Profiler สามารถใช้ทั้ง Client และ Server เพื่อช่วยหา Threads/Code ที่ทำให้ Resource ใช้เวลาสูง.
อย่า Rewrite Script 5,000 บรรทัดก่อนรู้ว่า Function ไหนหนัก
76. Workflow ตรวจ Assets 10 นาทีแรก
① cl_drawperf true② resmon true③ เข้า Area ที่มีปัญหา④ ดู CPU/GPU/FPS⑤ strmem true⑥ strdbg true⑦ strlist true⑧ ปิด Resource ต้องสงสัย⑨ ทดสอบใหม่⑩ จดผล
คำสั่งเหล่านี้มีอยู่ใน FiveM Client Console Documentation โดย Streaming/Resource Tools บางตัวเป็น Developer Commands.
77. ตารางสรุปอาการและจุดที่ควร Optimize
| อาการ | จุดที่ควรตรวจ |
|---|---|
| เข้า Server ช้า | Resource Size / Downloads |
| Map โหลดไม่ทัน | Streamer / Map Assets |
| Texture หาย | YTD / Streaming |
| FPS ต่ำใน MLO | Model / Texture / Collision / Script |
| FPS ต่ำเมื่อรถเยอะ | Vehicles / LOD / Textures |
| Clothes โหลดช้า | Clothing Assets |
| Inventory เปิดแล้ว FPS ตก | NUI |
| Resource CPU สูง | Script |
| GPU สูง | Rendering Assets |
| Streaming Memory สูง | Stream Assets |
| Map Collision โหลดช้า | Map/Collision Cache |
| โลกหยุดโหลดบางช่วง | strdbg |
| ไม่รู้ Asset ไหนอยู่ใน Streamer | strlist |
| ต้องการดู Streaming Memory | strmem |
78. Checklist Vehicle Assets
☐ Texture Resolution เหมาะสม☐ ไม่มี Livery ที่ไม่ได้ใช้☐ LOD เหมาะสม☐ ไม่มี Duplicate Files☐ Model ไม่ละเอียดเกินความจำเป็น☐ Data Files ครบ☐ Sound Pack ใช้จริง☐ A/B Test แล้ว
79. Checklist Map/MLO
☐ LOD ถูก☐ Texture เหมาะสม☐ Collision ไม่ซับซ้อนเกิน☐ Props ไม่ซ้ำ☐ ไม่มี Invisible Objects ที่ไม่ใช้☐ Streamer ปกติ☐ strmem ตรวจแล้ว☐ strdbg ตรวจแล้ว☐ save_gta_cache พิจารณาแล้วถ้าเหมาะ
save_gta_cache ถูกระบุสำหรับ Resources ที่มี Map/Collision Files จำนวนมาก ไม่จำเป็นต้องใช้ทุก Map.
80. Checklist Clothes/Ped
☐ Texture Variants ที่ใช้จริง☐ Resolution เหมาะสม☐ ไม่มี Packs ซ้ำ☐ ไม่มี Backup Assets☐ Ped Models ใช้ตามความจำเป็น☐ ไม่ Spawn Peds มากเกินโดยไม่จำเป็น
81. Checklist NUI
☐ Images Compress แล้ว☐ Video เท่าที่จำเป็น☐ Fonts เท่าที่ใช้☐ JavaScript Libraries ไม่เกินจำเป็น☐ DOM ไม่ Render ซ้ำ☐ Message ไม่ส่งซ้ำเกินจำเป็น☐ Resource CPU ตรวจด้วย resmon☐ UI ทดสอบหลาย Resolution
82. Checklist Production Resource
☐ ไม่มี .zip Backup☐ ไม่มี .rar Backup☐ ไม่มี PSD ที่ไม่ใช้ Runtime☐ ไม่มี Project Source ที่เกมไม่ใช้☐ fxmanifest สะอาด☐ files ตรงกับ Resource จริง☐ data_file ถูก☐ Dependencies ถูก☐ Restart Resource ผ่าน☐ Reconnect Client ผ่าน
Resource Manifest และ Data File Entries เป็นกลไกที่ FiveM ใช้กำหนด Resource Files/Data ที่เกมต้องโหลด.
83. สิ่งที่ไม่ควรทำเวลา Optimize FiveM
หลีกเลี่ยง
ลด Texture ทุกไฟล์เหลือเล็กสุดลบ Files โดยไม่ตรวจ Referenceรวมทุก Resource เป็น Pack เดียวลบ LOD เพราะคิดว่าไม่ใช้เพิ่ม Draw Distance แก้ Pop-in อย่างเดียวเพิ่ม RAM Server แก้ Texture Streamingปิด Resources หลายสิบตัวพร้อมกันแล้ววัดใช้ FPS เครื่องเดียวตัดสินล้าง Cache ก่อนหา Root Cause
เป้าหมายคือ Optimize โดยมีข้อมูลวัด ไม่ใช่ลดทุกอย่างแบบสุดโต่ง
84. อย่าล้าง Cache เป็นคำตอบแรก
ถ้า Resource มี
Texture ใหญ่Model หนักLOD ไม่ดีScript หนัก
การล้าง Cache ไม่ได้เปลี่ยน Asset เหล่านั้น
ควรใช้ Streaming/Performance Tools หาต้นเหตุจริงก่อน
85. อย่าเพิ่ม Streaming Budget แบบสุ่ม
ถ้า Asset Design ไม่ดี
การพยายามเพิ่มทรัพยากรที่ Client ใช้โดยไม่แก้ Asset อาจเพียงเลื่อนจุดที่ปัญหาเกิด
ควร Optimize
ModelTextureLODResource
ก่อน
86. อย่า Optimize จนภาพเสียทั้ง Server
เป้าหมายคือ
Quality ที่เหมาะสม+Performance ที่ดี
ไม่ใช่
FPS สูงสุดแต่ Texture แตกทั้งหมด
หาค่าที่สมดุลสำหรับประเภท Server และ Hardware กลุ่มเป้าหมาย
87. Priority การ Optimize ที่ควรเริ่มก่อน
ถ้ามี Server ขนาดใหญ่ ให้เริ่มจากสิ่งที่มี Impact สูง
① Map/MLO ใหญ่② Vehicle Packs ใหญ่③ Clothes Packs ใหญ่④ Scripts CPU สูง⑤ NUI หนัก⑥ Assets ย่อย
แต่ Priority จริงควรอิงผลจาก resmon, strmem, strdbg และการทดสอบของ Server นั้น.
88. สูตรจำง่ายสำหรับ Optimize FiveM
DOWNLOAD↓STREAM↓MEMORY↓RENDER↓SCRIPT↓MEASURE
หรือ Debug แบบเครื่องมือ
cl_drawperf↓resmon↓strmem↓strdbg↓strlist↓profiler
เครื่องมือเหล่านี้ครอบคลุมตั้งแต่ภาพรวม Performance, Resource Cost ไปจนถึง GTA Streaming และ Script Profiling.
สรุป วิธี Optimize Assets FiveM ให้โหลดเร็วและลด FPS ตก
การ Optimize FiveM ที่ถูกต้องไม่ควรเริ่มจากการลดไฟล์ทุกอย่างหรือซื้อ Hardware เพิ่มทันที แต่ควรเริ่มจาก วัดก่อนว่า Bottleneck อยู่ตรงไหน
เปิด
cl_drawperf true
เพื่อดู FPS, CPU, GPU, Ping และ Packet Loss จาก Client Performance Metrics ของ FiveM.
จากนั้นใช้
resmon true
เพื่อดู CPU และ Memory ของแต่ละ Resource ถ้าพบ Resource ใช้ Processing สูง ให้ตรวจ Script และใช้ Profiler เจาะ Thread/Code ที่เป็นต้นเหตุ.
หากปัญหาเกี่ยวกับ รถ, Map, MLO, Texture หรือ Streaming Assets ให้ใช้
strmem truestrdbg truestrlist true
โดย strmem ใช้ดู Streaming Memory, strdbg ใช้ดูสิ่งที่ GTA Streamer กำลังโหลด และ strlist ใช้ดู Registered Streaming Entries พร้อม Current Status.
สำหรับ Map Resources ที่มี Collision หรือ Map Files จำนวนมาก FiveM ยังมี
save_gta_cache <resource name>
เพื่อสร้าง Cache Data สำหรับช่วย Initial Loading โดย Cache File ต้องวางใน Root ของ Resource และเพิ่มเข้า Manifest ตามเอกสาร.
ส่วน Vehicle Assets ให้ตรวจ Model, Texture, Livery และ LOD
Map/MLO ให้ตรวจ Models, YTD, Collision, Props และ LOD
Clothes/Ped ให้ตรวจ Texture Variants, Resolution และ Packs ซ้ำ
NUI ให้ตรวจ Images, Fonts, Video, JavaScript, DOM และ Message Frequency
และ Resource ทั้งหมดควรมี fxmanifest.lua ที่สะอาด โดย data_file Entries ต้องตรงกับ Data ที่เกมต้องโหลดผ่าน Extra Content Mounting System.
อย่าตัดสินจากจำนวน Resources หรือจำนวนรถเพียงอย่างเดียว เพราะ Server ที่มี Resources เยอะสามารถทำงานได้ดีกว่า Server ที่มี Resources น้อยแต่แต่ละ Resource ไม่ Optimize
แนวทางของ comsiam คือใช้หลัก Measure → Isolate → Optimize → Compare ทุกครั้ง: วัดก่อน ปิด/เปิด Resource เพื่อแยกต้นเหตุ แก้เฉพาะจุด แล้ววัดใหม่ วิธีนี้ทำให้รู้ว่า FPS เพิ่มเพราะอะไร ลด Streaming Memory จากอะไร และช่วยป้องกันการเสียคุณภาพของทั้ง Server เพียงเพื่อแก้ Asset ตัวเดียว
Comments
Post a Comment