จุดสุดยอดสีคืออะไร?


31

คำถามของฉันคือสิ่งที่เขียนในชื่อ คำว่า "สีจุดสุดยอด" นี้ปรากฏขึ้นมากมาย ฉันมีเวลายากที่จะเข้าใจสิ่งนี้

ตัวอย่างเช่น:

จุดยอดง่ายของอวกาศ 3 มิติไม่ใช่หรือ? ถ้าเป็นเช่นนั้นจุดจะมีสีได้อย่างไร? หรือ "สี" นี้หมายความว่าอย่างอื่น?

มีโหนด "Vertex Color" ในตัวแก้ไขวัสดุของเครื่องมือที่ไม่เป็นจริง

มีใครบางคนให้ความกระจ่างในคำถามของฉัน ฉันไม่พบสิ่งที่มีประโยชน์เมื่อฉันค้นหา "สีอะไรคือจุดสุดยอด" แต่เอกสารที่เป็นเทคนิคเกินไปสำหรับฉัน


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

3
ฉันคิดว่าส่วนใหญ่ของความสับสนของคุณเป็นเพราะความสับสนบ่อยครั้งของคำว่า "จุดสุดยอด" และ "ตำแหน่ง" ใน 3D / กราฟิก ในทางคณิตศาสตร์คำแถลงของคุณ“ ไม่ใช่จุดง่าย ๆ จุดสุดยอดบนพื้นที่ 3 มิติใช่ไหม”ถูกต้อง แต่ในขอบเขตของเครื่องมือเกมและกราฟิกไม่ใช่ตำแหน่งเป็นจุดที่ง่ายในพื้นที่ 3 มิติ และ (ตาข่าย) จุดสุดยอดเป็นชิ้นส่วนของข้อมูลที่มักจะมีตำแหน่ง แต่ยังอาจมีความปกติสัมผัสเนื้อประสานงานสีและ / หรือใด ๆ ของชิ้นอื่น ๆ อีกมากมายของข้อมูล จุดสุดยอดตาข่ายเป็นเพียงกลุ่มข้อมูลที่ถูกประมวลผลที่จุดสุดยอดของการเรนเดอร์
Slipp D. Thompson

คำตอบ:


29

สีของ Vertex นั้นไม่เกี่ยวข้องกันเมื่อคุณมี 3d mesh ที่มีพื้นผิวอย่างสมบูรณ์ แต่มันก็น่าสนใจเมื่อคุณมีตาข่ายที่ไม่มีสี แต่มีสี ในกรณีนั้นคุณกำหนดสีให้กับทุกจุดยอด Shader จะทำการระบายสีแต่ละพิกเซลของรูปหลายเหลี่ยมด้วยการแทรกระหว่างสีของจุดยอดทั้งสาม

บางครั้งสีของ Vertex ก็น่าสนใจเมื่อใช้ร่วมกับพื้นผิว เมื่อคุณต้องการใช้อัลกอริทึมการแรเงาเช่นGouraud Shadingคุณเพียงคำนวณความเข้มของแสงในแต่ละจุดยอดกำหนดสีของแสงให้กับจุดยอดเป็นสีจุดสุดยอดและเมื่อคุณแสดงพื้นผิวที่คุณคูณค่าสีของแต่ละพิกเซลพื้นผิวด้วย สีที่ถูกแก้ไข วิธีนี้ช่วยให้คุณสามารถคำนวณแหล่งกำเนิดแสงใน Shader Vertex แทน Pixel Shader โดยทั่วไปแล้วจะเร็วกว่านี้เนื่องจากเครื่อง Shader ที่ใช้งานมักจะทำงานน้อยกว่ามาก


2
btw มีการใช้สีจุดสุดยอดในเกมเก่าบางเกมที่ไม่มีสายฟ้า / เงาแบบไดนามิก ตัวอย่างเช่น Richard Burns Rally จากปี 2004 ใช้สีจุดยอดเพื่อสร้างพื้นผิวที่ดูแตกต่างกันและใช้เงา
martin

The Witness เป็นเกมเมื่อเร็ว ๆ นี้ที่ใช้สีจุดยอดและแผนที่แสงอย่างกว้างขวาง แต่มีพื้นผิวไม่มากนัก
user253751

@Philipp "เพราะโดยปกติแล้ว shader ของจุดยอดจะถูกเรียกใช้งานบ่อยครั้งกว่า" ทำไม? จุดสุดยอดส่วนหนึ่งของการเรนเดอร์เรนเดอร์ไม่ใช่และดำเนินการแต่ละเฟรมหรือไม่ ทำไมจึงน้อยบ่อย จุดสุดยอด "สี" จะต้องคำนวณทุกเฟรมด้วยหรือไม่ราวกับว่ามันอยู่ในส่วนของพิกเซล
Nikos

1
@ Nikos Shader ที่เรียกว่าจุดสุดยอดหนึ่งครั้งต่อจุดสุดยอด Pixel Shader จะถูกเรียกใช้หนึ่งครั้งต่อพิกเซล รูปหลายเหลี่ยมที่มี 3 จุดยอดมักส่งผลให้เกิดพิกเซลบนหน้าจอมากกว่า 3 จุด (หากเกมของคุณคำนวณรูปหลายเหลี่ยมซึ่งครอบคลุมน้อยกว่า 3 พิกเซลคุณอาจต้องการดูว่าคุณสามารถทำอะไรเกี่ยวกับการคัดและ LOD)
ฟิลิปป์

25

ในทางทฤษฎีแล้ว Vertex Color ให้สีแก่แบบจำลองโดยไม่ต้องกังวลกับพื้นผิว นี่เป็นเรื่องธรรมดาใน CAD

enter image description here enter image description here enter image description here enter image description here

ในทางปฏิบัติมันเป็นเพียงหนึ่งช่องอื่น ๆ ที่คุณสามารถใช้เพื่อผลักดันข้อมูลลงในจุดสุดยอดซึ่งคุณใช้ในการ Shader จุดสุดยอดในการทำสิ่งที่บ้า

"จุดยอดง่ายของอวกาศ 3 มิติไม่ใช่หรือ"

นั่นคือสิ่งที่ฉันเคยคิดเมื่อแรกเริ่มด้วย 3D ผมได้เรียนรู้อย่างรวดเร็วว่าผมผิด

คุณสามารถคิดว่าจุดยอดเป็นหยดข้อมูลที่ทำมุมของรูปสามเหลี่ยมที่คุณต้องการทาสีบนหน้าจอ (และส่วน "มุม" หรือส่วน "สามเหลี่ยม", "สี" หรือ "หน้าจอ" ไม่เป็นความจริงเสมอ ) ตำแหน่งคือตัวเลือกเดียว - แง่มุมของหยดข้อมูลที่เราเรียกว่า Vertex

มีหลายสิ่งที่คุณสามารถทำได้โดยการแนบข้อมูลเพิ่มเติมกับจุดสุดยอด ตัวอย่างที่มีชื่อเสียงที่สุดคือคุณสามารถเพิ่มพิกัดยูวีเพื่อวาดพื้นผิวบนสามเหลี่ยมนั้น คุณ (ปกติ) ไม่สามารถตัดสินใจได้ว่าส่วนใดของพื้นผิวที่จะวาดลงบนสามเหลี่ยมหากคุณมีจุด - คุณต้องมีพิกัดพื้นผิวด้วย

ตัวอย่างมาตรฐานอื่น ๆ ของสิ่งที่อยู่ในหยดนั้นเป็นบรรทัดฐานและแทนเจนต์ สิ่งสำคัญคือพวกเขาทั้งหมดเป็นตัวเลือกรวมถึงตำแหน่ง Vertex Color เป็นเพียงหนึ่งในอินพุตเสริมที่คุณสามารถใช้หรือใช้ในทางที่ผิดเพื่อสร้างภาพสวย ๆ บนหน้าจอ


2
".. เป็นหยดข้อมูลที่รวมกันเป็นรูปสามเหลี่ยม" แม้จะไม่จำเป็นก็ตาม Vertexes สามารถแสดงผลเป็นจุดได้ดี
Kromster กล่าวว่าสนับสนุน Monica

3
สำหรับตัวอย่างที่ดีบางส่วนของผลกระทบ Shader ที่คุณสามารถบรรลุการใช้สีที่จุดสุดยอดผมขอแนะนำให้ตรวจสอบจากนาตาลีเบิร์ค GDC พูดคุยจากปีที่แล้ว "เคลื่อนไหวกับคณิตศาสตร์" (วิดีโอเป็นสมาชิกเท่านั้นในขณะนี้ แต่ภาพนิ่งได้ฟรีที่นี่ ) . เธอแสดงให้เห็นว่ามีอนิเมชั่นกี่ชิ้นในอุปกรณ์ของ Destiny, ตัวละครผมและผ้าและแม้กระทั่งบางส่วนของศัตรูและสภาพแวดล้อมของพวกเขาก็ประสบความสำเร็จด้วยการใช้เครื่องจุดยอด
DMGregory

5
ฉันขอยืนยันว่าสิ่งเหล่านั้นไม่ใช่สีจุดยอด แต่คุณลักษณะจุดสุดยอดแสดงเป็นสีเพื่อการรับรู้ที่ง่ายขึ้น
Kromster กล่าวว่าสนับสนุน Monica

ในการพูดคุยนี้เกี่ยวกับ FortNite มีการใช้งานสิ่งที่คล้ายกันประดิษฐ์แม้ว่าฉันจำได้อย่างถูกต้องฉันคิดว่าพวกเขาส่วนใหญ่ใช้ช่อง UV ของจุดยอดแทนที่จะเป็นช่องสี
DMGregory

3
การพูดอย่างเคร่งครัดจากมุมมองเชิงเรขาคณิต / คณิตศาสตร์จุดยอดเป็นเพียงจุดในอวกาศ 'สีจุดสุดยอด' เป็นคุณลักษณะที่ใช้กับจุดสุดยอดโดย 'ความคิด' ของจุดสุดยอดที่ใช้โดย GPU มันเหมือนกับวงกลมที่มีสีหรือไม่ 'ความคิด' ทางเรขาคณิต / คณิตศาสตร์ของวงกลมไม่มีสี แต่ 'ความคิด' ของซอฟต์แวร์การแสดงผลของวงกลมเชื่อมโยงสีกับวงกลม ดังนั้นอาร์กิวเมนต์ของ @ Kromster นั้นถูกต้องทางเทคนิคมากกว่า
Pharap

8

จุดยอดสามารถมีสีมันเป็นคุณสมบัติเช่นเดียวกับปกติของมัน

ในสภาพแวดล้อม 3 มิติสามเหลี่ยมจะได้สีตามข้อมูลสีของจุดยอด แฟรกเมนต์ที่ใกล้เคียงกับจุดสุดยอด A จะได้สีของมันส่วน closesr ไปจนถึงจุดยอด B จะได้รับ colornof B และสีจะแทรกระหว่าง 2

มันทำงานในลักษณะเดียวกับแสงต่อจุดสุดยอด

เป็นวิธีง่ายๆในการเพิ่มสีสันให้กับแบบจำลองโดยไม่ต้องใช้พื้นผิว


+1 สำหรับการให้ตัวอย่างที่คุ้นเคย (หวังว่า) ของคุณลักษณะจุดสุดยอดอื่น ๆ ที่คล้ายกัน
AC

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

@aml คุณสามารถใช้ "โอเปอเรเตอร์" แบบแฟลตใน glsl เพื่อส่งออกทำให้การแรเงาดูราบเรียบ มันไม่สมบูรณ์เหมือนกัน แต่ใช้งานได้
Bálint

คุณลักษณะการแก้ไขอื่น ๆ : การประสานงานพื้นผิวและบัฟเฟอร์ z! เรามีจุดสุดยอดคอมพิวเตอร์คำนวณข้อมูลบางอย่างสำหรับแต่ละจุดยอดของรูปสามเหลี่ยมทั้งสามเหล่านั้นจะถูกสอดแทรกเมื่อวาดรูปสามเหลี่ยมบนหน้าจอ (หรือในบัฟเฟอร์บางส่วน) และพิกเซล shader ถูกเรียกด้วยค่า interpolated สำหรับแต่ละพิกเซลวาด
user1952009

@aml แน่นอนว่า x2 ไม่ใช่คอขวด และการสร้างรูปทรงเรขาคณิตสำหรับสิ่งนั้นฉันจะบอกว่า (เช่นการเปลี่ยนพื้นผิวที่ลึกลงไปเป็นรูปสามเหลี่ยม )
user1952009

2

มีคำตอบที่ชัดเจนอยู่แล้วที่นี่ - ฉันแค่อยากจะสอดไส้ด้วยวิธีธรรมดา ๆ อีกหนึ่งอย่างที่คุณจะเห็นสีจุดยอดที่ใช้:

การเปลี่ยนสีของวัตถุ (หรือคุณสมบัติอื่น ๆ ) ภายในการเรียกชุด / วาดเดียว

คุณจะเห็นสิ่งนี้ใช้ในการแสดงผลระบบอนุภาคข้อความและสไปรต์แบบแบตช์

ลองนึกภาพคุณมีตัวปล่อยอนุภาคที่วางไข่ด้วยสีเริ่มต้นแบบสุ่มหรือจางหายไป 0 อัลฟาตลอดอายุของอนุภาค หากเราต้องใช้ชุดเครื่องแบบ Shader เพื่อส่งข้อมูลสีนี้เราจะต้องวาดอนุภาคแต่ละสีที่แตกต่างกันในการเรียกแบบดึงตัวเองทำให้ระบบอนุภาคมีราคาแพงกว่ามาก แต่เราสามารถอบสีเหล่านี้ลงในข้อมูลจุดสุดยอดสำหรับอนุภาคและแสดงแบทช์ทั้งหมดเข้าด้วยกันในการโทรครั้งเดียว

Unity ดูเหมือนจะใช้เทคนิคนี้สำหรับการเปลี่ยนแปลงสีของอนุภาครวมถึงการระบายสีอักขระแต่ละตัวใน TextMesh หรือ Sprites ที่แสดงร่วมกันเป็นชุด

ฉันเชื่อว่าคุณสามารถทำสิ่งที่คล้ายกับการวางรูปทรงเรขาคณิต แต่ฉันไม่รู้ว่าประสิทธิภาพทั้งสองเปรียบเทียบกันอย่างไร เป็นไปได้ว่าในวันนี้การปรับแต่งสีแบบอินสแตนซ์ผ่านสีจุดสุดยอดนี้ถือเป็นเรื่องที่ต้องทำมากกว่าเพื่อรองรับฮาร์ดแวร์ OpenGL 3.1 / DX9 ก่อนเช่นอุปกรณ์พกพาบางรุ่น ฉันยินดีรับฟังความคิดเห็นจากผู้ที่เคยปรับแต่งประสิทธิภาพมากขึ้นด้วยแบทช์และอินสแตนซ์เพื่อช่วยให้ชัดเจนว่าเทคนิคเหล่านี้มีการใช้สีจุดสุดยอดแทนที่สำหรับจุดประสงค์นี้หรือไม่ :)

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