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

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

1
ทฤษฎีสัมพัทธภาพพิเศษใน GLSL
ฉันพยายามใช้ GLSL shader ซึ่งช่วยทำความเข้าใจสัมพัทธภาพพิเศษ Lorentz Transformation ลองมาสองแกนชิดสังเกตการณ์เฉื่อย และO O'ผู้สังเกตการณ์O'อยู่ในการเคลื่อนไหวสังเกตการณ์ WRT ด้วยความเร็วOv=(v_x,0,0) เมื่ออธิบายในแง่ของO'พิกัดเหตุการณ์P' = (x',y',z',ct')จะเปลี่ยนพิกัด(x,y,z,ct)= L (x',y',z',ct') โดยที่ L เป็นเมทริกซ์ 4x4 ที่เรียกว่าการแปลงแบบลอเรนซ์ซึ่งช่วยให้เราเขียนพิกัดของเหตุการณ์ P 'ในOพิกัด (สำหรับรายละเอียดดูhttp://en.wikipedia.org/wiki/Lorentz_transformation#Boost_in_the_x-direction ) ฉันได้เขียน Shader Vertex เบื้องต้นตัวแรกที่ใช้การแปลงแบบลอเรนซ์ที่กำหนดความเร็วให้กับทุกจุดสุดยอด แต่ฉันไม่สามารถทำให้การแปลงทำงานได้อย่างถูกต้อง vec3 beta= vec3(0.5,0.0,0.0); float b2 = (beta.x*beta.x + beta.y*beta.y + beta.z*beta.z )+1E-12; float g=1.0/(sqrt(abs(1.0-b2))+1E-12); // Lorentz factor (boost) float q=(g-1.0)/b2; …

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

2
แอนิเมชั่นโครงกระดูกที่มีประสิทธิภาพ
ฉันกำลังใช้รูปแบบแอนิเมชั่นโครงกระดูก ( ดังที่ได้รับแจ้งที่นี่ ) สำหรับเกม RTS การนำเสนอแต่ละแบบของแต่ละรุ่นบนหน้าจอจะมีขนาดเล็ก แต่จะมีจำนวนมาก! ในแอนิเมชั่นโครงกระดูกเช่นไฟล์ MD5 คุณสามารถแนบจุดสุดยอดแต่ละจุดเข้ากับข้อต่อได้ตามต้องการ คุณจะสนับสนุนสิ่งนี้ได้อย่างมีประสิทธิภาพในขณะที่ทำการแก้ไขใน GLSL อย่างไร หรือเอ็นจิ้นทำแอนิเมชั่นของพวกเขาบน CPU หรือไม่ หรือเครื่องยนต์ตั้งค่าขีด จำกัด โดยพลการในข้อต่อสูงสุดต่อจุดสุดยอดและเรียก nop คูณสำหรับข้อต่อเหล่านั้นที่ไม่ได้ใช้จำนวนสูงสุด? มีเกมที่ใช้แอนิเมชั่นโครงกระดูกในการตั้งค่าคล้าย RTS หรือไม่ดังนั้นจึงพิสูจน์ได้ว่าในการ์ดกราฟิกในตัวที่ฉันไม่มีอะไรต้องกังวลเกี่ยวกับเส้นทางของกระดูก?

4
มีไดเรกทอรี Shaders หรือไม่ [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา มีแบบฝึกหัดมากมายที่จะเรียนรู้ GLSL, Cg, HLSL ... ด้วยตัวอย่างคลาสสิกเช่นการทำแผนที่แบบ bump, toon-shading ... แต่มีสารบบ shaders หรือไม่ เว็บไซต์ที่ฉันสามารถแชร์เฉดสีของฉัน ค้นหา shader ตามชื่อคำอธิบายและการใช้งาน
11 web  shaders 

2
Shader ที่“ ตัด” รูผ่านรูปทรงเรขาคณิตทั้งหมด
ฉันจะสร้าง shader ที่ "ตัด" ผ่านรูปทรงเรขาคณิตทั้งหมดโดยแสดงเฉพาะพื้นหลังการล้างใน Unity ได้อย่างไร ตัวอย่าง: นั่นเป็นปริซึมในห้องกล่องสีขาวขนาดใหญ่ พื้นผิวของปริซึมเป็นเพียงการแสดงท้องฟ้าของฉาก (ท้องฟ้าเต็มไปด้วยดวงดาว) ฉันใช้กล้องหลายตัวซึ่งไม่มีประสิทธิภาพเลย ... ต้องมีวิธีการที่มีเพียงเฉดสีเท่านั้น ฉันจะทำสิ่งนี้ได้อย่างไร

1
ฉันจะสร้างหมอกที่มีปริมาตรสูงได้อย่างไร
เมื่อเร็ว ๆ นี้ฉันกำลังมองหาเทคนิคในการสร้างหมอกควันตามปริมาตรในระดับตำแหน่ง Y ของโลกของเกม แต่สิ่งที่ฉันได้พบคือหมอกที่เกิดจากการใช้ระบบอนุภาคหรือหมอกของเครื่องยนต์ในตัวที่ไม่เหมาะกับสิ่งที่ฉันกำลังมองหา ในกรณีของฉันฉันต้องการหมอกที่มีประสิทธิภาพและหนาแน่น มันควรจะเป็นเกมทั่วโลก แต่เห็นได้ชัดว่าด้วยเหตุผลด้านประสิทธิภาพมันสามารถแสดงผลเป็นส่วนหนึ่งของกล้องหรือ shader และดูเหมือนว่ามันจะเคลื่อนไหวแม้ว่ามันจะเป็นเพียงภาพลวงตา ฉันสามารถตั้งค่าระบบอนุภาคถ้าเป็นตัวเลือกที่ดีที่สุดแนบกับกล้องและทำให้มันเคลื่อนที่ ดังนั้นคำถามหลักยังคงอยู่ - ฉันจะใช้หมอกแบบปริมาตรที่หนาแน่นและมีประสิทธิภาพได้อย่างไร เป็นเครื่องมือเฉพาะที่ฉันใช้มันเป็นเอกภาพ ตัวอย่างสิ่งที่ฉันหมายถึงนี่คือลิงค์ไปยังเกมที่มีเอฟเฟกต์ที่ฉันกำลังมองหา: Astromike
10 unity  shaders  rendering  fog 

2
Ray Marching นำไปใช้กับโลกที่มีชีวิตชีวาได้อย่างไร
ฉันคิดว่าฉันเข้าใจพื้นฐานของสนามเรย์มาร์ช คุณจำลองฉากของคุณด้วยฟิลด์ระยะไกล (เช่น: http://iquilezles.org/www/articles/distfunctions/distfunctions.htm ) จากนั้นสำหรับแต่ละพิกเซลที่คุณฉายรังสีให้เริ่มจากจุดเริ่มต้นของรังสี ค้นหาระยะทางไปยังวัตถุที่ใกล้ที่สุดที่จุดนั้นและเพิ่มจุดตามระยะทางที่ใกล้ที่สุดจนกว่าคุณจะตีอะไร ฉันจัดการที่จะทำ renderer ง่ายและนั่นคือที่ที่คำอธิบายส่วนใหญ่ของเทคนิคหยุด นี่ทำให้ฉันมีคำถามบางอย่างเกี่ยวกับวิธีการใช้ SDF Ray Marching ในสถานการณ์จริง: คำถามที่ 1: ในเกมจริงฉากมักจะซับซ้อนและโหลดบน CPU โดยมีวัตถุแบบไดนามิกมากมาย ฉันเข้าใจการบดเคี้ยวแบบพื้นฐาน (เช่น octrees) และด้วยการเรนเดอร์รูปหลายเหลี่ยมฉันจะสร้างรายการ (บน CPU) ของรายการในมุมมอง frustrum เพื่อเรนเดอร์ ดังนั้นจินตนาการว่าฉันมีฉากที่ซับซ้อนมากซึ่งมีตัวละครและวัตถุแบบไดนามิกเคลื่อนไปมาบนหน้าจอควบคุมโดยซีพียู ฉันจะสตรีมวัตถุที่ฉันต้องการให้แสดงกับ GPU ในแต่ละเฟรมได้อย่างไร ทุกตัวอย่างมีฉากฮาร์ดโค้ดใน GLSL บางคนสามารถแบ่งปันตัวอย่างของระดับที่ถูกส่งไปยัง shader แบบไดนามิกได้หรือไม่? คำถามที่ 2: วัตถุมีหลายสีได้อย่างไร ฟังก์ชั่นระยะทางเพียงแค่คืนค่าระยะทาง แต่การใช้งานทั่วไปส่งสีกลับมาได้อย่างไร (เช่นคุณกดทรงกลมสีแดงและไม่ใช่บลูคิวบ์) หากนี่เป็นการใช้งานซีพียูฉันสามารถเรียกใช้ฟังก์ชันสากลภายในฟังก์ชันระยะทางเมื่อมีการตีเพื่อยุติเรย์มาร์เชอร์ เนื้อ / สี แต่คุณจะส่งคืนสีหรือพื้นผิวของรายการใน GLSL …

2
เนื่องจาก Table.drawDebug เลิกใช้แล้วใน libGDX ฉันควรใช้อะไรแทน
ฉันกำลังติดตามหนังสือ "Learning LibGDX Game Development" เพื่อสร้างเกมอย่างง่าย ฉันอยู่ในส่วนการสร้างเมนูที่เราสร้างสเตจและแสดงผลด้วยเส้นขอบการดีบัก หนังสือเล่มนี้บอกว่าจะใช้Table.drawDebug(stage)แต่วิธีการแบบคงที่นี้ดูเหมือนว่าจะถูกลบออกจากTableชั้นเรียนกรอบทั้งหมด ฉันกำลังนำเข้าcom.badlogic.gdx.scenes.scene2d.ui.Table; ด้านล่างคือรหัสของฉัน: @Override public void render(float deltaTime) { Gdx.gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); if (debugEnabled) { debugRebuildStage -= deltaTime; if (debugRebuildStage <= 0) { debugRebuildStage = DEBUG_REBUILD_INTERVAL; rebuildStage(); } } stage.act(deltaTime); stage.draw(); Table.drawDebug(stage); } บรรทัดสุดท้ายTable.drawDebug(stage);มีข้อผิดพลาดในการรวบรวม"The method drawDebug(ShapeRenderer) in the type Table is …

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

3
Multitexturing เป็นเพียงแค่“ ใช้มากกว่าหนึ่งพื้นผิว” หรือไม่?
นี่อาจดูงี่เง่า แต่มันทำให้ฉันรำคาญ จากสิ่งที่ฉันเข้าใจการใช้multitexturingนั้นใช้มากกว่า 1 texture ต่อ shader เท่านั้น ดังนั้นแทนที่จะสร้าง 1 พื้นผิวฉันสร้าง 2 อย่างขึ้นไปซึ่งก็คือ ... ค่อนข้างชัดเจน! ทำไมมีคำพิเศษสำหรับสิ่งนั้น มีมากกว่านั้นเพียงแค่ "ใช้มากกว่า 1 พื้นผิว"? ฉันพลาดอะไรไปรึเปล่า?

2
เลนส์แก้วหักเหแสง
ฉันมีพื้นหกเหลี่ยมไม่สิ้นสุดสร้างโดย tessellating จุดตารางในคู่ shader tessellation: โปรดทราบว่านี่เป็นโครงลวดแบบเรียบ - "เงา" เป็นเคล็ดลับแสง: ตอนนี้ฉันต้องการทำให้แก้วนี้ดูหนาและหักเหได้ แต่ไม่แน่ใจว่าจะดำเนินการต่อไปได้อย่างไร สิ่งแรกที่อยู่ในใจคือ ตั้งค่าชุดที่ประกอบด้วย "ความหนา" ที่ร้องขอของบล็อก เมื่อคำนวณแสงให้ใช้กฎของสเนลล์เพื่อคำนวณความยาวเส้นทางแสงที่รังสีจะผ่านบล็อกเลขฐานสิบหกหากจริง ๆ แล้วมันมีความหนาเท่ากับชุด "ความหนา" กล่าวและรวมอัลฟากับความยาวนั้น ที่จะให้ความโปร่งใส แต่ไม่ได้จัดการกับสิ่งต่าง ๆ เช่นการสะท้อนภายใน / TIR ฯลฯ ฉันยังไม่ได้ลองเลยดังนั้นฉันจึงไม่แน่ใจว่าผลลัพธ์ภาพจะเป็นอย่างไร ในที่สุดสำหรับระดับนี้ฉันพยายามทำให้แก้วนั้นมีลักษณะเป็นพื้นหกเหลี่ยมที่ใช้ใน Tron: Legacy ระหว่างการต่อสู้แผ่นดิสก์ ( ดูภาพนี้เป็นตัวอย่าง ) ข้อเสนอแนะ?
10 shaders  glsl 

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

1
ไปป์ไลน์การแสดงผลของเครื่องยนต์
ฉันพยายามสร้างเอ็นจิ้นเกม 2D โดยใช้ OpenGL ES 2.0 (iOS สำหรับตอนนี้) ฉันได้เขียนเลเยอร์แอปพลิเคชันใน Objective C และแยกตัวเองบรรจุ RendererGLES20 ใน C ++ ไม่มีการโทรเฉพาะ GL นอกสายแสดงภาพ มันทำงานได้อย่างสมบูรณ์ แต่ฉันมีปัญหาการออกแบบเมื่อใช้ shaders Shader แต่ละตัวมีคุณสมบัติและเครื่องแบบที่เป็นเอกลักษณ์ของตัวเองซึ่งจำเป็นต้องตั้งค่าก่อนการเรียกสายหลัก (glDrawArrays ในกรณีนี้) ตัวอย่างเช่นในการวาดรูปทรงเรขาคณิตฉันจะทำ: void RendererGLES20::render(Model * model) { // Set a bunch of uniforms glUniformMatrix4fv(.......); // Enable specific attributes, can be many glEnableVertexAttribArray(......); // Set a …

2
พื้นผิว Projective และแสงรอการตัดบัญชี
ในคำถามก่อนหน้านี้ฉันถามว่าเป็นไปได้ไหมที่จะทำพื้นผิวแบบ Projective ด้วยแสงที่เลื่อนออกไป ตอนนี้ (มากกว่าครึ่งปีต่อมา) ฉันมีปัญหากับการใช้งานสิ่งเดียวกัน ฉันพยายามที่จะใช้เทคนิคนี้ในการส่งผ่านแสง (โปรเจ็กเตอร์ของฉันไม่มีผลต่ออัลเบโด้) ฉันมีโปรเจ็กเตอร์นี้ดูเมทริกซ์การฉาย: Matrix projection = Matrix.CreateOrthographicOffCenter(-halfWidth * Scale, halfWidth * Scale, -halfHeight * Scale, halfHeight * Scale, 1, 100000); Matrix view = Matrix.CreateLookAt(Position, Target, Vector3.Up); สถานที่halfWidthและhalfHeightเป็นครึ่งหนึ่งของความกว้างและความสูงของพื้นผิวPositionคือตำแหน่งของโปรเจ็กเตอร์และtargetเป็นเป้าหมายของโปรเจ็กเตอร์ ดูเหมือนว่าจะโอเค ฉันกำลังวาดรูปสี่เหลี่ยมเต็มหน้าจอด้วย shader นี้: float4x4 InvViewProjection; texture2D DepthTexture; texture2D NormalTexture; texture2D ProjectorTexture; float4x4 ProjectorViewProjection; sampler2D depthSampler = …

1
ส่วนประกอบของ gl_TexCoord [0] หมายถึงอะไร?
อะไรคือความแตกต่างระหว่างgl_TexCoord[0].s, gl_TexCoord[0].t gl_TexCoord[0].pและgl_TexCoord[0].x, gl_TexCoord[0].y gl_TexCoord[0].z? ฉันเข้าใจว่าgl_TexCoord[0].x, gl_TexCoord[0].y gl_TexCoord[0].zพิกัดพิกเซลเป็นอย่างไร แต่gl_TexCoord[0].s, gl_TexCoord[0].t gl_TexCoord[0].pฉันต้องใช้มันหมายความว่าอะไรและที่ไหน?

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