วิธี Optimize Map FiveM ให้โหลดเร็วและลด FPS ตก แบบละเอียด
การ Optimize Map FiveM ไม่ได้หมายถึงการลดขนาดไฟล์ ZIP เพียงอย่างเดียว แต่ต้องลดภาระที่ Client ใช้กับ Model, Texture, Materials, LOD, Collision, Props, Streaming และ Scripts พร้อมตรวจว่าผู้เล่นยังเห็น Map ได้สวยและใช้งานได้ถูกต้อง
Cfx.re มี Workflow สำหรับ Map Assets แยกเป็นหลายส่วน ตั้งแต่การสร้าง Drawable/YTYP, วาง Assets ด้วย YMAP, ทำ Collision และสร้าง HD/LOD Models ซึ่งสะท้อนว่า Performance ของ Map ต้องดูทั้ง Asset Pipeline ไม่ใช่แก้ไฟล์ชนิดเดียว.
FiveM ยังมีเครื่องมืออย่าง strdbg, strlist, strmem, resmon และ save_gta_cache สำหรับตรวจ Streaming, Memory, Resource Runtime และ Initial Loading โดยตรง.
บทความนี้จาก comsiam จะพา Optimize Map แบบเป็นขั้นตอน ตั้งแต่หา Asset ตัวหนักไปจนถึงการวัดผลก่อนและหลังแก้
FiveM Map หนักดูจากอะไร
อาการที่มักบอกว่า Map ควรถูกตรวจ Optimization ได้แก่
FPS ลดเมื่อหันกล้องไปหา Map
Texture ค่อย ๆ ชัด
Object โผล่ช้า
อาคารหายเมื่ออยู่ไกล
เข้า MLO แล้ว FPS ลดทันที
Props โหลดไม่ทัน
World Streaming สะดุด
Resource มี Scripts ใช้ CPU สูง
Initial Loading ของ Map ใช้เวลานาน
Map ปกติเมื่อเปิดเดี่ยว แต่หนักเมื่อเปิดหลาย Resources
ต้องแยกก่อนว่าเป็น Asset Rendering, Streaming หรือ Script Runtime เพราะ FiveM มีเครื่องมือคนละชุดสำหรับแต่ละปัญหา.
① Backup Map ก่อน Optimize
ก่อนแก้ควรเก็บ
map_original/
map_optimized/
แยกกัน
หรือใช้ Version Control
อย่า Optimize ทับ Production Resource โดยตรง เพราะหาก
Texture หาย
Collision พัง
LOD ผิด
Model ไม่ขึ้น
จะย้อนกลับได้ยาก
② วัดก่อนแก้เสมอ
อย่าเริ่มลด Assets โดยไม่มี Baseline
เลือกตำแหน่งทดสอบ เช่น
Police Station Entrance
แล้วบันทึก
FPS
CPU Usage
GPU Usage
เวลาที่ Texture โหลดครบ
Object Pop-in
Resource CPU/Memory
FiveM มี cl_drawperf สำหรับแสดง FPS, Ping, Packet Loss, CPU และ GPU Metrics ขณะเล่น.
ใช้
cl_drawperf true
ก่อนและหลัง Optimize
③ Test Map ตัวเดียวก่อน
ถ้ามี Maps 30 ตัว อย่า Optimize ทั้งหมดพร้อมกัน
ทดสอบ
Map ที่ต้องการ Optimize ON
Maps ใกล้เคียง OFF
ก่อน
หาก FPS ยังต่ำ แสดงว่าตัว Map เองควรถูกตรวจ
แต่ถ้า Map เดี่ยวปกติแล้วหนักเมื่อเปิด Resource อื่นร่วมกัน ควรตรวจ Asset Budget รวมและ Conflict
④ แยก Client FPS ออกจาก Server Lag
ถ้าอาการคือ
หันกล้องไปหาอาคาร
↓
FPS ตก
ควรตรวจ
Model
Texture
Materials
Props
LOD
แต่ถ้า Server มี Hitch หรือ Resource CPU สูง ควรตรวจ Scripts
Cfx.re ระบุว่า Hitch Warnings สามารถเกิดจาก Resources ที่ทำงานไม่ดี เช่น Unoptimized Loops หรือ Query ที่ใช้เวลานาน และ Profiler/Resmon ใช้ช่วยวิเคราะห์ Runtime ได้.
⑤ ใช้ resmon ตรวจ Script ก่อน
เปิด
resmon true
FiveM Resource Monitor แสดง CPU และ Memory Usage ของแต่ละ Resource ฝั่ง Client และเหมาะสำหรับหา Resource ที่ใช้เวลาประมวลผลสูงระหว่าง Gameplay.
ถ้า Map Package มี
client.lua
door.lua
elevator.lua
interaction.lua
และ Resource Time สูง ต้องแก้ Script แยกจาก Model
⑥ อย่าใช้ resmon วัด Polygon
resmon ใช้ดู Resource Runtime CPU/Memory ไม่ได้บอกจำนวน Polygon ของ YDR โดยตรง.
ดังนั้นหาก
resmon ปกติ
แต่ FPS ตกเมื่อมองอาคาร
ยังต้องตรวจ Map Assets ต่อ
⑦ ใช้ Profiler เมื่อ Resource Script หนัก
FiveM มี Built-in Profiler สำหรับวิเคราะห์ Resource ที่ใช้เวลาประมวลผลสูงทั้ง Client และ Server.
เหมาะเมื่อ
Map Resource
+
Gameplay Script
อยู่ใน Package เดียวกันและต้องแยกว่าอะไรเป็นต้นเหตุ
⑧ ตรวจ YDR ก่อน
YDR เป็น Drawable/Model Asset
Map ที่มี Model
Geometry สูงมาก
Materials มาก
ไม่มี LOD
ถูกวางซ้ำจำนวนมาก
ควรถูกตรวจเป็นลำดับต้น ๆ
Official Cfx.re LOD Workflow แนะนำให้สร้าง LOD Model ที่มี Geometry และ Materials เรียบง่ายกว่า HD Model.
⑨ Polygon เยอะต้องลดเสมอไหม
ไม่ควรลดแบบสุ่ม
ให้ดูว่า Geometry นั้นผู้เล่นมองเห็นจริงหรือไม่
ตัวอย่างควรพิจารณาตัด
Geometry ด้านในที่ไม่มีใครเห็น
รายละเอียดจิ๋วบนหลังคา
Decoration ที่มองไม่เห็นจาก Gameplay Area
แต่ควรรักษา
Silhouette
ประตู
ช่องทางเดิน
ขอบอาคารสำคัญ
LOD ควรเป็น Simplified Version มากกว่า Model ที่ถูกลดจนเสียรูป.
⑩ อย่า Optimize ด้วย Polygon อย่างเดียว
Cfx.re ระบุว่า LOD Model ควรลดทั้ง
Geometry
+
Materials
ไม่ใช่เพียง Geometry.
ดังนั้น Model Polygon ลดลงแต่ยังมี Materials จำนวนมากก็ยังควรถูกตรวจต่อ
⑪ Materials เยอะควรลดไหม
ควรพิจารณารวม Materials ที่สามารถใช้ Texture/Shader ร่วมกันได้ โดยไม่ทำลายคุณภาพและ Workflow ของ Asset
ตัวอย่างอาคารหนึ่งหลังไม่จำเป็นต้องมี Materials แยกจำนวนมากสำหรับพื้นผิวที่แทบไม่ต่างกัน
แต่ไม่ควร Merge Materials แบบสุ่ม เพราะอาจทำให้
UV ผิด
Shader ผิด
Texture References เสีย
⑫ ตรวจ YTD และ Texture
Texture เป็นอีกส่วนที่ควรตรวจอย่างหนัก
โดยเฉพาะ Assets ที่ใช้
4K
8K
หลายไฟล์
Texture Resolution สูงควรใช้เฉพาะจุดที่ผู้เล่นมองเห็นรายละเอียดจริง ไม่ใช่ทุก Object
FiveM มี strmem สำหรับแสดง Streaming Memory ที่ Streaming Assets แต่ละรายการใช้ รวมถึงภาพรวม Memory.
⑬ ใช้ strmem หา Asset ที่ใช้ Memory
เปิด Developer Mode แล้วใช้
strmem true
Cfx.re ระบุว่า strmem แสดง Streaming Memory ของ Assets รายตัวและ Global Overview.
นี่มีประโยชน์มากเมื่อ Server มี
Maps
MLO
Cars
Clothes
Props
พร้อมกันจำนวนมาก
⑭ Texture 4K ทุกชิ้นไม่จำเป็น
ตัวอย่าง
ป้ายขนาดใหญ่
อาจสมเหตุสมผลที่จะละเอียด
ขวดเล็กบนโต๊ะ
ไม่จำเป็นต้องใช้ 4K
Object มองจากไกล
ไม่จำเป็นต้องเก็บรายละเอียดระดับเดียวกับ Object ที่ผู้เล่นยืนติด
หลักคือ Resolution ต้องสัมพันธ์กับ ขนาดบนหน้าจอและระยะใช้งาน
⑮ ลด Texture ต้องระวังอะไร
อย่าลดทุก Texture เท่ากัน
แยกก่อนว่าเป็น
Diffuse
Normal
Specular
Alpha
Logo
เพราะ Asset Pipeline ของ Cfx.re ใช้ Texture หลายประเภทกับ Shader Materials และ UV Mapping.
ลดผิดประเภทอาจทำให้
Normal แตก
Alpha เสีย
Logo อ่านไม่ได้
⑯ Shared Texture ควรใช้หรือไม่
ถ้า Objects หลายตัวใช้ Texture เดียวกันจริง การจัด Shared Texture Dictionary อย่างเป็นระบบสามารถลด Duplicate Content ใน Project ได้
แต่ต้อง Documentation ให้ชัดว่า YDR ใดใช้ Texture Set ใด
ไม่เช่นนั้นลบ Shared YTD หนึ่งตัวอาจทำให้ Assets หลายตัวขาวพร้อมกัน
⑰ ลบ Texture ที่ไม่ได้ใช้
สามารถลดขยะใน Asset ได้ แต่ต้องตรวจ Reference ก่อน
อย่าลบเพราะ
ชื่อ Texture ดูไม่เกี่ยว
เพียงอย่างเดียว
ควรเปิด Asset ใน Tooling และตรวจ Material References ก่อน
⑱ LOD คือหัวใจของ Map ใหญ่
สำหรับ
อาคารใหญ่
Airport
Island
Racetrack
City Expansion
ควรมี LOD ที่เหมาะสม
Cfx.re Workflow ใช้ HD Model + LOD Model โดย LOD ลด Geometry/Materials และเชื่อมผ่าน HD/LOD YMAP Hierarchy.
⑲ อย่าเพิ่ม LodDist สูงมากเพื่อแก้ Pop-in
การเพิ่ม
LodDist
อย่างเดียวอาจทำให้ HD Model ถูกใช้ไกลขึ้นแทนที่จะลดภาระ
แนวทางที่เหมาะกว่าคือ
HD Model
↓
LOD Model
↓
ระยะ Transition ที่เหมาะสม
ตาม Workflow ของ Cfx.re.
⑳ ตรวจ HD และ LOD ว่าตรงตำแหน่งกัน
Official LOD Workflow วาง HD และ LOD Entities ที่ตำแหน่งเดียวกันก่อนเชื่อม Hierarchy.
ถ้าไม่ตรงอาจเกิด
ใกล้ → อาคารจุด A
ไกล → อาคารกระโดดไปจุด B
ซึ่งดูเหมือน Streaming Error แต่จริง ๆ เป็น LOD Transform Problem
㉑ ตรวจ LodLevel
ใน Workflow ตัวอย่างของ Cfx.re
HD ใช้
LODTYPES_DEPTH_HD
และ LOD ใช้
LODTYPES_DEPTH_LOD
พร้อมกำหนด LodDist/ChildLodDist และ Parent/Child Relationship.
หาก Level ผิด Transition อาจทำงานไม่ถูกต้อง
㉒ ตรวจ Parent/Child YMAP
Official LOD Workflow ใช้ LOD YMAP เป็น Parent ของ HD YMAP และกำหนด Hierarchy ระหว่าง Entities.
หาก Merge Map แล้ว
เปลี่ยนชื่อ YMAP
ลบ LOD YMAP
ทำ Parent Reference หาย
LOD อาจพังแม้ Models ยังอยู่ครบ
㉓ Generate _manifest.ymf ตาม Workflow
หลังสร้าง HD/LOD Hierarchy Cfx.re ให้ใช้ CodeWalker Manifest Generator และบันทึก _manifest.ymf เพื่อให้ Setup โหลดตาม Workflow ตัวอย่าง.
อย่าลบไฟล์นี้เพียงเพราะมีขนาดเล็กหาก Project ใช้มัน
㉔ Calculate Extents และ Flags
สำหรับ YMAP Workflow Cfx.re ให้ใช้
Calculate Extents
Calculate All Flags
ก่อนบันทึก Map.
หลังเพิ่ม/ลบ Props หรือแก้ Map Structure จึงควรคำนวณใหม่ตาม Workflow
㉕ Props คือจุดที่ Map มักหนักโดยไม่รู้ตัว
MLO ร้านเล็ก ๆ อาจมี
ขวด 300
จาน 150
เก้าอี้ 80
Decoration 500
ทำให้จำนวน Entities สูงมากทั้งที่พื้นที่เล็ก
ให้ถามทุก Object ว่า
ผู้เล่นเห็นจริงไหม
จำเป็นกับ Gameplay ไหม
ถ้าไม่ ควรพิจารณาลด
㉖ อย่าใส่ Props ที่มองไม่เห็น
ตัวอย่าง
ของตกแต่งหลังผนัง
Model ซ่อนใต้พื้น
Objects ทดลอง
Props ที่ถูก Asset อื่นปิดทับ
ควรถูกลบจาก Production Map หากยืนยันว่าไม่ใช้
การลดจำนวน Entities ช่วยให้ Scene และ Resource มีความเรียบง่ายขึ้น
㉗ Duplicate Props ต้องตรวจ
หลัง Merge YMAP อาจเกิด
โต๊ะ 2 ตัวซ้อน
กำแพง 2 ชั้น
ไฟ 2 ชุด
นอกจากทำให้ Rendering ซ้ำ ยังอาจเกิด Z-fighting หรือ Collision ซ้ำ
ดังนั้นควรตรวจ Duplicate Entities ใน CodeWalker ก่อน Production
㉘ Map Conflict ทำให้ดูเหมือน Map หนักได้
ถ้า Maps สอง Resources วาง Geometry ตำแหน่งเดียวกัน ผู้เล่นอาจต้อง Render Content ซ้ำโดยไม่จำเป็น
ทดสอบ
Map A ON
Map B OFF
เทียบกับ
Map A ON
Map B ON
หาก FPS ลดเฉพาะรอบสอง ให้ตรวจ Conflict ก่อน Optimize Model ตัวเดียว
㉙ Collision ก็ต้อง Optimize
Cfx.re Collision Workflow รองรับทั้ง Collision Mesh และ Primitive Shapes เช่น Box ผ่าน Bounds Structure.
จึงไม่จำเป็นต้องใช้ Visual Geometry ทุก Polygon เป็น Collision
ควรให้ Collision
ง่าย
แต่ Gameplay ถูกต้อง
㉚ อย่า Copy Visual Mesh เป็น Collision ทั้งก้อน
อาคารอาจมีรายละเอียด
ร่อง
ขอบ
น็อต
Decoration
ซึ่งผู้เล่นไม่จำเป็นต้องชนทั้งหมด
Primitive หรือ Simplified Mesh สามารถเหมาะกว่าในหลายพื้นที่ โดย Cfx.re รองรับ Collision Shapes ผ่าน Bound GeometryBVH Workflow.
㉛ Collision ซ้ำต้องลบ
Map A และ Map B อาจมี Collision ตำแหน่งเดียวกัน
ผลคือ
เดินติด
รถเด้ง
Physics แปลก
Invisible Wall
นี่เป็น Conflict มากกว่า Performance เพียงอย่างเดียว แต่ควรถูกแก้ระหว่าง Optimization
㉜ ใช้ strdbg ตรวจ Streaming
ใน Developer Mode ใช้
strdbg true
Cfx.re ระบุว่า strdbg แสดงสิ่งที่ GTA Streamer กำลังโหลดและช่วยตรวจปัญหา Streaming เช่น World หยุดโหลด.
เหมาะเมื่อ
Object หาย
Map โหลดไม่ทัน
Streaming สะดุด
㉝ ใช้ strlist ตรวจ Entries
ใช้
strlist true
เพื่อเปิด Interface แสดง Entries ที่ลงทะเบียนอยู่ใน GTA Streamer และสถานะปัจจุบัน.
ช่วยแยกว่า Asset ถูก Stream อยู่จริงหรือไม่
㉞ Developer Commands อาจต้องเปิด Developer Mode
Cfx.re ระบุว่า resmon, strdbg และ Developer Commands หลายตัวอาจถูกปิดใน Production Mode และต้องเปิด Developer Mode ตามวิธีที่ Documentation กำหนด.
ดังนั้นถ้าเจอ
Access denied
ไม่ได้หมายความว่าคำสั่งไม่มีอยู่
㉟ ใช้ cl_drawperf ดู GPU ก่อน
เปิด
cl_drawperf true
FiveM จะแสดง FPS พร้อม CPU/GPU Metrics รวมถึง Ping และ Packet Loss.
ถ้า
GPU Usage สูง
FPS ลด
เมื่อมอง Map
ควรเน้น Visual Assets มากกว่า Server Network
㊱ Ping สูงไม่ใช่สาเหตุของ FPS ตก
cl_drawperf แยก Ping, Packet Loss, CPU, GPU และ FPS เป็นคนละ Metrics.
ดังนั้น
Ping ต่ำ
FPS ต่ำ
สามารถเกิดพร้อมกันได้
และแสดงว่าควรตรวจ Rendering/Client Performance เพิ่ม
㊲ Map โหลดช้าไม่ใช่ Internet เสมอไป
ถ้า Assets ถูก Download แล้ว แต่
Texture ค่อยชัด
Object ค่อยโผล่
ให้ตรวจ GTA Streamer และ Streaming Memory ด้วย strdbg, strlist และ strmem.
อย่าเพิ่ม Network Bandwidth ก่อนรู้ว่าปัญหาอยู่ตรงไหน
㊳ Map/Collision เยอะมากใช้ save_gta_cache ได้ไหม
ได้ในกรณีที่ตรงวัตถุประสงค์
Cfx.re ระบุว่า
save_gta_cache <resource name>
ใช้สร้าง Cache Data สำหรับ Resource ที่มี Map หรือ Collision Files จำนวนมาก เพื่อช่วยให้ Initial Loading ของผู้เล่นเร็วขึ้น.
ตัวอย่าง
save_gta_cache city_map
㊴ save_gta_cache ต้องทำอะไรต่อ
Cfx.re ระบุว่า Cache File ที่สร้างขึ้นต้องถูกนำไปไว้ที่ Root Folder ของ Resource และประกาศใน fxmanifest.lua ผ่าน files.
ตัวอย่างโครงสร้างเชิงแนวคิด
city_map/
├── fxmanifest.lua
├── city_map_cache_y.dat
└── stream/
และ Manifest เช่น
files {
'city_map_cache_y.dat'
}
ชื่อไฟล์จริงต้องตรงกับ Cache ที่สร้าง.
㊵ save_gta_cache ไม่ใช่ Map Optimizer
มันไม่ได้
ลด Polygon
ลด Texture
สร้าง LOD
ลบ Props
Simplify Collision
แก้ Script
หน้าที่ตาม Documentation คือช่วย Initial Loading สำหรับ Resource ที่มี Map/Collision Files จำนวนมาก.
ดังนั้น Asset ยังหนักก็ต้อง Optimize Asset อยู่ดี
㊶ ไม่ต้องใช้ save_gta_cache กับทุก MLO
Cfx.re ระบุให้ใช้กับ Resources ที่มี Collision หรือ Map Files ในปริมาณมาก.
ร้านเล็กหรือ MLO ขนาดเล็กไม่ควรถูกใส่ Cache Workflow เพียงเพราะคิดว่า “มี Cache แล้วเร็วกว่าเสมอ”
ต้องดูอาการจริง
㊷ แยก Map Resources ให้ Debug ง่าย
ตัวอย่าง
resources/
└── [maps]/
├── police/
├── hospital/
├── island/
├── airport/
└── businesses/
ดีกว่า Merge Maps ทุกแห่งเป็น Resource เดียว หากไม่มีเหตุผลทางเทคนิคให้รวม
Resource ที่แยกช่วยให้เปิด/ปิดเพื่อทำ Isolation Test ได้ง่าย
㊸ ไม่จำเป็นต้อง Merge เพื่อลดจำนวน Resources
จำนวน Resource ไม่ใช่ตัววัด Performance โดยตรง
Resource หนึ่งอาจหนักมากกว่า 20 Resources เล็ก ๆ
ควรวัดจาก
Asset Complexity
Streaming
Runtime
มากกว่าจำนวน Folder
FiveM resmon ใช้ดู Resource CPU/Memory ขณะเดียวกัน strmem ใช้ดู Streaming Memory ของ Assets จึงสามารถวัดสองด้านแยกกัน.
㊹ แยก Map Asset ออกจาก Script ถ้าเหมาะสม
ตัวอย่าง
police_map/
police_doorlock/
police_job/
ช่วยให้
Map FPS Problem
ไม่ปนกับ
Script CPU Problem
และสามารถใช้ Resmon/Profiler วิเคราะห์ Runtime ได้ง่ายขึ้น.
㊺ อย่าลบ fxmanifest.lua หรือ Map Metadata
Resource Manifest คือส่วนสำคัญของ Resource และ FiveM ใช้ fxmanifest.lua เพื่อกำหนด Metadata, Scripts, Files และข้อมูลอื่นของ Resource.
Optimization ไม่ควรหมายถึง
ลบไฟล์ที่ไม่รู้จัก
เพียงเพราะไฟล์มีขนาดเล็ก
㊻ lua54 'yes' ไม่ต้องเพิ่มเพื่อ Performance
Resource Manifest Documentation ปัจจุบันระบุว่า lua54 Deprecated แล้ว และ Lua Scripts ใช้ Lua 5.4 เป็นค่าใช้งานมาตั้งแต่เดือนมิถุนายน 2025.
ดังนั้นเพิ่ม
lua54 'yes'
ไม่ได้เป็นเทคนิค Optimize Map
㊼ ตรวจ Scripts ที่ทำ Loop ทุก Frame
หาก Map Resource มี Client Script แบบ
while true do
Wait(0)
-- งานจำนวนมาก
end
ควรตรวจว่าจำเป็นต้องทำทุก Frame หรือไม่
Cfx.re ระบุว่า Unoptimized Loops สามารถเป็นสาเหตุของ Resource Performance Problems และ Hitch Warnings ได้.
ถ้า Logic ไม่ต้อง Update ทุก Frame ควรปรับตามความเหมาะสม
㊽ Door Script ก็ทำ Map หนักได้
MLO อาจมี Map Asset เบา แต่ Door/Interaction Script หนัก
ดังนั้นหาก
MLO ON → FPS/CPU Resource แย่
ให้ใช้
resmon true
ดูว่า Resource Time สูงหรือไม่.
ถ้าสูง ควร Optimize Script เพิ่ม ไม่ใช่ลด YTD อย่างเดียว
㊾ Loading Screen ช้าไม่เท่ากับ Map Streaming ช้า
ต้องแยก
เข้า Server ช้า
ตรวจ Resource Download/Initial Loading
เข้า Server แล้ว Map ค่อยขึ้น
ตรวจ Streaming
FPS ต่ำในพื้นที่
ตรวจ Rendering/Assets
Server Hitch
ตรวจ Script Runtime
การแยกอาการก่อนช่วยเลือกเครื่องมือถูกตัว
㊿ Optimize Asset ทีละกลุ่ม
ถ้า Map ใหญ่ ให้แบ่งเป็น
Buildings
Textures
Props
Collision
LOD
Scripts
แล้ว Optimize ทีละกลุ่ม
อย่าแก้ทั้งหมดพร้อมกัน เพราะเมื่อเกิด Asset หายจะไม่รู้ว่าการเปลี่ยนแปลงใดเป็นต้นเหตุ
51. วิธีหา Asset ที่ทำ FPS ตกแบบ A/B Test
ตัวอย่าง
รอบ A
Buildings + Props
รอบ B
Buildings อย่างเดียว
ถ้า FPS ดีขึ้นชัดเมื่อ Props ถูกปิด แสดงว่าควรตรวจ Props ต่อ
ทำแบบเดียวกันกับ
Texture Pack
MLO
Collision
Scripts
เพื่อหากลุ่มต้นเหตุ
52. Test ใน Client สเปกระดับกลาง
อย่าใช้เครื่อง Developer ระดับสูงเพียงเครื่องเดียว
Map Production ควรทดสอบ Client ที่ใกล้เคียงผู้เล่นทั่วไปด้วย
เพราะ Asset ที่ Developer เห็น 100 FPS อาจสร้าง Streaming/VRAM Pressure กับเครื่องระดับกลาง
ใช้ตำแหน่งและ Graphics Settings เดิมทุกครั้งเพื่อให้ผลเปรียบเทียบมีความหมาย
53. ทดสอบตอนมีรถและผู้เล่นด้วย
Scene จริงอาจมี
Map
+
MLO
+
Custom Cars
+
Clothes
+
Players
+
HUD
พร้อมกัน
strmem สามารถช่วยดู Streaming Memory ภาพรวมของ Streaming Assets ขณะ Stress Test ได้.
Map ที่ดีใน Empty Test Server อาจยังหนักใน Production Environment
54. Optimize เฉพาะ Map อาจไม่พอ
สมมติ Map ใช้ Asset Budget ปกติ แต่พื้นที่นั้นเป็น Car Meet ที่มี Custom Vehicles จำนวนมาก
FiveM มี str_maxVehicleTextureRes สำหรับจำกัด Maximum Vehicle Texture Resolution และ Documentation ระบุว่าสามารถช่วยลดโอกาส Physical Memory หมดโดยแลกกับคุณภาพภาพ.
นี่แสดงให้เห็นว่า Performance ต้องมอง Asset Budget ทั้ง Scene ไม่ใช่ Map อย่างเดียว
55. อย่าใช้ Client Setting แทนการ Optimize Server Content
การบอกผู้เล่นทุกคนว่า
ลด Graphics
สามารถซ่อนปัญหาได้บางส่วน แต่ถ้า Map
Models หนักเกิน
Texture ใหญ่เกิน
ไม่มี LOD
Props ซ้ำ
ควรแก้ Content ต้นทางด้วย
56. Checklist ก่อนและหลัง Optimize
ก่อน Production ตรวจ
☐ ไม่มี Duplicate Map
☐ ไม่มี Duplicate Props
☐ YDR ไม่ละเอียดเกินจำเป็น
☐ Materials ถูกจัดการ
☐ YTD Resolution เหมาะสม
☐ Shared Texture ไม่ซ้ำ
☐ มี LOD สำหรับ Asset ใหญ่
☐ LodDist เหมาะสม
☐ HD/LOD Hierarchy ถูก
☐ Collision ไม่ละเอียดเกิน
☐ ไม่มี Collision ซ้อน
☐ Extents/Flags ถูกคำนวณ
☐ ไม่มี Script Loop หนัก
☐ resmon อยู่ในระดับเหมาะสม
☐ strmem ถูกตรวจ
☐ strdbg/strlist ไม่มี Streaming Issue ชัดเจน
☐ FPS ก่อน/หลังถูกบันทึก
☐ Test Client สเปกระดับกลาง
เครื่องมือ Streaming และ Runtime ที่กล่าวถึงมีอยู่ใน FiveM Client Developer Commands และ Resource Monitor อย่างเป็นทางการ.
ตารางสรุป FiveM Map Optimization
| อาการ | สิ่งที่ควร Optimize |
|---|---|
| FPS ตกเมื่อมองอาคาร | YDR / Materials / LOD |
| Texture ค่อยชัด | YTD / Streaming Memory |
| อาคารโผล่ช้า | LOD / Streaming |
| ไกลแล้วหายเร็ว | LodDist / LOD |
| Props เยอะมาก | ลด Entities |
| รถเด้ง/เดินติด | Collision |
| MLO เดี่ยวเร็ว เปิดหลาย Map ช้า | Asset Budget / Conflict |
| Resource CPU สูง | Script / Resmon / Profiler |
| World หยุดโหลด | strdbg |
| ต้องการดู Streaming Entries | strlist |
| ต้องการดู Streaming Memory | strmem |
| Map/Collision จำนวนมากโหลดแรกช้า | save_gta_cache |
| Ping ปกติแต่ FPS ต่ำ | Client Rendering |
| Server Hitch | Script Runtime |
Workflow Optimize Map FiveM ที่แนะนำ
ใช้ลำดับนี้
Backup
↓
วัด FPS/CPU/GPU
↓
ทดสอบ Map เดี่ยว
↓
ตรวจ resmon
↓
ตรวจ YDR
↓
ตรวจ Materials
↓
ตรวจ YTD
↓
ตรวจ Props
↓
ตรวจ LOD
↓
ตรวจ Collision
↓
ตรวจ Map Conflict
↓
ดู strmem
↓
ดู strdbg / strlist
↓
Optimize Script
↓
Stress Test
↓
วัดผลใหม่
↓
Production
FiveM แยกเครื่องมือ Asset, Streaming และ Runtime ออกเป็นคนละส่วน จึงควร Debug ตาม Layer แทนการแก้ทุกอย่างพร้อมกัน.
สิ่งที่ไม่ควรทำในการ Optimize Map
หลีกเลี่ยง
ลด Texture ทุกไฟล์เหลือเล็กที่สุด
ลด Polygon ทุก Model แบบ Batch
เพิ่ม LodDist สูงสุดทุก Object
ลบ YTYP/YMAP/YBN ที่ไม่รู้จัก
Merge Maps ทั้งหมดเป็น Resource เดียว
ใช้ save_gta_cache กับทุก Map
ล้าง Cache เป็นคำตอบแรก
เพิ่ม RAM Server เพื่อแก้ Client FPS
Optimization ที่ดีต้องมี Measurement → Change → Test → Compare
ไม่ใช่เปลี่ยนหลายอย่างพร้อมกัน
Map Optimize ดีควรเป็นอย่างไร
Map ที่ Optimize ดีควร
ใกล้แล้วยังสวย
ไกลใช้รายละเอียดเท่าที่จำเป็น
Texture ไม่ใหญ่เกินเหตุ
Props ไม่ซ้ำ
Collision ถูกและเรียบง่ายพอ
ไม่มี Map Conflict
Streaming ไม่สะดุดผิดปกติ
Script Resource ไม่กิน CPU สูง
Client ระดับกลางยังเล่นได้ดี
Initial Loading สมเหตุสมผล
Cfx.re LOD Workflow เน้น HD/LOD Models และ Simplified Geometry/Materials ขณะที่ Client Developer Commands มีเครื่องมือสำหรับดู Streaming และ Resource Runtime จึงสามารถ Optimize จากข้อมูลจริงได้.
สรุป วิธี Optimize Map FiveM ให้โหลดเร็วและลด FPS ตก
การ Optimize Map FiveM ที่ได้ผลควรดูทั้งหมด
YDR
→ Geometry / Model
YTD
→ Texture
YTYP
→ Archetype
YMAP
→ Entities / Placement / LOD
YBN / Bounds
→ Collision
Scripts
→ Runtime
Streaming
→ Memory / Asset Loading
สำหรับ Asset ขนาดใหญ่ Cfx.re แนะนำ Workflow ที่ใช้ HD และ LOD Models โดย LOD ลด Geometry และ Materials แล้วเชื่อมผ่าน YMAP Hierarchy พร้อมกำหนดระยะอย่างเหมาะสม.
สำหรับ Streaming สามารถใช้
strdbg true
strlist true
strmem true
เพื่อดูสิ่งที่ GTA Streamer กำลังโหลด รายการ Streaming Entries และ Memory ที่ Assets ใช้.
สำหรับ Resource Script ใช้
resmon true
และ Profiler เพื่อหา Resource หรือ Code ที่ใช้เวลาประมวลผลสูง.
และหาก Resource มี Map/Collision Files จำนวนมากจน Initial Loading ช้า FiveM มี
save_gta_cache <resource name>
สำหรับสร้าง Cache Data และนำไฟล์ที่ได้ไปประกาศใน Resource Manifest ตาม Workflow อย่างเป็นทางการ.
แนวทางของ comsiam คือเริ่มจากการวัดผลก่อน Optimize เสมอ จากนั้นแก้ทีละ Layer แล้ววัดใหม่ เพราะเป้าหมายไม่ใช่ทำให้ไฟล์เล็กที่สุด แต่คือทำให้ Map สวยพอ โหลดเร็ว ใช้ทรัพยากรสมเหตุสมผล และเล่นได้ลื่นในสภาพ Server จริง
Comments
Post a Comment