เอฟเฟ็กต์เชิงปริมาตรเช่นควันหมอกหรือก้อนเมฆโดย raytracer เป็นอย่างไร ต่างจากวัตถุทึบพวกนี้ไม่มีพื้นผิวที่กำหนดไว้อย่างดีในการคำนวณทางแยกด้วย
เอฟเฟ็กต์เชิงปริมาตรเช่นควันหมอกหรือก้อนเมฆโดย raytracer เป็นอย่างไร ต่างจากวัตถุทึบพวกนี้ไม่มีพื้นผิวที่กำหนดไว้อย่างดีในการคำนวณทางแยกด้วย
คำตอบ:
การปรากฏตัวของปริมาตร (หรือที่เรียกว่าสื่อที่มีส่วนร่วม) ในธรรมชาตินั้นเกิดจากอนุภาคเล็ก ๆ เช่นฝุ่นละอองหยดน้ำหรือแพลงก์ตอนที่แขวนอยู่ในของเหลวรอบ ๆ เช่นอากาศหรือน้ำ อนุภาคเหล่านี้เป็นวัตถุที่เป็นของแข็งและแสงหักเหหรือสะท้อนออกจากวัตถุเหล่านี้ตามที่มันจะอยู่บนพื้นผิวปกติ ในทางทฤษฎีสื่อที่มีส่วนร่วมสามารถจัดการได้โดยตัวติดตามรังสีแบบดั้งเดิมที่มีจุดตัดที่ผิวทางเท่านั้น
แน่นอนว่าจำนวนของอนุภาคเหล่านี้ทำให้มันเป็นไปไม่ได้ที่จะตรวจจับพวกมันเป็นรายบุคคล แต่พวกมันถูกประมาณด้วยแบบจำลองทางสถิติ: เนื่องจากอนุภาคมีขนาดเล็กมากและระยะห่างระหว่างอนุภาคนั้นมีขนาดใหญ่กว่าขนาดของอนุภาคมากปฏิสัมพันธ์ของแสงกับอนุภาคแต่ละตัวสามารถจำลองเป็นอิสระทางสถิติได้ ดังนั้นจึงเป็นการประมาณที่สมเหตุสมผลในการแทนที่อนุภาคแต่ละอนุภาคด้วยปริมาณอย่างต่อเนื่องซึ่งอธิบายการโต้ตอบของอนุภาคแสงโดยเฉลี่ยในพื้นที่นั้น ๆ ในอวกาศ
สำหรับการขนส่งแสงตามปริมาตรทางกายภาพเราจะแทนที่อนุภาคจำนวนมากอย่างไม่น่าเชื่อด้วยสื่อที่มีส่วนร่วมอย่างต่อเนื่องซึ่งมีคุณสมบัติสองประการ: ค่าสัมประสิทธิ์การดูดซับและค่าสัมประสิทธิ์การกระเจิง สัมประสิทธิ์เหล่านี้สะดวกมากสำหรับการติดตามรังสีเนื่องจากพวกมันอนุญาตให้เราคำนวณความน่าจะเป็นของรังสีที่มีปฏิสัมพันธ์กับตัวกลางนั่นคือความน่าจะเป็นที่จะกระทบกับอนุภาคใดอนุภาคหนึ่งซึ่งเป็นฟังก์ชันของระยะทาง
ค่าสัมประสิทธิ์การดูดซับจะแสดง . บอกว่าแสงแห่งแสงต้องการเดินทางเมตรภายในสื่อที่เข้าร่วม ความน่าจะเป็นที่จะทำให้ผ่าน unabsorbed - นั่นคือไม่ได้ชนอนุภาคใดอนุภาคหนึ่งและถูกดูดซับโดยมัน -` เมื่อเพิ่มมากขึ้นเราจะเห็นว่าความน่าจะเป็นนี้ลดลงเป็นศูนย์นั่นคือยิ่งเราเดินทางผ่านสื่อได้นานเท่าไหร่ยิ่งมีโอกาสมากขึ้นที่จะโดนบางสิ่งบางอย่างและถูกดูดซับ สิ่งที่คล้ายกันมากมีค่าสัมประสิทธิ์การกระเจิง: ความน่าจะเป็นของรังสีที่ไม่กระทบกับอนุภาคและการกระจัดกระจายคือ ; นั่นคือยิ่งเราเดินทางผ่านตัวกลางได้นานเท่าไหร่ยิ่งมีโอกาสมากขึ้นที่เราจะชนอนุภาคและกระจายไปในทิศทางที่แตกต่างกัน
โดยปกติแล้วปริมาณสองปริมาณนี้จะถูกพับเป็นค่าสัมประสิทธิ์การสูญพันธุ์ครั้งเดียว . ความน่าจะเป็นในการเดินทาง เมตรผ่านสื่อโดยไม่ต้องโต้ตอบกับมัน (ไม่ถูกดูดซับหรือกระจาย) เป็นแล้ว . ในทางกลับกันความน่าจะเป็นของการโต้ตอบกับสื่อหลังจากนั้น เมตรคือ .
วิธีการนี้ใช้ในโหมดเรนเดอร์แบบทางกายภาพมีดังนี้: เมื่อรังสีเข้าสู่ตัวกลางเราน่าจะหยุดมันภายในตัวกลางและให้มันโต้ตอบกับอนุภาค ความสำคัญของการสุ่มตัวอย่างความน่าจะเป็นปฏิสัมพันธ์ ให้ระยะทาง ; สิ่งนี้บอกเราว่ารังสีเดินทางไป เมตรในตัวกลางก่อนที่จะกระทบกับอนุภาคและตอนนี้หนึ่งในสองสิ่งนี้เกิดขึ้น: รังสีอาจถูกดูดซับโดยอนุภาค (ด้วยความน่าจะเป็น ) หรือมันจะกระจายไป (ด้วยความน่าจะเป็น )
การกระจัดกระจายของรังสีอธิบายโดยฟังก์ชันเฟสและขึ้นอยู่กับลักษณะของอนุภาค ฟังก์ชั่นเฟส Rayleigh อธิบายการกระเจิงของอนุภาคทรงกลมที่มีขนาดเล็กกว่าความยาวคลื่นของแสง (เช่นชั้นบรรยากาศของเรา) ฟังก์ชันเฟสมิเอะอธิบายการกระเจิงของอนุภาคทรงกลมที่มีขนาดใกล้เคียงกับความยาวคลื่น (เช่นหยดน้ำ) ในกราฟิกมักใช้ฟังก์ชันเฟสHenyey-Greensteinแต่เดิมใช้กับการกระเจิงจากฝุ่นระหว่างดวงดาว
ตอนนี้ในกราฟิกเราปกติไม่แสดงภาพของสื่อไม่มีที่สิ้นสุด แต่เรนเดอร์สื่อภายในฉากที่ประกอบด้วยพื้นผิวที่แข็งเช่นกัน ในกรณีดังกล่าวเราจะทำการตรวจจับรังสีอย่างสมบูรณ์ก่อนจนกระทั่งมันกระทบพื้นผิวถัดไป สิ่งนี้ทำให้เรามีระยะทางไปยังพื้นผิวถัดไป. จากนั้นเราจะสุ่มตัวอย่างระยะห่างระหว่างการโต้ตอบในสื่อตามที่อธิบายไว้ก่อนหน้า ถ้าเรย์ชนกับอนุภาคบนหนทางสู่พื้นผิวถัดไปและเราก็ดูดซับหรือกระจายมัน ถ้ารังสีทำให้มันผ่านการได้รับบาดเจ็บและมีปฏิสัมพันธ์กับพื้นผิวตามปกติ
โพสต์นี้เป็นเพียงการแนะนำเล็กน้อยเกี่ยวกับการแสดงผลด้วยสื่อที่เข้าร่วม เหนือสิ่งอื่นใดฉันไม่สนใจค่าสัมประสิทธิ์เชิงพื้นที่ที่แตกต่างกันอย่างสิ้นเชิง (ซึ่งคุณต้องการสำหรับเมฆควันและอื่น ๆ ) บันทึกของ Steve Marschnerเป็นแหล่งข้อมูลที่ดีถ้าคุณสนใจ โดยทั่วไปสื่อที่เข้าร่วมนั้นยากที่จะแสดงผลได้อย่างมีประสิทธิภาพและคุณสามารถมีความซับซ้อนมากกว่าสิ่งที่ฉันอธิบายไว้ที่นี่ มีการจับคู่โฟตอน Volumetric , Photon Beams , การประมาณการแพร่กระจาย , การสุ่มตัวอย่างความสำคัญร่วมและอื่น ๆ นอกจากนี้ยังมีงานที่น่าสนใจในสื่อละเอียด ที่อธิบายสิ่งที่ต้องทำเมื่อแบบจำลองทางสถิติหยุดลงนั่นคือการโต้ตอบของอนุภาคไม่มีความเป็นอิสระทางสถิติอีกต่อไป
วิธีหนึ่งในการทำ - ซึ่งไม่ใช่วิธีการแก้ปัญหา "ไปที่" แต่สามารถใช้งานได้ดีคือการหาระยะทางที่รังสีเคลื่อนที่ผ่านปริมาตรและใช้การรวมฟังก์ชั่นความหนาแน่นบางอย่างเพื่อคำนวณว่า ตี.
นี่คือลิงก์ที่มีตัวอย่างการนำไปใช้: http://blog.demofox.org/2014/06/22/analytic-fog-density/
ขึ้นอยู่กับปริมาตรน้ำที่บรรจุ
ผลกระทบปริมาณสม่ำเสมอที่ไม่ได้อยู่ในการกระเจิงสามารถจำลองได้โดยเพียงแค่คำนวณระยะเข้าและออกจากรังสี
ไม่เช่นนั้นคุณต้องทำการรวมเส้นทางของรังสีหรือที่เรียกว่ารังสีเดินขบวน เพื่อหลีกเลี่ยงความต้องการในการถ่ายภาพรังสีทุติยภูมิ raymarching มักจะถูกรวมเข้ากับแคชบางประเภทเช่นความลึก, แผนที่ลึก, แผนที่อิฐหรือเมฆ voxel สำหรับแสงเงา ฯลฯ วิธีนี้คุณไม่จำเป็นต้องเดินขบวนฉากทั้งหมด แคชที่คล้ายกันมักจะทำกับพื้นผิวขั้นตอนปริมาณ
นอกจากนี้ยังเป็นไปได้ที่จะแปลงพื้นผิวเป็นพื้นผิวดั้งเดิมเช่นกล่องทรงกลมหรือระนาบที่มีพื้นผิวที่อ่อนนุ่มที่เหมาะสม จากนั้นคุณสามารถใช้เทคนิคการเรนเดอร์ปกติเพื่อแก้ปัญหาปริมาตร ปัญหาเกี่ยวกับเรื่องนี้คือคุณมักจะต้องดั้งเดิมมากมาย นอกจากนี้รูปร่างของดึกดำบรรพ์อาจปรากฏขึ้นเป็นตัวอย่างที่สม่ำเสมอเกินไป