วิธี 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 Models
Vehicle Textures
Map / MLO
Collision
LOD
Clothes
Peds
Props
Audio
NUI Images
Fonts
Video

รวมถึง Data Files ที่ Resource Manifest กำหนดให้เกมโหลดผ่าน Extra Content Mounting System ของ FiveM.

② Optimize Assets ไม่ใช่แค่บีบไฟล์

หลายคนคิดว่า

Optimize
=
ลด MB

จริง ๆ ต้องดูอย่างน้อย

Download Size
Streaming Memory
Rendering Cost
Collision
LOD
Textures
Resource CPU
NUI Rendering

เพราะไฟล์เล็กไม่ได้หมายความว่าจะ Render เบาเสมอ และ Resource ขนาดใหญ่ก็ไม่ได้หมายความว่าจะเป็นต้นเหตุ FPS ต่ำโดยอัตโนมัติ

③ ต้องแยก Download กับ FPS ก่อน

สองปัญหานี้ไม่เหมือนกัน

เข้า Server ช้า

ให้ดูเรื่อง

Download
Resource Files
จำนวน Assets
Map Cache
Network

เข้าแล้ว FPS ตก

ให้ดู

Models
Textures
LOD
Collision
Scripts
NUI
GPU/CPU

การ Optimize ที่ดีต้องรู้ก่อนว่าปัญหาอยู่ช่วง Connection หรือ Gameplay

④ เปิด Performance Metrics ก่อน

ใช้

cl_drawperf true

FiveM ระบุว่าคำสั่งนี้แสดง FPS, Ping, Packet Loss, CPU Usage, GPU Usage และ GPU Temperature.

จึงเหมาะสำหรับสร้าง Baseline ก่อนและหลัง Optimize

⑤ อย่า Optimize จากความรู้สึก

ก่อนแก้ ให้จด

FPS
CPU
GPU
Resource CPU
Streaming Memory
สถานที่
Vehicle
จำนวนผู้เล่น

แล้วทดสอบภายใต้สถานการณ์ใกล้เคียงกัน

ไม่เช่นนั้นอาจคิดว่า Optimize ได้ผลทั้งที่ FPS เปลี่ยนเพราะ Map หรือจำนวน Entities รอบตัว

⑥ resmon ใช้ทำอะไร

FiveM มี

resmon true

เพื่อเปิด Resource Monitor ซึ่งแสดง CPU Usage และ Memory Usage ของ Resources และเหมาะกับการวิเคราะห์ Performance ระหว่าง Gameplay.

ถ้า Resource ชื่อ

vehicle_pack
custom_hud
map_resource

มี Client Processing สูงผิดปกติ ให้ตรวจ Script ของ Resource นั้นเพิ่มเติม

⑦ resmon ไม่ได้วัด Texture ทุกไฟล์

resmon เน้น Resource CPU/Memory Overview

ถ้าต้องการเจาะระบบ GTA Streaming ให้ใช้เครื่องมือกลุ่ม

strdbg
strlist
strmem

ซึ่ง FiveM มีไว้สำหรับตรวจ Streamer โดยเฉพาะ.

⑧ strmem คืออะไร

ใช้

strmem true

FiveM ระบุว่า strmem แสดง Streaming Memory ของ Streaming Assets รายตัว รวมถึง Global Overview.

นี่เป็นหนึ่งในเครื่องมือสำคัญเมื่อสงสัยว่า

รถ
Map
Textures
Clothes

กำลังใช้ 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

คำสั่งอย่าง

resmon
strdbg
strlist
strmem

อยู่ในกลุ่ม Developer Commands และ FiveM ระบุว่าอาจขึ้น Access denied หรือถูก Disabled ใน Production Mode หาก Client ไม่ได้อยู่ใน Developer Mode.

ดังนั้น Access Denied ไม่ได้หมายความว่าคำสั่งถูกลบ

⑫ เริ่ม Optimize รถ FiveM จากอะไร

ตรวจ

Model
Textures
LOD
จำนวน Variants
Livery
Vehicle Pack
Sound
Scripts

ก่อน

รถหนึ่งคันอาจไม่ได้หนักเพราะ Model อย่างเดียว แต่รวม Texture/Livery และ Data ที่เกี่ยวข้องด้วย

⑬ รถ 100 คันไม่ได้เท่ากับหนักกว่ารถ 20 คันเสมอ

จำนวนไฟล์เป็นเพียงตัวแปรหนึ่ง

ต้องดูว่า

แต่ละคันหนักแค่ไหน
Texture ใหญ่แค่ไหน
LOD มีไหม
มี Variant ซ้ำหรือไม่

ดังนั้นอย่า Optimize โดยลบรถจากจำนวนอย่างเดียว

⑭ ตรวจ Texture รถก่อน

รถ Custom มักมี Texture Dictionary เช่น YTD

สิ่งที่ควรตรวจ

ความละเอียด Texture
จำนวน Textures
Livery
Texture ซ้ำ
Normal/Specular Maps

หาก Texture ใหญ่เกินสิ่งที่ผู้เล่นเห็นจริง ควรลดตามความเหมาะสม

⑮ Texture ทุกชิ้นไม่จำเป็นต้อง 4K

ชิ้นเล็ก ๆ เช่น

Logo เล็ก
Button
Badge
รายละเอียดภายในเล็ก

อาจไม่ต้องใช้ Resolution สูงเท่าพื้นผิวรถใหญ่

แนวทางคือใช้ Resolution ตามพื้นที่ที่ Texture ถูกเห็นจริง

⑯ อย่าลด Texture ทุกอย่างจนแตก

Optimize ไม่ได้แปลว่า

4096
↓
512

ทุกไฟล์

ต้องรักษาความสมดุลระหว่าง

Visual Quality
Streaming Memory
VRAM/GPU Cost

แล้วทดสอบในเกมจริง

⑰ Livery จำนวนมากควรตรวจ

รถหนึ่งคันอาจมี

Police Livery 1
Police Livery 2
Police Livery 3
...

หากทุก Livery ใช้ Texture ความละเอียดสูงมาก Pack เดียวสามารถสะสม Asset Cost ได้

ควรเก็บเฉพาะลายที่ใช้งานจริง

⑱ ลบ Files ที่ไม่ใช้

Pack ที่ผ่านการแก้หลายรอบอาจมี

old
backup
test
unused

อยู่ใน Resource

ควรตรวจก่อนลบว่าถูก Reference หรือไม่ แล้วค่อยตัด Assets ที่ไม่มีผู้ใช้งาน

⑲ รถที่ไม่มี LOD ต้องระวัง

LOD ช่วยให้เกมใช้ Representation ที่เหมาะสมเมื่อวัตถุอยู่ไกล

ถ้า Custom Asset ใช้รายละเอียดสูงตลอดในระยะที่ไม่จำเป็น ก็มีโอกาสสร้าง Rendering Cost มากกว่าที่ควร

จึงควรตรวจ LOD Structure ของรถและ Models ขนาดใหญ่

⑳ Map/MLO เป็น Assets ที่ต้องให้ความสำคัญมาก

Map อาจมี

YMAP
YTYP
YDR
YTD
YBN

รวมหลายไฟล์

ดังนั้น 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 สำหรับ

HUD
Inventory
Simple Lua Script

ทุกชนิด

㉗ MLO ควร Optimize Rooms และ Content

อย่าวาง Objects จำนวนมากเพียงเพราะ Editor รองรับ

ตรวจ

Props
Decorations
Lights
Materials
Textures
Collision
LOD

ว่ามีสิ่งใดซ้ำหรือมองไม่เห็นจริง

㉘ Object ด้านหลังผนังยังต้องคิด

แม้ผู้เล่นมองไม่เห็นด้วยสายตาตลอดเวลา Resource และ Game ยังต้องจัดการ Asset/Data ที่เกี่ยวข้องตามระบบ Streaming/Rendering

จึงควรลบ Geometry และ Props ที่ไม่มีประโยชน์จริงเมื่อ Asset Pipeline อนุญาต

㉙ Collision ไม่ควรละเอียดเท่า Mesh เสมอไป

Visual Mesh อาจมีรายละเอียดสูง

แต่ Collision ไม่จำเป็นต้องตามทุก Curve เล็ก ๆ หาก Gameplay ไม่ต้องการ

Collision ที่เรียบพอสำหรับการเดิน/ขับชนมักดูแลง่ายกว่า

แต่ต้องทดสอบ

เดิน
วิ่ง
รถ
Bullet
Physics

ตาม Use Case

㉚ Map ใหญ่ควรมี LOD

Assets ที่มองเห็นจากระยะไกลควรมี LOD Strategy ที่เหมาะสม

ถ้า Server มีเมือง Custom ขนาดใหญ่แต่ทุก Object ใช้ High-detail Model จนไกลมาก Performance อาจลดลง

㉛ Pop-in ไม่ได้แปลว่าต้องเพิ่ม Draw Distance เสมอ

ถ้า Map Pop-in

อย่าเพิ่ม Draw Distance อย่างเดียว

ให้ตรวจ

LOD
Asset Structure
Streamer Status
Texture
Collision

ผ่านเครื่องมือ Streaming ก่อน.

การเพิ่มระยะโดยไม่แก้ Asset อาจเพิ่มภาระมากกว่าเดิม

㉜ Optimize เสื้อผ้า FiveM อย่างไร

ตรวจ

จำนวน Drawables
Texture Variants
Texture Resolution
ไฟล์ที่ไม่ได้ใช้
Duplicates

โดยเฉพาะ Server ที่มี Clothing Packs หลายชุดซ้อนกัน

㉝ เสื้อผ้า Texture ใหญ่ทุก Variant ไม่จำเป็น

เสื้อหนึ่งตัวอาจมี

ดำ
ขาว
แดง
น้ำเงิน
ลาย 1
ลาย 2

ถ้าแต่ละ Variant เป็น Texture ใหญ่ทั้งหมด Asset Cost จะสะสม

ควรใช้ Resolution ที่เหมาะกับพื้นที่บนตัวละครและระยะที่ผู้เล่นมองเห็น

㉞ Clothes Pack เก่ากับใหม่อาจซ้ำ

หลัง Update อาจมี Resource

clothes_old
clothes_new

ทำงานพร้อมกันโดยไม่ได้ตั้งใจ

นอกจากสร้างความสับสนเรื่องลำดับแล้ว ยังทำให้ Server เก็บ Assets ที่ไม่ต้องการเพิ่ม

ตรวจ server.cfg และ Resource Startup List

㉟ Custom Ped ก็ต้อง Optimize

Ped มี

Model
Textures
Skeleton/Rig
Clothing
Props

ถ้าใช้ Model รายละเอียดสูงมากกับ NPC หลายตัวพร้อมกัน Client Load สามารถเพิ่มขึ้นได้

ควรใช้ Custom Ped ตามความจำเป็นจริง

㊱ Props จำนวนมากต้องดูทั้ง Asset และ Spawn Logic

มีสองเรื่อง

Prop Asset
+
จำนวน Prop Entities ที่ Spawn

Model เบาแต่ Spawn หลายร้อย/หลายพัน Entities ก็อาจสร้างภาระคนละแบบ

อย่าดู File Size อย่างเดียว

㊲ NUI ก็เป็น Asset เช่นกัน

NUI Resource อาจมี

HTML
CSS
JavaScript
PNG
WebP
SVG
Fonts
Video
Audio

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 โหลด

Thin
Light
Regular
Medium
SemiBold
Bold
ExtraBold
Black

แต่ใช้จริงเพียง

Regular
Bold

ควรตัด Font Weights ที่ไม่ใช้

㊶ JavaScript Library ที่ไม่ใช้ควรถอด

เช่น Resource ถูก Copy มาจาก Template แล้วมี Packages/Files ที่ไม่ได้ใช้จริง

ลดสิ่งที่ Browser ต้อง Parse/Load และทำให้ Resource ดูแลง่ายขึ้น

㊷ Optimize NUI ไม่ใช่แค่ Files

ต้องดู Runtime ด้วย

SendNUIMessage
JavaScript
DOM Updates
Animations
Timers

ถ้า 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 Problem

while true + งานหนัก
→ Script Problem

NUI animation หนัก
→ UI Rendering Problem

แม้ผู้เล่นจะเรียกรวมว่า

Server หนัก

แต่แนวทางแก้ต่างกัน

㊺ วิธีหาว่ารถ Pack ไหนหนัก

ทำ A/B Test

Baseline
↓
เปิด Pack A
↓
วัด

ปิด Pack A
↓
เปิด Pack B
↓
วัด

แล้วใช้

strmem
strdbg
FPS
GPU

เปรียบเทียบ

อย่า Disable รถ 20 Packs พร้อมกันแล้วสรุปไม่ได้ว่าตัวไหนเป็นต้นเหตุ

㊻ วิธีหา Map ที่หนัก

ทดสอบ Resource ทีละตัวใน Development Server

Map A ON
Map B OFF

แล้วสลับ

เดิน/ขับผ่านพื้นที่เดิม

ดู

FPS
GPU
Streaming
Texture Pop-in
Collision

จากนั้นค่อย Optimize Map ที่มีหลักฐานชัด

㊼ ใช้ Developer Server สำหรับ Optimize

อย่าทดลองลบ Assets กลาง Production โดยไม่มี Backup

ควรมี

Production
Development/Test

แยกกัน

โดยเฉพาะ Map, Cars และ Clothes ที่ผู้เล่นใช้ต่อเนื่อง

㊽ ทำ Backup ก่อน Optimize

ก่อน

ลด Texture
แก้ Model
แก้ Collision
ลบ Files
รวม Resources

ควรเก็บ Version เดิม

เพราะ Optimize บางอย่างอาจทำให้

Texture หาย
Collision แตก
Vehicle Crash
Clothes เพี้ยน

ได้

㊾ อย่าลบ File จากชื่ออย่างเดียว

ไฟล์ที่ดูเหมือน

unused
old
extra

อาจยังถูก 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_cars
civilian_cars
hospital_mlo
city_clothes
hud

มากกว่าหนึ่ง 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.zip
old.rar
source.psd
project.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 จำนวนมาก

ตรวจ

Bitrate
Duration
Duplicate Audio
Unused 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 true
strlist true
strmem 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

Textures
Models
LOD
NUI Effects

เพราะ cl_drawperf สามารถแสดง GPU Usage และ FPS พร้อมกันได้.

62. CPU สูงให้ดู Resource Scripts

ถ้า

CPU สูง
GPU ไม่เต็ม

และ resmon ชี้ Resource บางตัวสูง

ให้ตรวจ

Loops
Native Calls
Framework Queries
Entity Logic
NUI Messages

ก่อนลด Texture

เพราะ resmon ถูกออกแบบมาเพื่อดู CPU/Memory ของ Resource.

63. FPS ตกเฉพาะจุดหนึ่งของเมือง

นี่เป็นเบาะแสสำคัญ

อาจเกี่ยวกับ

MLO
Map
Props
Peds
Vehicles
NUI/Zone Script

ที่ Active ในพื้นที่นั้น

ทดสอบ Resource ของพื้นที่แบบ A/B

64. FPS ตกเฉพาะตอนรถหลายคัน

เน้น

Vehicle Models
Textures
LOD
Vehicle Scripts
Custom Sound

และเปรียบเทียบกับ Vanilla Vehicles

ถ้า Vanilla หลายคันลื่นแต่ Custom Pack เดียวกันทำ FPS ลด จึงค่อยวิเคราะห์ Pack นั้น

65. FPS ตกเฉพาะตอนเปิด Inventory

เน้น

NUI
DOM
Images
JavaScript

ไม่ต้องไปลด Polygon ของรถ

การแยก Trigger ของปัญหาช่วยลดเวลาหา Root Cause

66. FPS ตกเฉพาะตอนเข้า MLO

ตรวจ

Interior Models
Textures
Collision
Props
Lights
Scripts ที่ทำงานใน 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 ต่างกัน
1080p
1440p
4K

เพราะ Bottleneck ของผู้เล่นแต่ละเครื่องไม่เหมือนกัน

71. อย่าใช้ FPS ของ Developer คนเดียว

Developer อาจใช้

CPU รุ่นสูง
GPU รุ่นสูง
SSD เร็ว

Resource ที่ดูปกติบนเครื่องนี้อาจมีปัญหากับฐานผู้เล่นจริง

ควรมี Test Clients หลายระดับ

72. ขั้นตอน Optimize แบบมืออาชีพ

ใช้ Flow

BASELINE
↓
MEASURE
↓
ISOLATE
↓
OPTIMIZE
↓
TEST
↓
COMPARE
↓
DEPLOY

อย่าทำ

ลบมั่ว
↓
Restart
↓
รู้สึกว่าลื่นขึ้น

73. Baseline ต้องเก็บอะไร

ก่อนแก้จด

FPS
CPU
GPU
Resource CPU
Streaming Memory
Load Time
บริเวณทดสอบ
Resource State

FiveM มี cl_drawperf, resmon และ Streaming Tools ช่วยเก็บข้อมูลกลุ่มนี้ได้.

74. A/B Test Resource

ตัวอย่าง

Map ON
→ วัด

Map OFF
→ วัด

หรือ

Vehicle Pack A
vs
Vehicle 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 ต่ำใน MLOModel / 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 ไหนอยู่ใน Streamerstrlist
ต้องการดู Streaming Memorystrmem

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

Model
Texture
LOD
Resource

ก่อน

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 true
strdbg true
strlist 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

Popular posts from this blog

FiveM ยังน่าเล่นไหม? Enhanced เปลี่ยน FiveM แค่ไหน

FiveM คืออะไร เล่นอย่างไร สำหรับมือใหม่ เริ่มต้นตั้งแต่ศูนย์

วิธีตั้ง Admin Permission ด้วย add_ace และ add_principal FiveM แบบละเอียด