ทำไมมันแพงเป็นสองเท่าในการสร้างฟังก์ชั่นเสียงรบกวนที่สามารถปูกระเบื้องได้?


13

ฉันเคยเห็นในหลาย ๆ ที่ที่ทำเสียงรบกวน Perlin ต่อเนื่องต้องใช้การคำนวณสองครั้งในวิธีที่แตกต่างกันเล็กน้อยและรวมผลลัพธ์ทั้งสอง

คำถามที่พบบ่อยเกี่ยวกับคณิตศาสตร์เรื่องเสียงรบกวน Perlin นี้มีสูตร:

Floop(x,y,z)=(tz)F(x,y,z)+zF(x,y,zt)t

เพื่อทำให้ฟังก์ชั่นสัญญาณรบกวนวนซ้ำในทิศทางนอกจากนี้ยังกล่าวถึงการขยายสิ่งนี้การวนซ้ำใน 2 มิติจะใช้การประเมิน 4 ครั้งและการวนซ้ำใน 3 มิติจะใช้การประเมิน 8 ครั้งFzFF

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

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

คำตอบ:


19

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

เสียงเพอร์ลิน เสียงเพอร์ลินผสม

ด้านซ้ายเป็นเสียงเพอร์ลิน ทางด้านขวามีสองเสียงของ Perlin คือซ้อนกันและผสมจากซ้ายไปขวา

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

ตกลงดังนั้นก็ไม่เชิงว่าไม่ดีเพียงแค่มองที่เสียงดิบ ... แต่ถ้าคุณแล้วทำแปลงไม่เชิงเส้นใด ๆ ในภาพที่มีความคมชัดไม่สม่ำเสมออาจทำให้เกิดปัญหา ตัวอย่างเช่นต่อไปนี้เป็นภาพเหล่านั้นที่เกณฑ์ 60% (ลองนึกถึงการสร้างเกาะในมหาสมุทร)

เกณฑ์ Perlin noise เสียงรบกวน Perlin แบบผสมผสาน

ตอนนี้คุณสามารถเห็นได้อย่างชัดเจนว่าภาพด้านขวามีพื้นที่สีขาวน้อยลงตรงกลาง

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

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


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