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

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

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

2
DirectX11 ฉันจะจัดการและอัปเดตบัฟเฟอร์คงที่หลายส่วนได้อย่างไร
เอาล่ะฉันมีเวลายากที่จะเข้าใจว่าบัฟเฟอร์คงที่จะถูกผูกไว้กับขั้นตอนท่อและปรับปรุง ฉันเข้าใจว่า DirectX11 สามารถมีบัฟเฟอร์คงที่ได้ถึง 15 shader ต่อสเตจและแต่ละบัฟเฟอร์สามารถเก็บค่าคงที่ได้มากถึง 4096 ค่า อย่างไรก็ตามฉันไม่เข้าใจว่า ID3D11Buffer COM ที่ใช้ในการโต้ตอบกับบัฟเฟอร์คงที่เป็นเพียงกลไก (หรือที่จับ) ที่ใช้สำหรับเติมช่องบัฟเฟอร์เหล่านี้หรือถ้าวัตถุอ้างอิงตัวอย่างของข้อมูลบัฟเฟอร์ที่ถูกผลักไปมา ระหว่าง GPU และ CPU ฉันคิดว่าความสับสนของฉันในหัวข้อเป็นสาเหตุของปัญหาที่ฉันใช้บัฟเฟอร์คงที่สองแบบ นี่คือตัวอย่างโค้ด shader cbuffer PerFrame : register(b0) { float4x4 view; }; cbuffer PerObject : register(b1) { float4x4 scale; float4x4 rotation; float4x4 translation; }; วิธีการจัดระเบียบรหัสของฉันกล้องจะจัดการอัปเดตข้อมูลที่เกี่ยวข้องต่อเฟรมและ GameObjects จะอัปเดตข้อมูลต่อวัตถุของตัวเอง ทั้งสองคลาสมี ID3D11Buffer ของตัวเองที่ใช้ในการทำสิ่งนี้ (ใช้สถาปัตยกรรมฮับดังนั้นคลาส GameObject …

4
มัลติเพลเยอร์ทำงานใน OpenGL อย่างไร
ใน Direct3D นั้น shader แบบหลายตัวนั้นใช้งานง่ายเพราะคุณสามารถกำหนด pass ภายในโปรแกรมได้อย่างแท้จริง ใน OpenGL ดูเหมือนว่าจะซับซ้อนกว่านี้เล็กน้อยเนื่องจากเป็นไปได้ที่จะให้โปรแกรม shader เป็นจุดสุดยอดรูปทรงเรขาคณิตและส่วนที่แตกต่างกันตามที่คุณต้องการ ตัวอย่างที่เป็นที่นิยมของเครื่องมัลติพลาสเดอร์คือเครื่องจิ้มอเนกประสงค์ การผ่านหนึ่งครั้งจะมีเอฟเฟ็กต์การแรเงาที่เกิดขึ้นจริงและอีกอันจะสร้างโครงร่าง ถ้าฉันมีสองจุดยอด "cel.vert" และ "outline.vert" และสองชิ้นส่วน "cel.frag" และ "outline.frag" (คล้ายกับที่คุณทำใน HLSL) ฉันจะทำได้อย่างไร รวมเข้าด้วยกันเพื่อสร้าง shader toon แบบเต็ม? ฉันไม่ต้องการให้คุณพูดว่าสามารถใช้รูปทรงเรขาคณิตสำหรับเรื่องนี้ได้เพราะฉันแค่อยากรู้ทฤษฎีที่อยู่เบื้องหลัง GLSL หลายตัว;)
13 opengl  shaders  glsl 

1
Shader เพื่อดูเงาผ่านสไปรต์อัลฟ่า
ฉันต้องการที่จะบรรลุในเอกภาพเห็นผ่านผลเหมือนในตัวอย่างเหล่านี้: ในสถานการณ์เฉพาะของฉันมีข้อกำหนดสองสามข้อ: สไปรท์กำลังใช้การผสมแอลฟาและสไปรท์มีพื้นที่โปร่งใส มีองค์ประกอบ 2 ชนิดที่ปิดอักขระ หนึ่งควรสร้างเอฟเฟกต์ภาพเงาและอีกภาพหนึ่งควรทำงานเหมือนปกติ สำหรับการปิดองค์ประกอบที่สร้างภาพเงาฉันเปิดใช้งาน ZWrite และปิดการใช้งานองค์ประกอบที่ไม่มี สำหรับตัวละครฉันพยายามตั้งค่าคิวของ shader เป็น transparent + 1 และเพิ่มรหัสผ่านนี้: Pass { ZTest Greater Lighting Off Color [_Color] } และผลงานบางส่วน: ภาพเงาถูกดึงดูดไปทั่วตัวละครแม้กระทั่งส่วนที่โปร่งใส ส่วนที่โปร่งใสไม่ควรสร้างภาพเงา ภาพเงาถูกสร้างขึ้นเมื่อตัวละครอยู่ด้านหลังเทพดาแม้ว่าส่วนหนึ่งของผีสางนั้นจะโปร่งใส การอยู่ด้านหลังของสไปรต์ไม่ควรสร้างภาพเงา ตัวละครจะปรากฏต่อหน้าองค์ประกอบที่เหลือแม้ว่ามันจะอยู่ข้างหลังก็ตาม ฉันเดาว่าเป็นเพราะการตั้งค่าคิวเป็น Transparent + 1 แต่ถ้าฉันปล่อยให้มันเป็นแบบโปร่งใสตัวละครจะถูกวาดตามลำดับที่ถูกต้อง แต่ภาพเงานั้นไม่เคยเห็น ฉันพยายามปฏิบัติตามคำแนะนำเหล่านี้ที่มีคนให้ แต่ฉันไม่สามารถใช้งานได้: 1) ออกบัตรผ่านที่แสดงผลสไปรต์ตามที่เป็นอยู่ 2) เพิ่มรหัสผ่านที่เขียนไปยังบัฟเฟอร์ z แต่มี shader ที่ใช้คลิป () เพื่อทิ้งพิกเซลตามอัลฟา …

2
หมึกหยดหมึก Rorschach (aka ภาพทดสอบจิตวิทยา) shader
(ที่มา: bonnefil.com ) ฉันต้องการรูปแบบที่สวยงามนี้จะอยู่ในเกมของฉัน จนถึงตอนนี้ฉันได้คิดออก ... วาดด้านหนึ่งจากนั้นแสดงสองครั้งไปทางซ้ายและขวา ฉันจะแสดงรูปแบบนี้ในด้านหนึ่งได้อย่างไร อืมม ... ฉันต้องการความช่วยเหลือ. ฉันต้องการข้อมูลเชิงลึกเกี่ยวกับการเขียน Shader สำหรับเรื่องนี้ หากคุณคิดว่าไม่เหมาะกับงาน Shader ให้ฉันรู้ด้วยหวังว่าจะมีทางเลือกอื่น! อย่างไรก็ตามฉันไม่เห็นวิธีที่เป็นไปได้ที่จะบรรลุเป้าหมายนี้หากไม่มี GPU (ถ้าคุณไม่แนะนำให้เก็บรูปภาพที่เตรียมไว้จากรูป rorscach)

4
วัสดุแก้วเพื่อความสามัคคี 5
ใครรู้วิธีทำวัสดุแก้วใน Unity 5 ฉันสามารถทำพื้นผิวโลหะและรูปภาพได้ แต่ไม่แน่ใจว่าจะสร้างวัสดุแก้วได้อย่างไร การค้นหาใน Google จะไม่ทำให้ฉันได้รับความเป็นเอกภาพ 5 ดังนั้นฉันจึงต้องทำค่อนข้างง่าย มันมีไว้สำหรับประตูห้องอาบน้ำและกระจกเครื่องบินแบบนี้:

2
ฉันจะสร้าง Bloom Shader ที่มีประสิทธิภาพด้วย GLSL ได้อย่างไร
ฉันค้นหาสุทธิเพื่อหาแหล่งข้อมูลที่เกี่ยวข้องกับการแสดงผลบลูมโดยใช้ GLSL แต่ไม่พบอะไรเลย แม้ว่าบทช่วยสอนที่เว็บไซต์ของ Philip Rideoutนั้นดี แต่มันก็ทำงานได้ไม่ดีกับ Nvidia GPU ของฉัน ทุกคนสามารถแนะนำฉันเกี่ยวกับวิธีที่ฉันควรแก้ไขปัญหานี้และสร้างการใช้งานเอฟเฟกต์บานที่มีประสิทธิภาพอย่างเป็นธรรมหรือไม่?
12 shaders  glsl  bloom 

3
HLSL โปร่งแสงพลาสติก Shader
ฉันพยายามที่จะสร้าง shader เพื่อทำซ้ำวัตถุพลาสติกสีขาวที่มีแสงสีอยู่ภายใน ไม่ว่าจะด้วย shader ที่จะโปร่งแสงและถ้าฉันใส่แสงเข้าไปในวัตถุแสงจะแสดงผ่านหรือโดยการมี shader ที่ทำให้เอฟเฟกต์ของแสงที่อยู่ภายใน เอฟเฟกต์ที่กำลังจะเป็นเหมือนแสงที่ส่องผ่านโคมไฟคล้ายกับภาพเหล่านี้: เป็นการดีที่ฉันจะสามารถควบคุมความแข็งแรงและสีของแสงเพื่อให้ชีพจรและหมุนผ่านสี fluro สดใสดีบางอย่าง แม้ว่าฉันจะไม่แน่ใจว่าจะเริ่ม! คำถามของฉันคือใครรู้เทคนิคที่ฉันควรวิจัยเพื่อให้สามารถผลิต shader ดังกล่าวหรือมีตัวอย่างของ shader เดียวกัน / คล้ายกันที่ฉันสามารถใช้เป็นจุดเริ่มต้น? หรือแม้ว่าคุณต้องการให้ shader ที่อาจทำงานได้
12 graphics  shaders  hlsl 

3
ฉันจะทำให้หยดฝนธรรมชาติบนหน้าจอได้อย่างไร
ฉันกำลังพยายามทำให้เอฟเฟกต์ฝนตกด้วยmetaballsและ trail บนหน้าจอฉันพบเบาะแสใน shadertoy แต่ฉันไม่เข้าใจวิธีการใช้งาน: https://www.shadertoy.com/view/ltffzl น่าเสียดายที่มันมีการคำนวณทางคณิตศาสตร์มากมายและฉันไม่สามารถใช้งานแบบเอกภาพได้เพราะมันสร้างความล่าช้าแน่นอนว่าฉันควรใช้พื้นผิว แต่ฉันจะมีเอฟเฟกต์เส้นทางได้อย่างไร! ความคิดของฉันคือการใช้ texture และ trail renderer สำหรับการดร็อป แต่ฉันจะมีเอฟเฟกต์เมทัลลิลได้อย่างไร ปรับปรุง ฉันสามารถใช้ Metaballs ได้โดยบทความนี้ https://github.com/smkplus/RainFX/tree/master แต่ฉันไม่ได้คิดเกี่ยวกับเส้นทาง

2
ทำไมระยะห่างจากวัตถุถึงไม่เกี่ยวข้องกับดวงตาในแบบจำลองการส่องสว่าง?
ตัวอย่างเช่นในรุ่นพงษ์และรุ่นBlinnความเข้มของแสงจะไม่เปลี่ยนแปลงขึ้นอยู่กับว่ากล้องอยู่ไกลแค่ไหน ทำไมถึงเป็นอย่างนั้น?

1
วิธีการใช้ ripples ชนิดนี้ด้วยตัวแยกส่วน GLSL?
ดังนั้นฉันจึงได้นำส่วนการสะท้อนกลับมาใช้แล้ว: uniform sampler2D texture; uniform vec2 resolution; uniform vec3 overlayColor; void main() { vec2 uv = gl_FragCoord.xy / resolution.xy; if (uv.y > 0.3)// is air - no reflection or effect { gl_FragColor = texture2D(texture, vec2(uv.x, uv.y)); } else { // Compute the mirror effect. vec4 color = texture2D(texture, vec2(uv.x, 0.6 …

1
ในระบบวัสดุที่ใช้กราฟฉันจะสนับสนุนประเภทอินพุตและเอาต์พุตที่หลากหลายได้อย่างไร
ฉันพยายามที่จะตัดหัวของฉันรอบระบบวิธีวัสดุเช่นนี้ , นี้จะดำเนินการ ระบบที่มีลักษณะคล้ายกราฟที่ทรงพลังและเป็นมิตรต่อผู้ใช้เหล่านี้ดูเหมือนจะเป็นวิธีที่ใช้กันทั่วไปในการอนุญาตให้โปรแกรมเมอร์และโปรแกรมเมอร์ที่ไม่ใช่โปรแกรมเมอร์สร้างความแตกต่างอย่างรวดเร็ว อย่างไรก็ตามจากประสบการณ์ที่ จำกัด ของฉันกับการเขียนโปรแกรมกราฟิกฉันไม่แน่ใจว่าพวกเขาทำงานอย่างไร พื้นหลัง: ดังนั้นเมื่อฉันได้ตั้งโปรแกรมระบบการแสดงผล OpenGL อย่างง่ายมาก่อนฉันมักจะสร้างคลาสวัสดุที่โหลดรวบรวมและเชื่อมโยง shaders จากไฟล์ GLSL แบบคงที่ที่ฉันสร้างขึ้นด้วยตนเอง ฉันมักจะสร้างคลาสนี้เป็น wrapper ง่าย ๆ สำหรับการเข้าถึงตัวแปรชุด GLSL เป็นตัวอย่างง่ายๆลองนึกภาพว่าฉันมี Shader Vertex พื้นฐานและ Shader Fragment พื้นฐานพร้อม Texture2D แบบพิเศษสำหรับการส่งผ่านพื้นผิว คลาสวัสดุของฉันเพียงแค่โหลดและรวบรวมสองเฉดสีเหล่านั้นลงในวัสดุและจากจุดนั้นมันจะเปิดเผยอินเทอร์เฟซที่เรียบง่ายสำหรับการอ่าน / เขียนชุด Texture2D ของ shader นั้น เพื่อให้ระบบนี้มีความยืดหยุ่นเพิ่มขึ้นเล็กน้อยฉันมักจะเขียนด้วยวิธีที่อนุญาตให้ฉันพยายามส่งชุดชื่อ / ประเภทใด ๆ[เช่น: SetUniform_Vec4 ("AmbientColor", colorVec4); ซึ่งจะตั้งค่าเครื่องแบบ AmbientColor เพื่อเวกเตอร์ 4d โดยเฉพาะเรียกว่า "colorVec4" …

2
ฉันจะใช้ตัวกรอง xBR หรือ hqx ใน XNA ได้อย่างไร
ฉันต้องการทำให้สัดส่วนของเกมของฉันสูงขึ้นด้วยหนึ่งในตัวกรอง hqx (hq2x, hq3x หรือ hq4x) หรือตัวกรอง xBRใน shader ฉันจะทำสิ่งนี้ใน XNA 4.0 และ SM3 ได้อย่างไร หมายเหตุด้านข้าง: คำถามนี้ได้รับการแก้ไขอย่างหนักเพื่อเป็นสิ่งที่เป็นอยู่ในปัจจุบัน
11 xna  2d  shaders  pixel  scale 

1
ฉันจะกำหนดความเร็วของจุดสุดยอดและชิ้นส่วนแยกของฉันได้อย่างไร
ฉันต้องการทราบว่าฉันสามารถตรวจสอบเพื่อดูว่าจุดสุดยอดของฉันหรือชิ้นส่วน Shader ของฉันเป็นคอขวดในท่อแสดงผลของฉัน ฉันได้อ่านเกี่ยวกับการใช้glQueryCounterกับGL_TIMESTAMPเป้าหมายเพื่อรับจุดตรวจสอบสัญญาณนาฬิการะหว่างคำสั่ง OpenGL แต่สิ่งเหล่านี้ไม่ได้แยกความแตกต่างระหว่างประเภทของเฉดสี ตัวอย่างเช่นหากหนึ่งเฟรมบน GPU ใช้เวลาในการเรนเดอร์ 8 มิลลิวินาทีฉันสามารถบอกได้หรือไม่ว่าตัวแบ่งยอดใช้เวลา 7 มิลลิวินาทีและแฟรกเมนต์ตัวแบ่งใช้ 1 มิลลิวินาที

1
Tessellation vs Geometry Shader
แก้ไขให้ถูกต้องหากฉันผิด แต่ทั้ง Geometry Shader และงาน Tessellation Shader นั้นเป็นการสร้างจุดยอดในกราฟิคท่อ สิ่งที่ฉันอยากรู้คือพวกเขาแตกต่างกันอย่างไรและเมื่อใดที่ฉันควรใช้อันอื่น

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