ฉันจะสร้างเสียงรบกวนขั้นตอนบนทรงกลมได้อย่างไร


15

ฉันต้องการที่จะสร้างสัญญาณรบกวนขั้นตอนบนพื้นผิวของทรงกลม (เช่นการสร้างดาวเคราะห์หรือลูกบอลที่มีพื้นผิวหินอ่อนแบบขั้นตอน) แน่นอนว่าฉันสามารถใช้อัลกอริธึมสัญญาณรบกวนมาตรฐานและแมปลงบนทรงกลมได้ แต่สิ่งนี้มีปัญหาทั้งหมดเกี่ยวกับการฉายเครื่องบินลงบนทรงกลมเช่นการบิดเบี้ยวบนเสาหรือที่อื่น ๆ

ฉันคิดว่าฉันสามารถสร้างเสียงระดับเสียงและ "ตัดออก" ทรงกลม แต่ดูเหมือนว่าจะไม่มีประสิทธิภาพโดยไม่จำเป็น - และถ้าเสียงมีบางสิ่งประดิษฐ์ตามกริดตารางเหล่านี้จะยังไม่ปรากฏขึ้นบนทรงกลมอย่างสม่ำเสมอ นอกจากนี้อย่างน้อยในกรณีของเสียง Simplex การตัดส่วนที่เป็นเสียง 2 มิติโดยทั่วไปจะมีลักษณะที่แตกต่างจากการสร้างเสียงแบบสองมิติทันที

มีวิธีใดบ้างที่จะหลีกเลี่ยงปัญหาเหล่านี้เช่นโดยการสร้างเสียงรบกวนบนทรงกลมได้หรือไม่? เสียงควรมีอย่างน้อยคุณภาพของเสียง Perlinนึกคิดของเสียง Simplex


บางทีการฉาย triplanar, เท่าที่เห็นใน GPU อัญมณี 3 ? คำถามคือเสียงรบกวนจะเบลอหรือไม่พึงประสงค์เมื่อผสมระหว่างการฉายภาพที่แตกต่างกัน
นาธานรีด

ฉันได้เพิ่มวิธีการอื่นที่เป็นไปได้ในโพสต์ของฉัน มันอาจจะคุ้มค่าที่จะอธิบายคำถามของคุณด้วยข้อกำหนดที่ละเอียดยิ่งขึ้น นั่นคือเหตุผลที่เสียงสองมิติสองมิติของ 3D ไม่เป็นไปตามข้อกำหนดด้านภาพของคุณ? ข้อกำหนดด้านประสิทธิภาพของคุณคืออะไร?
John Calsbeek

@ JohnCalsbeek จริงๆแล้วฉันไม่มีความต้องการที่หนักหน่วง นี่เป็นเพียงคำถามที่ฉันอยากรู้เกี่ยวกับสิ่งที่ฉันคิดว่าฉันจะไปให้เบต้าส่วนตัว แน่นอนว่าการตัดแบ่งเสียง 2 มิติออกจากเสียง 3 มิติจะเพียงพอสำหรับการใช้งานหลายอย่าง แต่ฉันแน่ใจว่ามันจะส่งผลกระทบต่อประสิทธิภาพการทำงานและแอนไอโซทรอปิกส์บ้าง "การตัดทรงกลมออกจากเสียงรบกวน 3D เป็นตัวเลือกที่ดีที่สุดของคุณเพราะ ... " เป็นคำตอบที่ถูกต้องแน่นอน
Martin Ender

คุณอาจตรวจสอบ shadertoy นี้ซึ่งส่งเสียงรบกวนกับทรงกลม: shadertoy.com/view/4sfGzS
Alan Wolfe

คำตอบ:


15

ฉันจะพิจารณาด้วยเสียง 3 มิติและประเมินบนพื้นผิวของทรงกลม

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

Fibonacci grid บนพื้นผิวของทรงกลม

ฉันไม่ได้เคี้ยวคณิตศาสตร์เพื่อตัดสินว่าจะต้องทำงานมากน้อยแค่ไหนในการคำนวณดัชนีและระยะทางไปยังเพื่อนบ้านทั้งสี่ของคุณ (ฉันไม่รู้ด้วยซ้ำว่าคุณจบลงด้วยการมีสี่เพื่อนบ้านที่ดีในทุกกรณี) หรือไม่ และฉันคิดว่ามันอาจมีประสิทธิภาพน้อยกว่าการใช้เพียงแค่ 3D noise

แก้ไข: มีคนอื่นเคี้ยวผ่านคณิตศาสตร์! ดูกระดาษใหม่นี้บนทรงกลม Fibonacci แมป ดูเหมือนว่ามันจะตรงไปตรงมาเพื่อปรับให้เข้ากับเสียงทรงกลม


หากคุณเรนเดอร์ทรงกลมไม่เพียง แต่ประเมินเสียงรบกวนบนพื้นผิวของทรงกลมและปรับได้ด้วยทรงกลม tessellating ของคุณเพื่อความละเอียดของตาข่ายเสียงของคุณคุณสามารถสร้างตารางเนื้อที่บนพื้นผิวของทรงกลม (icosahedron ย่อย) ปกติ):

ทรงกลมทางธรณีวิทยา

แต่ละจุดยอดของทรงกลมสามารถสร้างการไล่ระดับสีแบบสุ่มสำหรับเสียงที่มีการไล่ระดับสี ในการรับข้อมูลนี้ไปที่ pixel shader (ยกเว้นกรณีที่คุณต้องการการประมาณค่าแบบตรงไปตรงมาเช่นสัญญาณรบกวนค่า) คุณอาจต้องการเทคนิคเช่นการแสดงโครงลวดของบทความนี้พร้อมพิกัด barycentric : ทำการเรนเดอร์แบบ unindexed แต่ละจุดยอดที่มีพิกัด barycentric . จากนั้นคุณสามารถอ่านจากSV_PrimitiveID(หรือเทียบเท่า OpenGL) ในตัวปรับพิกเซลอ่านการไล่ระดับสีสามเสียงจากจุดยอดตามรูปสามเหลี่ยมที่คุณใช้

ฉันคิดว่าส่วนที่ยากที่สุดของวิธีนี้กำลังเกิดขึ้นกับรูปแบบการแมป ID สามเหลี่ยมของคุณกับสามตัวอย่างเพื่อค้นหาค่าเสียงในแต่ละจุดยอด

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


2
ฉันไม่เคยได้ยินเรื่องฟีโบนักชีมาก่อน มันเจ๋งมาก!
Nathan Reed

นั่นเป็นกระดาษที่น่าสนใจ ดูเหมือนว่าคุณสามารถปรับพารามิเตอร์เพื่อให้ใกล้กับกริดสแควร์หรือกริดหกเหลี่ยมซึ่งจะช่วยให้วิธีการสร้างเสียงที่แตกต่างกัน
trichoplax

ฉันมีผลลัพธ์ที่ไม่เลวร้ายสอดแทรกอยู่ใกล้กับขอบของแผ่นกระเบื้อง (ขอบห่อ) แต่ขึ้นอยู่กับว่าคุณพยายามทำอะไรเพื่อให้ได้ผลและพารามิเตอร์ของเสียงรบกวน ใช้งานได้ดีสำหรับเสียงที่ค่อนข้างพร่ามัวไม่ค่อยดีนักกับ spikey / fine-grained
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.