พื้นผิว 3 มิติคืออะไร


31

Google ล้มเหลวฉันไม่พบข้อมูลใด ๆ เลย ดังนั้น GameDev อาจจะสามารถ :)

  • พื้นผิว 3 มิติคืออะไร
  • พวกเขาจะใช้เมื่อใด
  • ต้นทุนประสิทธิภาพหรือไม่
  • พวกเขาเก็บไว้อย่างไร?

ฉันมีความคิดที่คลุมเครือมากมาย แต่ไม่มีคำจำกัดความ 'ชัดเจน'

การอ้างอิงถึงตัวอย่างหรือแบบฝึกหัดใด ๆ โดยเฉพาะอย่างยิ่งในการแสดงผลระบบอนุภาคผ่านพื้นผิว 3 มิติ


ฉันไม่แน่ใจว่าสิ่งที่คุณถามเป็นสิ่ง คุณหมายถึงการจับคู่แบบปกติและการชนเพื่อจำลองการแปรผันของพื้นผิวบนพื้นที่ "แนวราบ" หรือไม่?
coderanger

2
ฉันคิดว่าสิ่งที่เขาหมายถึงเป็นเหมือน GL_TEXTURE_3D ฯลฯ
Luker

1
ดูคำถามนี้ด้วย: การทำแผนที่พื้นผิว UVW ทำงานอย่างไร (และคำตอบ)
George Duckett

คำตอบ:


34

พื้นผิว 3 มิติทำงานเหมือนพื้นผิวปกติ แต่มันเป็น 3D อย่างแท้จริง พื้นผิว 2D มี UV coords ส่วน 3D มี UVW (คุณต้องใช้มันอย่างคล่องแคล่ว) พื้นผิวมีหน่วยเป็นคิวบ์ (0 - 1, 0 - 1, 0 - 1)

การใช้งานที่เป็นไปได้ :

  • ผลกระทบเชิงปริมาตรในเกม (ไฟไหม้ควันรังสีแสงหมอกเหมือนจริง)
  • แคชแสงสำหรับการส่องสว่างทั่วโลกแบบเรียลไทม์ ( CryEngineเป็นต้น)
  • วิทยาศาสตร์ (MRI, CT scan จะถูกบันทึกลงในปริมาณ)

ประสิทธิภาพการทำงาน :
เหมือนกับพื้นผิวปกติ - เร็วสุด (เข้าถึงหน่วยความจำที่เร็วที่สุดใน GPU) แคชสำหรับเธรดและปรับให้เหมาะสมกับสถานการณ์เมื่อใกล้เธรด (ตัวแบ่งพิกเซล) กำลังมองหาค่าที่ใกล้เคียง

สามารถอ่านเป็นจุดหรือใช้การสุ่มตัวอย่างแบบเชิงเส้น (การแก้ไขแบบดั้งเดิมเชิงเส้นแบบสามเส้นการแก้ไขแบบสองทิศทางแบบ Eq ในรูปแบบ 2D)

พวกเขาจะถูกเก็บไว้ในหน่วยความจำเช่นอาร์เรย์ของพื้นผิว 2D

การทำแผนที่บนพื้นผิว 3 มิติ:
ป้อนคำอธิบายรูปภาพที่นี่


14

พื้นผิว 3 มิติหรือ 'ปริมาณพื้นผิว' เป็นชุดของพื้นผิวปกติที่จัดเรียงเป็นชิ้นเช่นสำรับไพ่ สิ่งเหล่านี้ถูกใช้ในการเรนเดอร์เชิงปริมาตรซึ่งมักใช้ข้อมูลในโลกแห่งความเป็นจริงเช่นการสแกน CT และจัดการกับมัน ในเกมและกราฟิกบางครั้งมันเป็นผลกระทบเชิงปริมาตรเช่นควันซึ่งคุณแลกเปลี่ยนความยืดหยุ่นของระบบอนุภาคสำหรับค่าใช้จ่ายคงที่และการคำนวณพื้นผิวปริมาณง่าย (และขนานกันได้ง่าย) มันง่ายมากในการหาปริมาตรของเพื่อนบ้านที่ใกล้ที่สุด แต่อาจเป็นปัญหาได้ว่าเป็นระบบอนุภาคแบบดั้งเดิมที่ประกอบด้วยจุดหลวม ๆ

นอกจากนี้บางอ็อบเจ็กต์ที่ซับซ้อนยังได้รับประโยชน์จากการใช้พื้นผิวปริมาณเช่นหญ้า:

ควันของ Nvidia ในกล่องเป็นตัวอย่างที่ดี:

http://www.youtube.com/watch?v=9AS4xV-CK14

นอกจากนี้การเรนเดอร์แสงแบบกระจายทำได้ง่ายขึ้นเมื่อคุณมีวอลลุ่มที่ต้องการเรนเดอร์


7

นอกเหนือจากคำตอบที่มีอยู่แล้วฉันชอบวิธีการสร้างพื้นผิว 3 มิติเช่นกัน (จริงๆแล้วมันให้ความรู้สึกมากกว่าพื้นผิวแบบ 2D) เช่นเสียงและเศษส่วนซึ่งจะให้รายละเอียดพื้นผิวที่ดีและไม่ผิดรูปไปยังพื้นผิวมุมใด ๆ เพื่อเลือกแบบจำลองการฉาย (UV, ระนาบ, ทรงกระบอก, ทรงกลมและอื่น ๆ )

แทนที่จะสุ่มเลเยอร์บิตแมปในพื้นที่ 3 มิติคุณจะได้รับค่าที่แตกต่างกันสำหรับแต่ละจุดในพื้นที่ 3 มิติด้วยอัลกอริธึมพื้นฐานซึ่งโดยทั่วไปจะให้ความละเอียดพื้นผิวที่ไม่มีที่สิ้นสุดและไม่มีปัญหากับพื้นผิวยืดในรูปหลายเหลี่ยมมุม นี่คือ "พื้นผิว" 3 มิติหรือค่อนข้างแรเงาให้ฉัน ^^

จริง ๆ แล้วฉันเหนื่อยกับการพัฒนาเกมบิตแมปบิตในการพัฒนาเกมเมื่อฉันต้องการที่จะลงยานอวกาศฉันต้องการที่จะใช้สองสามชั้นของสูตรเสียงรบกวนและไม่ต้องทาสีบิตแมปความละเอียด จำกัด หนังสามมิติเก่าแก่นั้นสามารถฝันใช่มั้ย;)

ตอนนี้การแก้ปัญหาพื้นผิวภาพยนตร์ 3D Oldschool เหล่านี้ล่วงหน้าเป็นสีบิตแมป UV ปกติและ specular เป็นเรื่องสนุกที่ฉันได้รับและรู้สึก จำกัด อย่างน่ารำคาญ ฉากสาธิต (เช่นเคย) มีแนวโน้มที่จะสร้างพื้นผิวขั้นตอนสำหรับเรียลไทม์ 3 มิติ แต่มันก็รู้สึกยากที่จะหาเครื่องมือที่ดีที่จะสนับสนุนกระบวนการทำงานนี้ตั้งแต่การออกแบบจนถึงเวลาทำงาน แนวทางขั้นตอนการพัฒนาเกมส่วนใหญ่ดูเหมือนจะเกี่ยวกับการสร้างเครือข่าย สงสัยว่าท่อส่ง shader ด้วยความช่วยเหลือของแผนที่ความลึก / การแสดงผลที่เลื่อนออกไปสามารถจัดการกับเสียงรบกวน 3D ของ Oldschool ได้อย่างไร

... แทนที่จะพยายามหาวิธีจับคู่ภาพพื้นผิวของรูปร่างของคุณลักษณะเชิงปริมาตรของพื้นผิวที่เป็นจุดรบกวนช่วยให้คุณสามารถประเมินพวกมันได้ที่ตำแหน่ง (x, y, z) ในพิกเซลของคุณ Shader ด้วยวิธีนี้คุณสามารถแกะเนื้อของคุณออกมาจากวัสดุที่เป็นของแข็งได้อย่างมีประสิทธิภาพซึ่งมักจะตรงไปตรงมามากกว่าการพยายามทำแผนที่พาราเมตริกที่ไม่มีการบิดเบือน

พื้นผิวตามขั้นตอนเชิงปริมาตรเสียงเหล่านี้มีมานานแล้วเป็นแกนนำของภาพยนตร์สารคดีที่ผู้ไม่ต้องการการแสดงแบบเรียลไทม์ ... ภาพยนตร์เอฟเฟกต์พิเศษทุกวันนี้ทำให้การใช้งานขั้นตอนที่ขึ้นกับเสียง ... เกี่ยวกับการใช้งานฟังก์ชั่นเสียงรบกวนอย่างกว้างขวางภายในตัวสร้างพิกเซลที่เขียนด้วยภาษาเช่นพิกซาร์ RenderMan ด้วยการใช้งานฟังก์ชั่นเสียงรบกวนที่ดีสำหรับการใช้งานแบบเรียลไทม์ใน GPU ฉันหวังว่าจะได้เห็นความคิดภาพที่น่าตื่นเต้นจากภาพยนตร์สารคดีที่รวมอยู่ในความบันเทิงแบบโต้ตอบรุ่นต่อไปบนเดสก์ท็อปและคอนโซล http://http.developer.nvidia.com/GPUGems/gpugems_ch05.html


อ่านที่น่าสนใจมาก! ฉันมีปัญหาในการมองเห็นสิ่งที่คุณหมายถึงในวรรคสองของคุณ
decaviatedcaviar

บางทีฉันอาจสร้างไดอะแกรม สิ่งที่ฉันหมายถึงคือแทนที่จะสุ่มบิตแมปสี (หรืออะไรก็ตามที่คุณตามมา) จะถูกตัดสินโดยอัลกอริธึมด้านเสียงแทน ด้วยวิธีนี้ไม่จำเป็นต้องมีการแก้ไขระหว่างบิตแมปพิกเซลที่ต้องการ (เนื่องจากคุณต้องถูกสุ่มตัวอย่างไม่ได้อยู่ในตำแหน่งพิกเซลที่สมบูรณ์แบบ 1x1) และความละเอียดจะกลายเป็นทฤษฎีที่ไม่มีที่สิ้นสุด มันค่อนข้างเหมือนกับการคำนวณดอกเบี้ยสำหรับอัตราดอกเบี้ยที่เฉพาะเจาะจงแทนที่จะใช้ตารางการค้นหาที่คำนวณล่วงหน้าซึ่งมีขั้นตอน / ช่วงเวลาที่แน่นอน (= ความละเอียดบิตแมป)
Oskar Duveborn

หลังจากอ่านบทความทั้งหมดที่อ้างอิงแล้ว ฉันมีความเข้าใจที่ดีขึ้นมาก แต่ฉันคิดว่าการอ้างอิง ภาพจะเป็นประโยชน์ต่อทั้งสองฝ่าย: ความไม่แน่ใจและ tl; :)
deceleratedcaviar

0

รูปแบบพื้นผิว 3 มิติถูกนำไปใช้กับ voxels ของตัววัดปริมาตรมากเช่นเดียวกับรูปแบบพื้นผิว 2D ที่ใช้กับพิกเซลของรูปหลายเหลี่ยม 2D นี่คือตัวอย่างของพื้นผิวปริมาตร 3 มิติใน JavaScript (ต้องใช้ WebGL):

http://kirox.de/test/Surface.html

กด [v] หมุนร่างกายและเปลี่ยนการไล่ระดับของพื้นผิวที่สร้างขึ้นด้วยล้อเลื่อนของเมาส์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.