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

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

2
OpenGL ES 2.0: การตั้งค่าการฉาย 2D
บทความนี้อธิบายโดยทั่วไปวิธีการวาดกราฟิค OpenGL 2D ที่คมชัดโดยใช้ฟังก์ชั่นฟังก์ชั่นคงที่ http://basic4gl.wikispaces.com/2D+Drawing+in+OpenGL เนื่องจาก OpenGL ES 2.0 มีฟังก์ชั่น ES 1.x บางฟังก์ชั่นไม่สามารถใช้งานได้ (เช่น: glOrtho ()) การทำงานของพวกเขาจะต้องถูกแทนที่ใน Fragment / Vertex shaders คำถามของฉันคือวิธีการตั้งค่าการฉายภาพ 2D ต่อไปนี้ในฟังก์ชั่นไปป์ไลน์ที่ตั้งโปรแกรมได้? const XSize = 640, YSize = 480 glMatrixMode (GL_PROJECTION) glLoadIdentity (); glOrtho (0, XSize, YSize, 0, 0, 1) glMatrixMode (GL_MODELVIEW) วิธีการกำหนดค่า Fragment และ Vertex shaders เพื่อทดแทนฟังก์ชั่นการตั้งค่าการฉาย …

3
ฉันจะควบคุมการคำนวณใดที่ทำบน CPU และที่จะทำบน GPU ได้อย่างไร
ความเข้าใจปัจจุบันของฉันคือสิ่งที่ทำในไฟล์ shader ทำบน GPU และสิ่งที่ทำในโค้ดของฉัน (Java ในกรณีของฉัน) ทำบนซีพียู นี่เป็นคำอธิบายที่ถูกต้องหรือไม่?
14 shaders  gpu 

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

2
บัฟเฟอร์เวอร์เท็กซ์ขนาดใหญ่เทียบกับการดึงสายหลายครั้ง
ฉันเพิ่งเริ่มใช้งาน OpenGL และฉันพยายามจะใช้มันเพื่อสร้างเกม 2D ในเกมนี้ฉันมีตารางหกเหลี่ยมที่ประกอบไปด้วยรูปหกเหลี่ยมสีที่แตกต่างกันมาก ในฐานะโปรแกรมเมอร์มือใหม่ OpenGL ฉันเห็นวิธีวาดตารางนี้สองวิธี: การใช้จุดสุดยอดบัฟเฟอร์กับข้อมูลสำหรับรูปหกเหลี่ยมเดียวจากนั้นใช้ค่าออฟเซ็ตสม่ำเสมอและวนซ้ำบน CPU เพื่อวาดโปรแกรมเดียวกันหลาย ๆ ครั้งจนกว่าฉันจะมีกริด การสร้างบัฟเฟอร์จุดสุดยอดที่มีการคำนวณล่วงหน้าขนาดใหญ่มากซึ่งดึงรูปหกเหลี่ยมทั้งหมดในการโทรครั้งเดียว วิธีใดมีประสิทธิภาพมากที่สุด มีวิธีที่ดีกว่าในการทำเช่นนี้?
14 opengl  shaders 

2
GLSL Shader - เปลี่ยน Hue / Saturation / Brightness
ฉันพยายามเปลี่ยนเฉดสีของภาพโดยใช้ตัวแยกส่วน GLSL ฉันต้องการบรรลุสิ่งที่คล้ายกับเลเยอร์ Hue / Saturation Adjustment ของ Photoshop ในภาพต่อไปนี้คุณสามารถเห็นสิ่งที่ฉันได้รับจนถึง ฉันต้องการเปลี่ยนสีของสี่เหลี่ยมสีเขียวเพื่อให้ดูเหมือนว่าสี่เหลี่ยมสีแดงด้านขวา แต่ด้วย shader นี้ฉันได้ครึ่งสี่เหลี่ยมสีชมพูครึ่งสีแดง (สี่เหลี่ยมตรงกลาง) สิ่งที่ฉันทำในตัวแบ่งส่วนคือการแปลงสีของพื้นผิวเป็น HSV จากนั้นฉันเพิ่มสี HSV ที่ฉันได้รับจากจุดยอดสุดยอดไปยังมันและฉันแปลงสีกลับเป็น RGB ผมทำอะไรผิดหรือเปล่า? ชิ้นส่วน shader: precision mediump float; varying vec2 vTextureCoord; varying vec3 vHSV; uniform sampler2D sTexture; vec3 convertRGBtoHSV(vec3 rgbColor) { float r = rgbColor[0]; float g = rgbColor[1]; float b …

1
แรเงาหรือแสงสว่างคืออะไร?
การแรเงาหรือแสงคืออะไร มันแตกต่างจากตูนแรเงาหรือเป็นแนวคิดเดียวกันหรือไม่ specularity ถูกคำนวณแตกต่างกันอย่างไรสำหรับการแรเงาบนทางลาดเทียบกับ blinn-phong หรือ lambert
14 shaders  lighting 

3
วิธีที่เร็วที่สุดในการเรนเดอร์ด้วย AA ความหนาต่างกันใน DirectX
ดังนั้นฉันจึงทำการพัฒนา DirectX บางอย่างโดยใช้ SharpDX ภายใต้. NET เพื่อให้แน่นอน (แต่โซลูชัน DirectX / C ++ API สามารถใช้ได้) ฉันกำลังมองหาวิธีที่เร็วที่สุดในการเรนเดอร์เส้นในการฉายฉากมุมฉาก (เช่นการจำลองการวาดเส้นสองมิติสำหรับแอปเชิงวิทยาศาสตร์) โดยใช้ DirectX สกรีนช็อตของแปลงต่าง ๆ ที่ฉันพยายามจะทำดังนี้ มันไม่ใช่เรื่องแปลกสำหรับการแปลงประเภทนี้มีเส้นที่มีหลายล้านส่วนของความหนาของตัวแปรที่มีหรือไม่มีการลดรอยหยักต่อบรรทัด (หรือเปิด / ปิด AA แบบเต็มหน้าจอ) ฉันจำเป็นต้องอัปเดตจุดยอดสำหรับสายบ่อยมาก (เช่น 20 ครั้ง / วินาที) และถ่ายให้ GPU มากที่สุดเท่าที่จะทำได้ จนถึงตอนนี้ฉันได้ลอง: การแสดงผลซอฟต์แวร์เช่น GDI + จริง ๆ แล้วประสิทธิภาพไม่ดี แต่เห็นได้ชัดว่าหนักบน CPU Direct2D API - ช้ากว่า GDI …
14 2d  directx  shaders 

5
หลีกเลี่ยงถ้างบใน DirectX 10 shaders หรือไม่
ฉันเคยได้ยินว่าถ้างบควรหลีกเลี่ยงใน shaders เพราะทั้งสองส่วนของงบจะดำเนินการและกว่าจะผิดพลาดจะลดลง (ซึ่งเป็นอันตรายต่อประสิทธิภาพการทำงาน) ยังคงเป็นปัญหาใน DirectX 10 หรือไม่ มีคนบอกฉันว่ามีเพียงสาขาที่ถูกต้องเท่านั้นที่จะถูกประหาร สำหรับภาพประกอบฉันมีรหัส: float y1 = 5; float y2 = 6; float b1 = 2; float b2 = 3; if(x>0.5){ x = 10 * y1 + b1; }else{ x = 10 * y2 + b2; } มีวิธีอื่นที่จะทำให้เร็วขึ้นหรือไม่? ถ้าเป็นเช่นนั้นได้อย่างไร กิ่งทั้งสองมีลักษณะคล้ายกันความแตกต่างเพียงอย่างเดียวคือค่าของ "ค่าคงที่" ( y1, y2, …

2
ทำไมต้นไม้จึงเปล่งประกายเป็นฉากหลัง?
ขณะนี้ฉันกำลังสร้างฉากป่าในที่มืดและต้นไม้ก็ส่องแสงอยู่ไกล แต่เมื่อฉันเข้าใกล้พวกเขาก็สบายดี ฉันให้เฉดสีตั้งไว้ที่ "Nature / Tree Soft Occlusion [bark / leaves]" แต่พวกมันยังคงแสดงผลแปลก ๆ อยู่ไกลออกไป แต่พวกเขาก็ใกล้ดี ฉันพยายามวางต้นไม้ในโฟลเดอร์ชื่อ "Ambient-Occlusion" อย่างที่กล่าวไว้ที่นี่แต่ไม่มีโชค ยังมีหมอกปิดอยู่ ขอบคุณล่วงหน้า. UPDATE เมื่อฉันดูต้นไม้โดยใช้กล้อง "เส้นทางการแสดงผล" พวกเขาปรากฏเป็นสีแดงในขณะที่ทุกอย่างเป็นสีเขียว อัพเดท 2 ฉันลองติดตั้งแพ็กเกจที่ฉันดาวน์โหลดมาใหม่ แต่ก็ยังไม่มีโชค อัพเดท 3 ฉันได้เพิ่มต้นไม้บางต้นด้วยตนเองและมันทำงานได้ดี แต่เมื่อเพิ่มด้วยการวาดภาพบนภูมิประเทศฉันพบปัญหา ปรับปรุงครั้งสุดท้าย ฉันพยายามสร้างเกมเพื่อดูว่าสิ่งนี้มีผลกับ. exe หรือไม่และไม่ได้ ดังนั้นฉันจะต้องเพิกเฉยเมื่อฉันทำการดีบั๊กเพราะมันทำงานได้ดีในการสร้าง ขอบคุณสำหรับความช่วยเหลือทั้งหมดดูเหมือนว่าจะเป็นข้อผิดพลาดพร้อมความสามัคคี รูปภาพของงานสร้าง:
14 unity  shaders  terrain  tree 

1
ฉันจะสร้างโครงร่าง shader เช่น“ Life is Strange” ได้อย่างไร?
ฉันต้องการทำให้ภาพร่างมีรูปร่างเหมือนชีวิตแปลก ๆ shader มีสองส่วน: 1. เส้นประกำกับ 2. โครงร่างที่มีเสียงดัง ฉันชอบที่จะรู้ว่าฉันจะทำให้ร่างมีเสียงดัง ดูโครงร่างของวัตถุ ก่อนอื่นฉันพยายามทำโครงร่างโดยการคัดลอกข้อมูลจุดยอดที่เข้ามาและปรับขนาดตามทิศทางปกติจากนั้น Cull Back.but แต่ฉันคิดว่ามันคล้ายกับเอฟเฟ็กต์ภาพเพราะบางครั้งร่างเคลื่อนที่ไปด้านในวัตถุ ต่อไปฉันจะขอบคุณถ้ามีคนช่วยฉันในการใช้ Shader นี้ :) สิ่งที่ฉันพยายาม ฉันใช้การตรวจจับขอบและทำให้เคลื่อนไหวได้ด้วยเครื่องปรับจุดสุดยอด แต่สิ่งนี้ไม่ดีเหมือน gifs ด้านบน
13 unity  shaders  hlsl 

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

3
ฉันจะทำซ้ำข้อ จำกัด สีของ NES ด้วยส่วนขยาย HLSL พิกเซลได้อย่างไร
ดังนั้นเนื่องจากโหมดสี 256 ค่าเสื่อมราคาและไม่รองรับภายใต้โหมด Direct3D อีกต่อไปฉันจึงมีแนวคิดที่จะใช้พิกเซล shader แทนเพื่อจำลองจานสี NES ของสีที่เป็นไปได้ทั้งหมดเพื่อให้วัตถุที่ซีดจางและสิ่งที่ไม่จางหายไปอย่างราบรื่น . (ฉันรู้ว่าวัตถุไม่สามารถจางหายไปจาก NES ได้จริง ๆ แต่ฉันมีวัตถุทั้งหมดที่เลือนเข้าและออกบนพื้นหลังสีดำทึบซึ่งเป็นไปได้ด้วย palette swapping นอกจากนี้หน้าจอจะจางหายไปเมื่อคุณหยุด ซึ่งฉันรู้ว่ายังเป็นไปได้ด้วยการเปลี่ยนพาเล็ตในเกม Mega Man สองสามเกม) ปัญหาคือฉันรู้อะไรเกี่ยวกับ HLSL shaders ฉันต้องทำอย่างไร?
13 shaders  pixel 

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

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

2
เครื่องตัดโลหะที่สมจริง
คุณจะสร้าง shader โลหะที่ดีได้อย่างไร สำหรับโลหะที่แตกต่างกันและพูดมากหรือน้อยก็กัดเซาะ / เป็นสนิมและอื่น ๆ ฉันรู้ว่าแตกต่างจากวัสดุธรรมดาคือโลหะควร 'สี' แสง specular แต่เมื่อฉันทำเช่นนั้นด้วยทองคำมันก็ดูเหมือน "สีเหลือง" ไม่ใช่โลหะเลย ความช่วยเหลือใด ๆ ชื่นชม!

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