ฉันจะนำเงา 2D มาใช้ระหว่างเลเยอร์ได้อย่างไร


10

ฉันจะใช้เงา 2 มิติที่ถูกโยนโดยวัตถุในเลเยอร์อื่นได้อย่างไร

ไม่ชอบแสงแบบไดนามิกในบทช่วยสอนที่รู้จักกันดีจาก Catalin Zima :

ป้อนคำอธิบายรูปภาพที่นี่

แต่ชอบเงาของท่อในวิดีโอนี้ :

ป้อนคำอธิบายรูปภาพที่นี่

และชอบเงาของแพลตฟอร์มและตัวละครในวิดีโอนี้ :

ป้อนคำอธิบายรูปภาพที่นี่

ฉันต้องการใช้แสงชนิดเดียวกันในฉากที่มีหลายเลเยอร์และแสงจำนวนมากที่มีสีต่างกัน

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

คำตอบ:


1

ซึ่งสามารถทำได้ด้วยการปิดบัง มีหลายวิธีที่จะทำ

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

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

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

draw background
for each light intersecting viewing bounds:
  offset = light.position - camera.position
  offset *= SCALE FACTOR (0.25 maybe)
  draw shadow foreground at offset
draw foreground

แสงไฟที่ "เข้าใกล้" กับฉากจะมีขนาดเล็กกว่า หากคุณต้องการความลึกหลายระดับมีคณิตศาสตร์บางอย่างที่จะจัดการสิ่งเหล่านั้นและรูปทรงเรขาคณิตที่เรียบง่าย


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

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