คำถามติดแท็ก texture-atlas

5
วิธีการหลีกเลี่ยงการตกเลือดในพื้นผิวแผนที่?
ในเกมของฉันมีภูมิประเทศที่เหมือน Minecraft ทำจากก้อน ฉันสร้างบัฟเฟอร์จุดสุดยอดจากข้อมูล voxel และใช้แผนที่พื้นผิวสำหรับลักษณะของบล็อกที่แตกต่างกัน: ปัญหาคือพื้นผิวของลูกบาศก์ที่อยู่ห่างไกลสอดแทรกด้วยกระเบื้องที่อยู่ติดกันในแผนที่พื้นผิว ผลลัพธ์ในบรรทัดของสีที่ไม่ถูกต้องระหว่างคิวบ์ (คุณอาจต้องดูภาพหน้าจอด้านล่างในขนาดเต็มเพื่อดูข้อบกพร่องกราฟิก): ตอนนี้ฉันใช้การตั้งค่าการแก้ไขเหล่านี้ แต่ฉันลองทุกชุดรวมกันและแม้GL_NEARESTไม่มีการแมปแมปก็ไม่ได้ผลลัพธ์ที่ดี glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); ฉันได้ลองเพิ่มออฟเซ็ตในพิกัดพื้นผิวเพื่อเลือกพื้นที่เล็ก ๆ ของกระเบื้อง แต่เนื่องจากเอฟเฟกต์ที่ไม่ต้องการขึ้นอยู่กับระยะห่างจากกล้องจึงไม่สามารถแก้ปัญหาได้อย่างสมบูรณ์ ในระยะทางไกล ฉันจะแก้ไขการตกเลือดนี้ได้อย่างไร เนื่องจากการใช้แผนที่พื้นผิวเป็นเทคนิคที่นิยมอาจมีวิธีการทั่วไป น่าเศร้าด้วยเหตุผลบางอย่างที่อธิบายในความคิดเห็นฉันไม่สามารถเปลี่ยนเป็นพื้นผิวหรืออาร์เรย์พื้นผิวที่แตกต่างกันได้

4
อะไรคือความแตกต่างระหว่างสไปรต์ชีทกับแผนที่พื้นผิว?
ฉันสงสัยว่าความแตกต่างระหว่างแผ่นสไปรต์และแผนที่พื้นผิวคืออะไร ไม่เหมือนกันทั้งคู่หรือ ในแผ่นสไปรต์คุณมีสไปรต์และแผนที่พื้นผิวคุณยังมีสไปรต์ด้วยดังนั้นอะไรคือความแตกต่าง?

1
ขนาดพื้นผิวสูงสุด Android: การตั้งค่าสำหรับ 2048x2048?
ฉันต้องการใช้แผนที่พื้นผิวของ 2048 x 2048 ในเกมของฉันและฉันต้องการเตือนผู้ใช้ด้วยอุปกรณ์ที่ "ต่ำเกินไป" เพื่อไม่ให้ดาวน์โหลดเกม ด้วยรูปแบบพื้นผิวของขนาดนี้ฉันต้องพูดอะไรกับ ANDROID? ภาพนี้ (ที่มา: /programming/10392027/recommended-limit-for-memory-management-in-cocos2d ) แสดงความต้องการสำหรับ IPHONE สิ่งที่เกี่ยวกับแอนดรอยด์: ขั้นต่ำ 512Mo กับ 1GHz เป็น ข้อกำหนดที่ถูกต้อง? ขอบคุณสำหรับคำตอบ

2
ฉันควรจะใช้สไปรต์ฮีตเพราะรูปภาพจำนวนมากมายของฉันหรือไม่?
ฉันกำลังพัฒนาเกม 2D และฉันมีสไปรต์มากมาย ฉันใช้ภาพเคลื่อนไหวและโมเดล 3 มิติเพื่อแสดงเป็น 2D เพื่อให้พวกเขาเห็นว่า "Fallout" หรือ "Diablo" นอกจากนี้ยังง่ายกว่าการวาดด้วยมือฮ่า ๆ ฉันต้องลดอัตราเฟรมลงเหลือ 15 เฟรมต่อวินาทีซึ่งต่ำที่สุดที่ฉันสามารถลดได้โดยไม่ทำให้พวกเขาดูขาด ๆ หาย ๆ อย่างไรก็ตามมันเป็นเรื่องน่าเศร้าเนื่องจากมี 24 เฟรมที่ดูราบรื่น มีสองเหตุผลที่ฉันทำสิ่งนี้: 1) ลดพื้นที่ HDD ยิ่งภาพน้อยลงเท่าไหร่เกมของฉันก็ยิ่งเล็กลงเท่านั้น 2) ลดปริมาณการใช้ RAM ยิ่งฉันโหลดภาพน้อยลงเท่าไหร่ฉันก็ยิ่งมีแนวโน้มที่จะหลีกเลี่ยงปัญหาที่ทำให้เกิดข้อ จำกัด RAM ของฉันมากขึ้นเท่านั้น อย่างไรก็ตามหากมีวิธีการบีบอัดภาพในพื้นที่ HDD และ RAM ฉันจะทำเช่นนั้น ฉันได้ทำการทดสอบมาก่อนและส่วนใหญ่ไม่ได้รับการเปลี่ยนแปลงคุณภาพใด ๆ เมื่อให้จาก RGBA8888 เป็น RGBA5555 และมีการเข้าชมเพียงเล็กน้อยเมื่อแปลงเป็น RGBA4444 ในโปรแกรม TexturePacker ของฉัน …

1
แผนที่พื้นผิวกับอาเรย์พื้นผิว: พวกเขาจัดการกับซีพียูและ GPU ต่างกันอย่างไรและมีผลกระทบอย่างไรต่อประสิทธิภาพการทำงาน?
ความสามัคคี 5.4 (ปัจจุบันอยู่ในเบต้า) จะนำคุณลักษณะที่รอคอยมาก (ตั้งแต่ 2013) ที่เป็นอาร์เรย์พื้นผิว - ในไร้สาระเช่นเดียวกับArrayTexture OpenGL ของ อย่างไรก็ตามหลังจากทำการอ่านบางอย่างเกี่ยวกับอาร์เรย์ - พื้นผิวและพื้นผิวแผนที่ฉันยังคงไม่เข้าใจความแตกต่างทางเทคนิคในการใช้งานโดย CPU และ GPU ดังนั้นเพื่อที่จะเจาะจงมากขึ้นฉันอยากจะขอคำอธิบายเกี่ยวกับความแตกต่างที่สำคัญระหว่างวิธีการจัดการแผนที่พื้นผิวและพื้นผิวโดย CPU และ GPU และที่สำคัญที่สุดความแตกต่างดังกล่าวส่งผลกระทบต่อประสิทธิภาพและการจัดการหน่วยความจำอย่างไร วิธีที่อาร์เรย์ของพื้นผิวสามารถมีประสิทธิภาพได้ดีกว่าแผนที่พื้นผิว ฯลฯ ) หากรายละเอียดทางเทคนิคเกี่ยวกับการดำเนินงานของ Unity ขาดไปเนื่องจากความโชคร้ายที่ปิดตายโชคไม่ดีฉันจะมีความสุขมากกับคำตอบเกี่ยวกับ OpenGL.s ArrayTexture

1
พื้นผิวของแผ่นสไปรต์ยกขอบของพื้นผิวที่อยู่ติดกัน
ฉันมีชุดสไปรต์แบบกำหนดเอง (openGL 2.0) ซึ่งใช้แผ่นงานสไปรต์ง่าย ๆ (พื้นผิวของฉันถูกจัดเรียงในแนวนอนติดกัน) ตัวอย่างเช่นนี่คือแผ่นทดสอบสไปรต์ที่มีพื้นผิวที่เรียบง่าย 2 แบบ: ตอนนี้สิ่งที่ฉันทำเมื่อสร้างวัตถุ openGL sprite ของฉันคือการระบุจำนวนเฟรมทั้งหมดในแอตลาสและเมื่อวาดให้ระบุเฟรมที่ฉันต้องการวาด จากนั้นจะหาตำแหน่งที่จะจับพื้นผิวจาก: การหารหมายเลขเฟรมที่ต้องการด้วยจำนวนเฟรมทั้งหมด (เพื่อรับค่าพิกัดซ้าย) จากนั้นทำการดำน้ำ 1 ตามจำนวนเฟรมทั้งหมดและเพิ่มผลลัพธ์ลงในพิกัดด้านซ้ายที่คำนวณข้างต้น ดูเหมือนว่าจะใช้งานได้ แต่บางครั้งฉันก็มีปัญหา พูดเช่นฉันต้องการวาด X ด้านล่างและฉันได้รับ ........... ฉันเคยได้ยินเกี่ยวกับการใส่ 'padding' ของ 1 px ระหว่างแต่ละพื้นผิว แต่บางคนสามารถอธิบายได้อย่างแม่นยำว่ามันทำงานอย่างไร ฉันหมายความว่าถ้าฉันทำสิ่งนี้มันจะสลัดการคำนวณออกไปเพื่อให้ได้พื้นผิว หากฉันรวมการซ้อนทับในพื้นผิวที่หยิบง่าย (ดังนั้นเทพดาจะถูกวาดด้วยเส้นขอบที่ว่างเปล่า) ดังนั้นถ้าเป็นเช่นนั้นจะทำให้เกิดปัญหากับการตรวจจับการชนกันหรือไม่ (เช่นสไปรต์อาจปรากฏขึ้นเพื่อชนกันเมื่อใช้กล่องที่มีขอบเขตเมื่อชิ้นส่วนโปร่งใสชนกัน) จะขอบคุณถ้ามีคนอธิบาย
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.