แสดงผลน้ำมัน / น้ำเสีย?


19

ตัวช่วยสร้าง shader ใด ๆ ออกไปมีความคิดว่าจะทำเอฟเฟกต์น้ำที่มันหรือมีมลภาวะได้อย่างไรเช่นนี้:

น้ำมัน

ตามหลักการแล้วน้ำจะไม่เป็นน้ำมันอย่างสม่ำเสมอ แต่สามารถสร้างน้ำมันได้จากแหล่งกำเนิดบางแหล่ง (เช่นท่อระบายน้ำเสียจากโรงงานเคมี) จากนั้นกระจายไปทั่วร่างกายน้ำ ความคิดของฉันสำหรับส่วนนี้คือการเก็บ "แผนที่น้ำมัน" เป็นพื้นผิว 2D ที่กำหนดความหนาแน่นของน้ำมันในแต่ละจุดบนผิวน้ำ มันจะกระจายและเคลื่อนที่ตามธรรมชาติด้วย water vel; ocity ณ จุดนั้น (ฉันมีการจำลองอนุภาคคลื่นสำหรับคลื่นแบบไดนามิกและฉันกำลังทำสิ่งที่คล้ายกับโฟมบนผิวน้ำ) อย่างไรก็ตามฉันไม่แน่ใจว่าร่างกายจะถูกต้องอย่างไรเนื่องจากน้ำมันอาจไม่เคลื่อนที่ด้วยความเร็วเท่ากับน้ำ

และฉันก็ไม่รู้ว่าจะทำสี trippy เหล่านั้นได้อย่างไร :-) คิด?


ใช้พื้นผิว .. ? สีไล่ระดับสีรัศมีใช้การบิดเบือนบาง ..
bobobobo

@bobobobo - ทิศทางที่คุณดูมีผลกับสีที่แสดงแม้ว่า ... youtube.com/watch?v=NRtUoMG16ZU
Robert Fraser

1
คุณจะต้องการใช้ shader ตามen.wikipedia.org/wiki/Thin-film_interferenceแต่ฉันไม่รู้ว่าจะเขียนเรื่องนี้อย่างไร
jzx

2
( gamedev.net/page/resources/_/technical/ ...... ) ฉันไม่สามารถกลั่นกรองคำตอบได้เพราะฉันไม่ทราบหัวข้อ
horatio

คำตอบ:


25

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

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

sin(2.0 * pi * oilThickness / (dot(L, H) * wavelength)) * 0.5 + 0.5

ในทางทฤษฎีแล้วสิ่งนี้ควรถูกรวมเข้ากับความยาวคลื่นทั้งหมด แต่ในทางปฏิบัติคุณอาจทำได้แค่สีแดงสีเขียวและสีน้ำเงินสมมุติว่า 700, 550 และ 400 นาโนเมตรตามลำดับ การเปลี่ยนความหนาของน้ำมันจะเปลี่ยนรัศมีของวงแหวนสี ฉันอาจจะตัด2.0 * pi * oilThickness / wavelengthเป็นค่า RGB เดียวที่ให้แก่ shader เป็นค่าสม่ำเสมอ คุณสามารถคูณมันด้วยพื้นผิวเพื่อจำลองความหนาของน้ำมันที่แตกต่างกันได้หากต้องการ - นั่นอาจเป็นสิ่งที่ให้พื้นผิวที่น่าสนใจที่สุดในภาพด้านบน

สิ่งนี้จะสร้างค่าสี RGB ซึ่งคุณสามารถนำไปคูณกับ BRDF ของคุณได้ dot(L, H)ปัจจัยที่จะนำมาใช้สำหรับจุดไฟ / ทิศทางและคุณสามารถใช้แทนdot(N, V)ในการมีสำหรับการใช้นี้เพื่อแผนที่สะท้อนสภาพแวดล้อมได้เป็นอย่างดี

ข้อจำกัดความรับผิดชอบ: ฉันยังไม่ได้ลองสิ่งนี้ใน shader เพียงแค่วาดไดอะแกรมและโน้มน้าวตัวเองว่า "ควรจะทำงาน" ... ดังนั้นให้ฉันรู้ผลลัพธ์ถ้าคุณลองทำดู! :)


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