png ขนาดใหญ่บนดิสก์อาจใช้เวลาเพียงสองเมกะไบต์ แต่ฉันคิดว่าใน gpu png เดียวกันจะถูกจัดเก็บในรูปแบบที่ไม่มีการบีบอัดซึ่งใช้พื้นที่มากขึ้น มันเป็นเรื่องจริงเหรอ? ถ้าเป็นจริงพื้นที่เท่าไหร่?
png ขนาดใหญ่บนดิสก์อาจใช้เวลาเพียงสองเมกะไบต์ แต่ฉันคิดว่าใน gpu png เดียวกันจะถูกจัดเก็บในรูปแบบที่ไม่มีการบีบอัดซึ่งใช้พื้นที่มากขึ้น มันเป็นเรื่องจริงเหรอ? ถ้าเป็นจริงพื้นที่เท่าไหร่?
คำตอบ:
ไฟล์ JPG และ PNG เกือบทุกครั้งจะมีขนาดเล็กบนดิสก์มากกว่าในหน่วยความจำ พวกเขาจำเป็นต้องคลายการบีบอัดแบบทันทีเพื่อรับข้อมูล RGB แบบดิบซึ่งต้องการพลังการประมวลผลที่มากขึ้นสำหรับการโหลดและ RAM เพิ่มเติมหลังจากนั้น เอ็นจิ้นสมัยใหม่จำนวนมากเลือกที่จะจัดเก็บรูปแบบเดียวกันบนดิสก์เช่นเดียวกับที่ทำในหน่วยความจำซึ่งนำไปสู่ไฟล์ที่มีขนาดเท่ากับความต้องการหน่วยความจำของพื้นผิว (แต่ยังมีขนาดใหญ่กว่า PNG หรือ JPG) RGB / RGBA และ S3TC / DXTn / BCn เป็นรูปแบบที่ใช้กันอย่างแพร่หลายเนื่องจากมีการอ่านหน่วยความจำโดยตรงโดยไม่ต้องดำเนินการใด ๆ (พื้นผิว DXT ถูกบีบอัดไว้ล่วงหน้า)
ดังนั้นขนาดเหล่านี้สำหรับรูปแบบพื้นผิวทั่วไปที่ต่างกัน:
หากคุณใช้รูปภาพที่มีmipmapsพื้นผิวจะต้องมีหน่วยความจำมากถึง 4/3 นอกจากนี้ความกว้างและความสูงของพื้นผิวอาจถูกปัดเศษขึ้นภายในเพื่อให้เป็นพลังของสองบนฮาร์ดแวร์ที่มีความสามารถน้อยหรือเก่าและบนฮาร์ดแวร์ที่ จำกัด บางตัวก็ถูกบังคับให้เป็นสี่เหลี่ยมจัตุรัส
ข้อมูลเพิ่มเติมเกี่ยวกับ DXT: มันเป็นการบีบอัดที่สูญเสียไป นี่หมายความว่าข้อมูลสีบางส่วนหายไปเมื่อทำการบีบอัดพื้นผิว สิ่งนี้มีผลกระทบด้านลบต่อพื้นผิวของคุณบิดเบือนเส้นขอบที่คมชัดและสร้าง "บล็อก" บนการไล่ระดับสี แต่ข้อดีนั้นดีกว่าข้อเสีย (ถ้าคุณมีพื้นผิวที่ดูไม่ดีอย่างน่ากลัวใน DXT เพียงแค่ไม่บีบอัดไว้ส่วนที่เหลือจะทำให้สูญเสียขนาด) นอกจากนี้เนื่องจากพิกเซลจะถูกบีบอัดโดยบล็อกขนาดคงที่ความกว้างและความสูงของพื้นผิวต้องเป็นทวีคูณของสี่
เห็นได้ชัดว่ามันขึ้นอยู่กับรูปแบบ
ลองเปลี่ยนพื้นผิวสี่เหลี่ยมจัตุรัส 256 คูณ 256 พิกเซล หากไม่มีการบีบอัด 32- บิตพร้อมช่องอัลฟา (เป็นColor
XNA) แสดงว่าใช้ขนาด256KB ( 256*256*4
ไบต์)
รูปแบบ 16 บิต (เช่นBgr565
) เห็นได้ชัดว่าจะมีขนาดเพียงครึ่งหนึ่ง - 128KB
จากนั้นคุณก็เข้าสู่รูปแบบการบีบอัด ใน XNA คุณมี DXT1, DXT3 และ DXT5 (หรือที่รู้จักในชื่อS3 Compression ) นี่เป็นรูปแบบการบีบอัดที่สูญเสีย นอกจากนี้ยังเป็นรูปแบบบล็อกตาม - ซึ่งหมายความว่าคุณสามารถสุ่มตัวอย่างจากมัน (เพราะคุณรู้ว่าบล็อกพิกเซลอยู่ใน) นอกจากนี้ยังเร็วกว่าเพราะคุณใช้แบนด์วิดท์น้อยลง
อัตราส่วนการบีบอัดของ DXT1 คือ 8: 1 และสำหรับ DXT3 และ DXT5 คือ 4: 1
ดังนั้นภาพของ DXT1 256x256 เป็น32KB และ DXT3 หรือ DXT5 เป็น64KB
แล้วมีMipmapping หากเปิดใช้งานสิ่งนี้จะสร้างชุดของภาพในหน่วยความจำกราฟิกแต่ละขนาดครึ่งหนึ่งของขนาดก่อนหน้า ดังนั้นสำหรับภาพ 256x256 ของเรา: 128x128, 64x64, 32x32, 16x16, 8x8, 4x4, 2x2, 1x1 พื้นผิวที่มีการแม็ปการทำแผนที่มีขนาดประมาณ133%ของขนาดดั้งเดิม
GPU ส่วนใหญ่สามารถอ่านรูปแบบการบีบอัดที่เฉพาะเจาะจงได้เท่านั้น เช่น. BC *, DXT * ไม่ใช่รูปแบบเช่น png ดังนั้นใช่มันเป็นความจริงส่วนใหญ่ที่. png จะใช้พื้นที่ในหน่วยความจำวิดีโอมากกว่าบนดิสก์
พื้นผิวสามารถเก็บบีบอัดหรือไม่บีบอัดในหน่วยความจำวิดีโอและหน่วยความจำระบบ
สำหรับพื้นผิวที่ไม่มีการบีบอัดกฎทั่วไปของหัวแม่มือคือมันจะใช้พื้นที่จำนวนเท่ากันในหน่วยความจำวิดีโอเช่นเดียวกับในรูปแบบที่ไม่มีการบีบอัดในหน่วยความจำระบบ
สำหรับพื้นผิวที่บีบอัด DXT1 GPU จัดเก็บ 8 ไบต์สำหรับไทล์ 4x4 แต่ละอันในพื้นผิวของคุณ ข้อมูลที่ไม่มีการบีบอัด (ที่ 8 บิตต่อช่อง RGB) โดยปกติแล้วจะเป็น 4x4x3 = 48 ไบต์ดังนั้นนั่นคืออัตราส่วนการบีบอัด 6: 1 สำหรับพื้นผิวที่ถูกบีบอัดของ DXT3 / DXT5 GPU จะจัดเก็บ 16 ไบต์สำหรับไทล์ 4x4 แต่ละอันในพื้นผิวของคุณ นั่นคืออัตราส่วนการบีบอัดที่ลดลงเล็กน้อยที่ 3: 1
มีข้อ จำกัด บางประการที่มีพื้นผิวที่ไม่บีบอัดและมีการบีบอัด:
หน่วยความจำส่วนใหญ่ถูกจัดสรรในหน้า (ขนาดที่แตกต่างกันระหว่าง GPU) ขนาดคงที่ เช่น. 4KB และบ่อยครั้งที่ไม่ได้ถูกจัดสรรย่อยและแบ่งปันกับข้อมูล GPU อื่น ๆ กล่าวคือ หากพื้นผิวของคุณมีขนาดเล็กกว่าขนาดหน้ารอยใน vid mem มักจะยังคงเป็นขนาดหน้ากระดาษ
gpus บางตัวมีข้อกำหนดการจัดตำแหน่งที่เฉพาะเจาะจงมาก ในอดีต GPU บางรุ่นมีข้อกำหนดว่าพื้นผิวมีขนาดเท่ากับ 2 สิ่งนี้มักจะต้องใช้เพื่อสนับสนุนการเป็นตัวแทนแบบ swizzled (ดู Morton Ordering: http://en.wikipedia.org/wiki/Z-order_(curve )) เพื่อปรับปรุงการเข้าถึงท้องถิ่นเมื่อทำการสุ่มตัวอย่างจากพื้นผิว นี่หมายความว่าพื้นผิวที่มีขนาดคี่จะถูกบุรองเพื่อรักษาข้อกำหนดเหล่านี้ (โดยทั่วไปการเว้นระยะนี้ถูกจัดการโดยคนขับ) แม้ว่ามอร์เดอร์ - ออร์เดอร์นั้นไม่จำเป็นต้องใช้ใน gpus ยุคใหม่ แต่ก็อาจจะมีอาการท้องอืดที่จะสนับสนุนข้อกำหนดเฉพาะของ GPU
การแสดงพื้นผิวของคุณหลายครั้งอาจมีอยู่ในหน่วยความจำ ณ จุดใดเวลาหนึ่งโดยเฉพาะอย่างยิ่งถ้าคุณกำลังใช้การล็อคทิ้ง สิ่งนี้สามารถขยายการใช้งานหน่วยความจำของคุณได้จนกว่า gpu จะไม่ได้ใช้งานการแสดงภาพแทน
หากคุณเปิดใช้งานการทำแผนที่ mips เพิ่มเติมจะใช้งานโดยเฉลี่ยประมาณหนึ่งในสามของระดับ mip พื้นฐาน YMMV อิงตามคำเตือนข้างต้น
AFAIK คือความกว้างของภาพ * สูง * BPP ซึ่งเป็นอิสระหากเป็น PNG, JPG หรือ BMP ฉันไม่รู้ว่า DDS หรือรูปแบบการบีบอัดอื่น ๆ นั้นถูกจัดวางอย่างไร
การทำแผนที่ Mip จะเพิ่มความต้องการหน่วยความจำวิดีโอ
ความรู้ของฉันในหัวข้อนี้อาจจะล้าสมัยไปเล็กน้อย ฉันละทิ้ง 3D มานานแล้ว