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

ภาษาการเขียนโปรแกรมสำหรับ OpenGL shaders


4
ใช้หลายเฉดสี
ตอนนี้ฉันกำลังศึกษา opengl shaders แต่ฉันไม่สามารถหาอะไรบางอย่างได้: วิธีการใช้เฉดสีที่แตกต่างกับวัตถุเช่นกาน้ำชาที่แสดงโดยใช้ toon shader และอีกฉากหนึ่งในฉากเดียวกันโดยใช้พื้นผิวที่สะท้อนแสงมาก ฟังก์ชั่นเสียงดังเช่นในวิดีโอนี้ http://www.youtube.com/watch?v=1ogg4ZfdBqU อีกอันหนึ่งคือการใช้เบลเซอร์เชดในฉากหนึ่งและเบลอการเคลื่อนไหวเบลอภายหลัง ทำอย่างไรถึงจะได้เอฟเฟกต์เหล่านั้นเมื่อคุณสามารถมีเวอร์เท็กซ์ Shader หนึ่งอันและหนึ่งแฟรกเมนต์ Shader ได้? มีเคล็ดลับเช่นการใช้โปรแกรม shader มากกว่าหนึ่งรายการหรือไม่?
53 shaders  glsl 

1
Raymarch shaders ทำงานอย่างไร
ฉันได้ดู shaders พบที่นี่ shadertoy.com และส่วนใหญ่ที่เย็นมีเสียงและ raymarch เหมือนกัน ฉันไม่เข้าใจซอร์สโค้ด แต่ฉันต้องการจริงๆ เฉดสีเหล่านี้ทำงานอย่างไรและอัลกอริทึม raymarch ทำงานอย่างไร ฉันค้นหาทั่วและไม่พบสิ่งใดในหัวข้อ ขอบคุณ

1
คำหลักเข้า / ออกใน GLSL
ฉันไม่เข้าใจวิธีใช้in/ outคีย์เวิร์ดใน GLSL และ google ก็ไม่ได้ช่วยอะไรมากมาย พวกเขาทำอะไรกันแน่ ตัวอย่างเช่นฉันจะใช้มันได้อย่างไรถ้าฉันต้องการส่งชุดตัวแปรที่แตกต่างกันต่อยอดไปยังส่วนที่แตกต่างกัน? แท้จริงทุกบทช่วยสอนที่ฉันพบใช้varying/ attributeคำหลักและนั่นไม่เป็นประโยชน์
46 opengl  glsl 

2
วิธีที่จะทำให้น้ำแข็งที่เหมือนจริง?
ฉันกำลังพยายามเขียน ice shader ใน Unity ที่ดูดีและอย่างน้อยกึ่งจริง หากภาพต่อไปนี้ ( พบใน Google ) คือ CG สิ่งที่รวมไว้ในภาพนี้คืออะไร (ถ้ำเบื้องหน้า) ฉันอาจจะผิด แต่ดูเหมือนว่ามันจะมีรูปแบบแสงที่แตกต่างจากการกระจายแสงเริ่มต้น

1
ฉันจะลดนามแฝงในเอฟเฟกต์การเรืองแสงร่างของฉันได้อย่างไร
ฉันพยายามจำลองเอฟเฟกต์ร่างเรืองแสงในเกม Left 4 Dead เอฟเฟกต์ทำให้วัตถุมีการเรืองแสงแม้ว่าวัตถุจะถูกบัง นี่คือภาพหน้าจอของเอฟเฟกต์: ฉันสามารถทำซ้ำเอฟเฟกต์นี้ในโปรแกรมที่ใช้ OpenGL ได้บ้าง นี่คือสิ่งที่ฉันกำลังทำอยู่: สร้างพื้นผิวสีและความลึกที่มีขนาดครึ่งหนึ่งของขนาดหน้าจอสำหรับแสดงวัตถุที่เรืองแสง ล้างพื้นผิวสี / แสงที่เรืองแสง สีจะถูกล้างเป็นสีดำ สำหรับวัตถุที่ส่องแสงแต่ละอันให้ฉายไปบนพื้นผิวเรืองแสงเป็นสีทึบ ทำการเบลอเกาส์แยกไม่ออกบนพื้นผิวเรืองแสง ทำให้ฉากความละเอียดเต็มตามปกติ ผสมผสานพื้นผิวเรืองแสงเข้ากับฉากปกติอย่างแนบเนียน แต่ใช้พื้นผิวความลึกของแสงเรืองแสงเพื่อปกปิดวัตถุออกมาเหลือเพียงโครงร่างที่เบลอ นี่คือภาพหน้าจอของแนวทางของฉัน: นี่คือ shader ส่วนที่รวมพื้นผิวเรืองแสงกับฉาก: uniform sampler2D glowColorTex; uniform sampler2D glowDepthTex; uniform sampler2D sceneColorTex; void main() { vec2 uv = gl_TexCoord[0].st; vec4 color = texture2D( sceneColorTex, uv); float depth = texture2D( …
42 opengl  shaders  glsl  glow 

5
นักแสดงในเกมควรมีความรับผิดชอบในการวาดภาพตนเองหรือไม่?
ฉันยังใหม่ต่อการพัฒนาเกม แต่ไม่ได้เขียนโปรแกรม ฉัน (อีกครั้ง) เล่นกับเกมประเภท Pong โดยใช้canvasองค์ประกอบของ JavaScript ฉันสร้างPaddleวัตถุที่มีคุณสมบัติดังต่อไปนี้ ... width height x y colour ฉันยังมีPongวัตถุที่มีคุณสมบัติเช่น ... width height backgroundColour draw(). draw()วิธีการในปัจจุบันคือการรีเซ็ตcanvasและที่เป็นที่คำถามขึ้นมา ควรPaddleวัตถุมีdraw()วิธีการรับผิดชอบสำหรับการวาดภาพหรือควรdraw()ของPongวัตถุต้องรับผิดชอบสำหรับการวาดภาพของนักแสดง (ฉันคิดว่าเป็นคำที่ถูกต้องโปรดแก้ไขฉันหากฉันไม่ถูกต้อง) ฉันคิดว่ามันจะเป็น advantagous สำหรับPaddleการวาดตัวเองที่ผมยกตัวอย่างวัตถุสองและPlayer Enemyถ้ามันไม่ได้อยู่ในPongของdraw()ฉันจะต้องเขียนรหัสที่คล้ายกันสองครั้ง การปฏิบัติที่ดีที่สุดที่นี่คืออะไร? ขอบคุณ

1
GLSL: ฉันจะเหวี่ยงทุ่นไปยัง int ได้อย่างไร
ใน Shader GLSL ส่วนฉันพยายามที่จะโยนลงไปfloat intคอมไพเลอร์ทำให้เกิดข้อผิดพลาด: ERROR: 0:60: '=' : cannot convert from 'mediump float' to 'highp int' ฉันพยายามเพิ่มความแม่นยำของint: mediump float indexf = floor(2.0 * mixer); highp int index = indexf; แต่ไม่มีประโยชน์ ฉันจะคัดเลือกนักแสดงที่intเหมาะสมได้อย่างไร
40 opengl  glsl  opengl-es 

3
== ทำให้เกิดการแตกสาขาใน GLSL หรือไม่
พยายามคิดให้ชัดเจนว่าอะไรทำให้เกิดการแตกแขนงและอะไรที่ไม่ได้อยู่ใน GLSL ฉันทำสิ่งนี้มากมายใน shader ของฉัน: float(a==b) ฉันใช้มันเพื่อจำลองว่างบโดยไม่มีการแยกตามเงื่อนไข ... แต่มันมีประสิทธิภาพ? ฉันไม่มีคำสั่งใด ๆ ในโปรแกรมของฉันตอนนี้และฉันไม่มีลูป แก้ไข: เพื่อชี้แจงฉันทำสิ่งนี้ในรหัสของฉัน: float isTint = float((renderflags & GK_TINT) > uint(0)); // 1 if true, 0 if false float isNotTint = 1-isTint;//swaps with the other value float isDarken = float((renderflags & GK_DARKEN) > uint(0)); float isNotDarken = 1-isDarken; float …
27 glsl 

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

1
ทำไมรูปเรขาคณิตนี้ทำให้โปรแกรมของฉันช้าลงอย่างมาก?
ฉันมีโปรแกรม OpenGL และฉันแสดงภูมิประเทศ ฉันแทนที่จุดยอดในบัฟเฟอร์จุดสุดยอดและไม่ได้ระบายสีพวกมันใน shader ส่วนเลย ฉันกำลังเพิ่มรูปเรขาคณิตส่วนหนึ่งทีละส่วน ก่อนที่ฉันจะเพิ่ม geometry shader เมื่อฉันเพิ่งจะเขียนโปรแกรมส่วนขั้นตอนการแรเงาและจุดยอดของท่อฉันได้รับ framerates ประมาณ 30+ พอฉันไม่สามารถสังเกตเห็นความไม่แน่นอนใด ๆ หลังจากเพิ่มรูปเรขาคณิตฉันได้รับประมาณ 5 เฟรมต่อวินาที ทำไม? นี่คือความสมบูรณ์ของเรขาคณิต shader: #version 420 layout (triangles) in; layout (triangle_strip, max_vertices = 3) out; void main() { for (int i = 0; i < gl_in.length(); i++) { gl_Position = gl_in[i].gl_Position; EmitVertex(); …
27 opengl  glsl 

3
ทีมป้องกันการเขียนทับทำงานในไฟล์ต้นฉบับได้อย่างไร [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว มันเป็นไปได้สำหรับฉันที่มีหลายคนที่กำลังทำงานอยู่ในขณะเดียวกันเช่นเอ็นจิ้นเกม สมมติว่านักพัฒนาคนหนึ่งกำลังทำงานAudio.cppและนักพัฒนาที่สองก็กำลังทำงานอยู่Audio.cppสิ่งนี้จัดการโดยทั่วไปในทีมขนาดใหญ่เพื่อต่อสู้กับการเขียนทับได้อย่างไร (ในคำอื่น ๆ ที่จะหยุดสองนักพัฒนาจากการเปิดไฟล์จนกว่านักพัฒนาคนหนึ่งจะเสร็จสิ้น)
26 project-management  version-control  teamwork  java  2d  collision-detection  vector  collision-resolution  unity  directx  directx11  directx10  xna  ios  monogame  windows-phone-8  xamarin  design-patterns  oop  xna  collision-detection  collision-resolution  bounding-boxes  rotation  collision-detection  mathematics  javascript  algorithm  separating-axis-theorem  xna  2d  monogame  image  xna  directx  graphics  performance  opengl  2d  3d  c++  directx11  unity  c#  scale  c#  xna  collision-detection  collision-resolution  leaderboards  scoring  glsl  srgb  tilemap  three.js  tiled  unity  physics  xml  dialog-tree  xna  c#  .net  opengl  lwjgl  vbo  physics  graphics  procedural-generation  simulations  water  opengl  java  textures  lwjgl  frame-buffer  unity  unity  2d  collision-detection  collision-resolution  trigonometry  java  android  libgdx  xna  c#  frame-rate  c++  unreal-4  procedural-generation  java  graphics  lwjgl  slick  c++  software-engineering 

2
GLSL - gaussian เบลอหนึ่งรอบ
เป็นไปได้หรือไม่ที่จะใช้ส่วนของ shader เพื่อทำ gaussian blur One-pass? ฉันพบว่ามีการใช้งานเบลอสองทาง (เกาส์เซียนและเบลอเบลอ): http://callumhay.blogspot.com/2010/09/gaussian-blur-shader-glsl.html http://www.gamerendering.com/2008/10/11/gaussian-blur-filter-shader/ http://www.geeks3d.com/20100909/shader-library-gaussian-blur-post-processing-filter-in-glsl/ และอื่น ๆ ฉันคิดว่าจะใช้ gaussian blur เป็น convolution (อันที่จริงแล้วมันคือ convolution, ตัวอย่างข้างต้นเป็นเพียงการประมาณ): http://en.wikipedia.org/wiki/Gaussian_blur

1
Phong lighting - มีบางอย่างแปลก ๆ ที่มีแสง specular
ฉันนำแสงพงษ์มาใช้ ดูเหมือนว่าทุกอย่างจะทำงาน - พรูและทรงกลมก็สว่างตามที่คาดไว้ ฯลฯ แต่ฉันสังเกตเห็นบางสิ่งที่แปลกเกี่ยวกับแสงแบบส่องทางของแสงทิศทาง นี่คือภาพหน้าจอสองภาพ ครั้งแรก: ประการที่สอง: ในขณะที่คุณสามารถดูพื้นที่มากขึ้นมีแสงส่องสว่างเป็นพิเศษเมื่อกล้องอยู่ไกลจากวัตถุ นี่คือจุดสุดยอด shader: #version 330 core layout(location = 0) in vec3 vertexPos; layout(location = 1) in vec3 vertexNorm; layout(location = 2) in vec2 vertexUV; uniform mat4 MVP; uniform mat4 M; out vec2 fragmentUV; out vec3 fragmentNormal; out vec3 fragmentPos; void main() …

1
สูตรแสง GLSL (ลดทอนสีและความเข้ม)
ฉันกำลังติดตั้งไฟจุดในเครื่องมือ Voxel ของฉันและฉันพยายามอย่างหนักเพื่อให้ได้แสงที่ดีจาก 100% ใกล้กับแหล่งกำเนิดแสงถึง 0% ที่รัศมีแสง ฉันมี 5 ข้อโต้แย้งสำหรับฟังก์ชั่น: สีอ่อน (Vec3) ความเข้มของแสง (ระยะทางจากแสงจนถึงระยะทางที่จุดตกหล่น 100%) ระยะทางจากแสงถึงชิ้นส่วน มุมจากชิ้นส่วนปกติถึงแสง ตำแหน่งของแสง ทุกคนสามารถผลักฉันไปในทิศทางที่ถูกต้องเพื่อสร้างฟังก์ชั่นสำหรับการคำนวณสีชิ้นส่วนได้หรือไม่? ภาพหนึ่งในการทดลองของฉัน: แก้ไข (รหัสปัจจุบันที่ขอโดย Byte) โปรดทราบว่านี่เป็นเพียงรหัสการทดสอบจากฝั่งฉัน ฉันได้รับข้อมูลจากเว็บไซต์และมันใช้งานได้ แต่ไกลจากความสมบูรณ์แบบ : void main() { // Light color vec3 torchColor = vec3(1.0f, 1.0f, 1.0f); float lightAdd = 0.0f; for (int i=0; i<5; i++) { vec3 …
17 opengl  glsl  lwjgl  lighting  pixel 

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