คำถามติดแท็ก shadows

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

1
เหตุใดการทำแผนที่เงาจึงเป็นมาตรฐาน
แม้ว่าฉันจะเป็นโปรแกรมเมอร์โดยการค้าขาย แต่ฉันก็แทบไม่ได้สัมผัสกับการพัฒนาเกมเลย ฉันมีคำถามนี้มาระยะหนึ่งแล้วและตอนนี้ฉันกำลังมองหาการพัฒนาเกมฉันคิดว่ามันจะเป็นช่วงเวลาที่ดีสำหรับการถาม เหตุใดการทำแผนที่เงาจึงเป็นวิธีที่พิเศษในการใช้เกมเพื่อสร้างเงา จะทื่อมันดูน่ากลัว แม้กระทั่งเกมที่ทันสมัยที่มีการตั้งค่าเงาสูงสุดมีเงาแบบ block-y ที่ทำให้เสียสมาธิมาก Doom 3 ทำเมื่อ 11 ปีที่แล้วใช้ปริมาณเงาที่ดูดีกว่าการใช้แผนที่เงาที่ฉันเคยเห็นซึ่งรวมถึงเกม AAA ที่เปิดตัวในสัปดาห์เดียวกันกับคำถามนี้ที่โพสต์ไว้ บุคคลที่สามดัดแปลงสำหรับ Doom 3 ทำให้ขอบเงาอ่อนลงทำให้พวกเขาน่าประทับใจยิ่งขึ้น มีปัญหาทางเทคนิคหรือข้อ จำกัด บางประการเกี่ยวกับการนำสิ่งต่าง ๆ เช่นปริมาณเงา? แผนที่เงานั้นง่ายต่อการนำไปใช้งานหรือไม่ที่ devs ไม่ได้พิจารณาเรื่องอื่นเลย? ข้อมูลเดียวที่ฉันสามารถค้นหาเกี่ยวกับเรื่องนี้คือรูปหลายเหลี่ยมที่ประกอบขึ้นเป็นเล่มอาจมีขนาดใหญ่มากขึ้นและมีความต้องการมากขึ้น บางทีปริมาณเงามีความต้องการของระบบที่สูงขึ้นมาก แต่ถ้าเป็นเช่นนั้นพวกเขาจะใช้มันอย่างไรในปี 2004? คำถามนี้ไม่เฉพาะเจาะจงกับการทำแผนที่เงากับปริมาณเงาพวกเขาเป็นเพียง 2 เดียวที่ฉันเคยเห็นใช้ในผลิตภัณฑ์เต็มรูปแบบและฉันไม่สามารถหาข้อมูลมากมายเกี่ยวกับเทคนิคอื่น ๆ ได้

2
ทำไมบางเกมแสดงแสงไฟส่องทะลุกำแพง?
ในบางเกมฉันเห็นแสงไฟส่องผ่านผนังแม้ว่าฉันจะตั้งค่าคุณภาพวิดีโอในระดับสูง ตัวอย่างของเกมที่ฉันเล่นเมื่อไม่นานมานี้คือ Borderlands 2 (ระเบิดขีปนาวุธ) และ Call of Cthulhu (ตะเกียง; เกมยังใช้ Unreal Engine 4) นี่เป็นข้อบกพร่องหรือมีเหตุผลด้านประสิทธิภาพหรือไม่ ตัวอย่าง Borderlands 2: https://youtu.be/9bV83qA6_mU?t=419 (ไม่กี่ครั้ง แต่อย่างรวดเร็ว) คำถามโบนัส: ในกรณีหลังมีการติดตาม ray ด้วยวิธีใดบ้างที่สามารถใช้ในการแก้ปัญหาได้อย่างถูก? ฉันเดาว่าแพง RT แก้ไขปัญหาได้แน่นอน แต่ฉันสงสัยว่ามันสามารถใช้ในรูปแบบ "ถูก" เพื่อแก้ปัญหาเฉพาะนี้ได้หรือไม่

1
ฉันจะทำให้ PagedGeometry grass รับเงาได้อย่างไร
ฉันทำสลับไป Ogre3D (v1.7) และเพื่อใช้PagedGeometry สิ่งที่ฉันพยายามทำคือสร้างฉากที่เรียบง่ายด้วยภูมิประเทศต้นไม้และหญ้า โดยสังเขปฉันต้องการบรรลุผลเช่นนี้ใน Ogre: โปร่งใส / คัตเอาท์ถูกนำมาใช้ในการสาธิต PagedGeometry แต่ฉันไม่สามารถหาวิธีแก้ปัญหาเกี่ยวกับวิธีการร่ายเงาบนหญ้าอย่างถูกต้องตามตัวอย่างด้านบน ฉันสามารถใช้เทคนิคใดในการทำสิ่งนี้ให้สำเร็จ

1
เทคนิคการแสดงเงาที่ทันสมัย?
รัฐของศิลปะในแง่ของการแสดงเงาคืออะไร? เป้าหมายของฉันคือ OpenGL 3.2 โดยใช้ไปป์ไลน์การแสดงผลที่เลื่อนออกไปหากมีความสำคัญ เป็นเวลาหลายปีแล้วที่ฉันได้ดูการเรนเดอร์เงาและในเวลานั้นมีเทคนิคมากมายตั้งแต่ stencils ไปจนถึงวิธีการแมปเงาต่างๆ ในเวลานั้นเงาการเรนเดอร์ต้องผ่านการเรนเดอร์แยกต่างหากซึ่งควบคุมโดย CPU แต่เมื่อเร็ว ๆ นี้ฉันเห็นการสาธิตว่ามีการแสดงฉากทั้งหมดบน GPU รวมถึงเงา ฉันไม่รู้ว่ามันจะสำเร็จได้อย่างไรหรือถ้ามันเป็นสิ่งที่สมเหตุสมผลที่ต้องทำ (นอกเหนือจากการสาธิตเทคโนโลยี) ด้วยข้อมูลเก่าจำนวนมากบนอินเทอร์เน็ตฉันต้องการที่จะเรียนรู้ว่าผู้คนใช้วิธีการใดในยุคนี้และสามารถผลักไปที่ GPU ได้มากแค่ไหน (สมมุติว่า OpenGL รุ่นเป้าหมายของฉันรองรับ)
16 opengl  shadows 

1
สิ่งประดิษฐ์แผนที่เงา
ฉันต้องการลองเพิ่มเงาให้กับเกม 3D XNA ฉันได้ตั้งค่าสภาพแวดล้อมการทดสอบด้วยแสงเดียวและกล้องหนึ่งตัว อย่างไรก็ตามฉันพบสิ่งประดิษฐ์ด้วยวิธีการของฉัน ฉันใช้รหัส shader จากhttp://pastebin.com/zXi0hmsUเพื่อแสดงผลลัพธ์สุดท้ายและ http://pastebin.com/rY4Gcj9Nเพื่อสร้างแผนที่เงา รหัสตรงไปตรงมาและเกี่ยวข้องกับการผลิตความลึกจากมุมมองของแสงจากนั้นฉายลงในพื้นที่กล้องและตรวจสอบเพื่อหาข้อสรุป อย่างไรก็ตามจากมุมส่วนใหญ่ฉันได้ผลลัพธ์ที่น่าเกลียด ฉากประกอบด้วยลูกบาศก์ง่าย ๆ บางส่วน (สร้างขึ้นด้วยมือหันหน้าไปทางด้านนอกด้านหลังถูกคัดออก) แสงหนึ่งดวง (แผนที่เงาที่แสดงที่มุมบนซ้าย - ดูโอเค) และกล้องหนึ่งตัว RenderTarget ของฉันสำหรับแผนที่เงาถูกเตรียมใช้งานโดย int shadowMapSize = 512; RenderTarget2D shadowMap = new RenderTarget2D(GraphicsDevice, shadowMapSize, shadowMapSize, true, GraphicsDevice.PresentationParameters.BackBufferFormat, DepthFormat.Depth24Stencil8); GraphicsDevice.SetRenderTarget(shadowMap); GraphicsDevice.Clear(Color.White); GraphicsDevice.DepthStencilState = DepthStencilState.Default; หลังจากนั้นCreateShadowMapจะใช้เอฟเฟกต์ตามด้วยเอฟเฟกต์ LambertWithShadows SpriteBatchสุดท้ายแผนที่เงาจะถูกดึงมาใช้ ส่วนที่เหลือของรหัสประกอบด้วยเพียงแค่ให้ค่าที่ถูกต้องให้กับเฉด หากจำเป็นฉันสามารถให้บริการได้เช่นกัน

4
การฉายเงาแบบเรียลไทม์ในเกม 2D สามมิติ
ฉันเขียนเอนจิ้น isometric 2d ขนาดเล็กใน C ++ และฉันพยายามที่จะใช้การจำลองเงาแบบเรียลไทม์ ฉันทำตามวิธีง่าย ๆ ที่อธิบายไว้ในหน้านี้และนี่คือผลลัพธ์ (แสงอยู่ที่ตำแหน่งเดียวกันกับลูกบาศก์สีเหลือง): ผลลัพธ์เป็นสิ่งที่ดีมาก แต่มีเงาที่หายไปบนผนังและด้านบนของก้อน นี่คือตัวอย่างว่าควรมีลักษณะอย่างไร (ฉันวาดเงาที่คาดไว้เป็นสีเขียว): ก้อนทั้งหมดที่ถูกดึงออกมานั้นทำจาก 3 มิติสี่มิติที่อยู่ในตำแหน่ง XY และมีความลึก Z (z = x + y) ฉันใช้ OpenGL กับ orthographic matrix (glOrtho) เงาถูกวาดโดยใช้ stencil buffer ฉันกำลังมองหาแหล่งข้อมูลหรือโซลูชันที่จะช่วยให้ฉันใช้งานการจำลองเงานี้ ขอบคุณมาก!

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

5
ฉันจะใช้เทคนิคการเรนเดอร์อะไรในการวาดเอฟเฟกต์เงาของการ์ดในเกมการ์ด
อัลกอริทึมการแรเงาประเภทใดที่อาจใช้สร้างเงาเช่นนี้ สิ่งที่ฉันทำคล้ายกัน แต่ทั้งหมดนั้นทำด้วย 2D drawing API ที่ขับเคลื่อนโดย OpenGL ดังนั้นจึงไม่มีพิกัด Z นอกจากนี้สำหรับมือของฉันเองฉันอยากได้ความรู้สึกแบบที่เห็นที่นี่: ฉันไม่แน่ใจว่าจะทำอย่างไรให้ได้ร่มเงาดูใกล้เคียง จำนวนบัตรถูกผูกไว้กับการเปลี่ยนแปลงและไพ่ถูกโยนลงบนโต๊ะดังนั้นฉันจึงไม่สามารถใช้แผนที่แสงทุกประเภท ฉันควรมองหาอัลกอริทึมประเภทใด (นอกเหนือจากความพร่ามัวที่ฉันรู้ว่าต้องทำ) ขอบคุณ ปรับปรุง ฉันทำเกมการ์ด 2D ฉันต้องการเพิ่มออฟเซ็ทเงาจากการ์ดเล็กน้อยเช่น: วิธีที่ฉันคิดว่าจะทำคือ: รักษาพื้นผิวที่มีขนาดเท่ากับ backbuffer วาดสี่เหลี่ยมสีเข้มเป็นการ์ดชั่วคราวเพื่อพื้นผิวนั้น เบลอพื้นผิวนั้น วาดไพ่ของฉันลงบนพื้นผิวนั้น เพิ่มแสงสว่างบนการ์ด วาดเนื้อนี้ไปที่ backbuffer คำถามของฉันคือ: นี่เป็นวิธีที่ถูกต้องหรือไม่ มีวิธีทำโดยไม่ทำให้พื้นผิว (รักษาบิตแมป ใหญ่เป็น backbuffer)? จะปลอดภัยหรือไม่ที่จะสันนิษฐานว่าขนาดพื้นผิวสูงสุดจะไม่ เกินจากขนาดของแบ็คบุฟเฟอร์? (สิ่งที่ฉันหมายถึงคือถ้า backbuffer เป็น 2000x3000 แล้วมันปลอดภัยที่จะบอกว่าฉันสามารถสร้างพื้นผิวใน หน่วยความจำวิดีโอขนาดนั้นหรือไม่ ขอบคุณ

1
ฉันจะนำแสงและเงาไปใช้ในแผนที่ย่อยหลายชั้น 2 มิติได้อย่างไร
ฉันอยู่ในขั้นตอนการเขียนเกมมีมิติเท่ากันตั้งแต่เริ่มต้นและฉันต้องการทราบว่าฉันสามารถเพิ่มแสงและเงาได้อย่างไร รหัสที่ฉันได้จนถึงสามารถพบได้ที่นี่แต่มันควรจะเพียงพอที่จะรู้ว่าตอนนี้แผนที่มีอาร์เรย์ 3 มิติที่เรียบง่ายของจริง / เท็จค่า นี่คือภาพของสภาพแวดล้อม: หากเป็นเลเยอร์แผ่นเดียวมันจะตรงไปข้างหน้า ฉันสามารถเข้าใจ raycasting อย่างง่าย ๆ ใน 2d ที่จำเป็น อย่างไรก็ตามเนื่องจากแผนที่ของฉันมีความสูงหลายระดับเช่นเดียวกับบริเวณที่เป็นเหมือนถ้ำฉันจึงไม่รู้ว่าจะทำอย่างไรเพื่อให้เกิดเงาที่น่าเชื่อถือ บางทีวิธีต่อบล็อกเป็นวิธีที่เหมือนจริงหรือไม่?

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


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

1
ผู้คนได้รับสิทธิบัตร Reverse ของ Carmack อย่างไร
เห็นได้ชัดว่ามีความคิดสร้างสรรค์สิทธิบัตร Carmack ของย้อนกลับและพวกเขาประสบความสำเร็จในการบังคับใช้รหัสในการปรับเปลี่ยนเทคนิคของพวกเขาลดลงแหล่งที่มาเช่นเดียวกับการที่จะรวม EAX ในวาระ 3 แต่ Carmack's Reverse มีการพูดคุยกันบ่อยครั้งและเห็นได้ชัดว่าเป็นตัวเลือกที่ดีสำหรับการแรเงาที่เลื่อนออกไปดังนั้นจึงใช้ในการผลิตที่มีงบประมาณสูงอื่น ๆ เป็นจำนวนมาก แม้ว่าจะไม่เป็นไปได้ที่ Creative จะดำเนินการตาม บริษัท ขนาดเล็ก แต่ฉันก็สงสัยว่าสตูดิโอที่ใหญ่กว่าจะสามารถแก้ไขปัญหานี้ได้อย่างไร พวกเขาเพียงแค่ข้ามมือของพวกเขาและหวังว่า Creative จะไม่หมุนรอบพวกเขาหรือพวกเขาไม่ใช้ Carmack's Reverse เลย?

3
ปัญหาการแมปเงาครั้งแรก
ฉันใช้การทำแผนที่เงาพื้นฐานเป็นครั้งแรกใน OpenGL โดยใช้ shaders และฉันประสบปัญหาบางอย่าง ด้านล่างคุณสามารถดูตัวอย่างของฉากที่แสดงผลของฉัน: กระบวนการของการแมปเงาที่ฉันกำลังติดตามคือฉันแสดงฉากให้กับ framebuffer โดยใช้ View Matrix จากมุมมองแสงและเมทริกซ์การฉายและแบบจำลองที่ใช้สำหรับการเรนเดอร์ปกติ ในรอบที่สองฉันส่งเมทริกซ์ MVP ด้านบนจากมุมมองแสงไปยังตัวแบ่งจุดยอดซึ่งเปลี่ยนตำแหน่งเป็นพื้นที่แสง ส่วนของ shader จะแบ่งมุมมองและเปลี่ยนตำแหน่งเป็นพิกัดพื้นผิว นี่คือจุดสุดยอดของฉัน #version 150 core uniform mat4 ModelViewMatrix; uniform mat3 NormalMatrix; uniform mat4 MVPMatrix; uniform mat4 lightMVP; uniform float scale; in vec3 in_Position; in vec3 in_Normal; in vec2 in_TexCoord; smooth out vec3 pass_Normal; …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.