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

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

1
ฉันจะรวมฟิสิกส์เข้ากับโลกที่สร้างขึ้นจากขั้นตอนทางเรขาคณิตได้อย่างไร
โดยพื้นฐานแล้วฉันต้องการที่จะลบความจำเป็นในการสร้างสัญญาณรบกวนจาก CPU ไปยัง GPU จากที่นั่นฉันต้องการสร้างภูมิประเทศสำหรับโลกสามมิติโดยใช้เสียงนี้เป็นความหนาแน่นในจุด voxel หลังจากนี้ฉันต้องการนำความหนาแน่นเหล่านั้นมารวมกันเป็นรูปหลายเหลี่ยม (สร้างจุดยอด) ที่แสดงถึงภูมิประเทศของโลก นี่เป็นเรื่องปกติและทุกอย่าง แต่ฉันยังต้องการที่จะทำให้โลกผิดปกติแบบไดนามิกในเวลาจริง เมื่อฉันมาถึงจุดนี้ฉันมีปัญหาในการพยายามนำจุดยอดกลับไปที่ CPU เพื่อทำสิ่งต่าง ๆ เช่นการตรวจจับการชนและการคำนวณเกมทั้งหมดที่ฉันต้องการมีส่วนร่วมกับ CPU ไม่ใช่ GPU ดังนั้นคำถามคือฉันจะรับเซตย่อยของจุดยอดกลับไปยัง CPU เพื่อจัดการกับการชนกันของสิ่งอื่นได้อย่างไร และคำถามอีกข้อหนึ่ง: มีวิธีง่าย ๆ ในการตั้งจุดยอดและสร้างดัชนีจากพวกเขาบน GPU หรือไม่? ฉันสับสนเช่นเดียวกับชนิดของเฉดสีที่ฉันควรใช้สำหรับสิ่งที่แตกต่างเหล่านี้ ฉันได้ยินคนที่ใช้ pixel shader เพื่อรวบรวมความหนาแน่นแล้วใช้ geometry shader สำหรับจัดการกับการสร้างภูมิประเทศจากจุดยอดแล้วก็รวมส่วนยอด shader เพื่อทำการเปลี่ยนรูปแบบไดนามิก ฉันใช้ C # 4.0, .NET 4.0 และ XNA Game Studio 4.0
10 c#  xna  shaders 

6
OpenGL ES 2.0: Repository ของ Quality Shaders [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันขอถามได้ไหมว่าจะแนะนำที่เก็บข้อมูลของจุดยอด OpenGL (OpenGL ES 2.0) ที่มีคุณภาพสูงและชิ้นส่วนที่แตกออกเป็นชิ้นๆ ได้ไหม ฉันกำลังมองหาพิกเซลเชดเดอร์ ligting (เช่นพงษ์ ) และ simmilar มันจะเป็นการดีที่ได้เห็นพวกเขามากขึ้นเพื่อให้สามารถเลือกระหว่างคุณภาพเทียบกับประสิทธิภาพของ shader

2
วิธีที่ดีที่สุดในการอัปเดตเครื่องแบบ shader คืออะไร?
อะไรคือวิธีที่ได้รับการยอมรับมากที่สุดในการรักษาเมทริกซ์ของ shader ให้ทันสมัยและทำไม? ตัวอย่างเช่นในตอนนี้ฉันมีShaderชั้นเรียนที่จัดเก็บด้ามจับไปยังโปรแกรมและชุดเครื่องแบบ GLSL ทุกครั้งที่ฉันขยับกล้องฉันจะต้องผ่านเมทริกซ์มุมมองใหม่ไปยัง shader จากนั้นวัตถุทุกอย่างในโลกที่แตกต่างกันฉันจะต้องผ่านเมทริกซ์โมเดลไปยัง shader สิ่งนี้ จำกัด ฉันอย่างรุนแรงเนื่องจากฉันไม่สามารถทำอะไรได้หากไม่สามารถเข้าถึงวัตถุ shader นั้นได้ ฉันคิดว่าจะสร้างShaderManagerชั้นเรียนเดี่ยวที่รับผิดชอบการถือร่มเงาที่ใช้งานอยู่ทั้งหมด จากนั้นฉันก็สามารถเข้าถึงสิ่งนั้นได้จากทุกที่และวัตถุในโลกไม่จำเป็นต้องรู้เกี่ยวกับสิ่งที่ shaders กำลังใช้งานอยู่เพียงเพื่อให้พวกเขาShaderManagerรู้เมทริกซ์ที่ต้องการ แต่ฉันไม่แน่ใจว่านี่เป็นวิธีที่ดีที่สุดและอาจมีปัญหาบางอย่าง จะเกิดขึ้นจากการใช้วิธีการนี้
10 opengl  shaders  glsl 

1
วิธีการเปลี่ยนสีของพิกเซลพื้นหลัง
ฉันกำลังเขียนเกมและแก้ไขแผนที่โดยใช้ Java และ jMonkeyEngine ในเครื่องมือแก้ไขแผนที่ฉันมีแปรงทำโดย wireframed sphere ปัญหาของฉันคือ: ฉันต้องการให้มันปรากฏทุกที่ดังนั้นฉันต้องการกลับสีของพิกเซล "หลัง" แปรงนี้ ฉันอยากจะทำมันด้วย fragment shader (GLSL) แต่ฉันไม่รู้วิธีรับสีของพิกเซลนี้

5
ทำไมฉันไม่สามารถใช้โอเปอเรเตอร์ '> =' กับ Vector3s ได้
ฉันพยายามที่จะได้รับรูปสี่เหลี่ยมผืนผ้าย้ายไปมาระหว่างสองตำแหน่งที่ผมพูดถึงและ_positionA ทั้งสองประเภท_positionB Vector3สี่เหลี่ยมผืนผ้าเคลื่อนไหวได้ดี อย่างไรก็ตามเมื่อมันมาถึง_positionBมันจะไม่เคลื่อนที่ในทิศทางตรงกันข้ามเหมือนอย่างที่ควร ฉันกลับไปที่โค้ดเพื่อดู ฉันมาถึงข้อสรุปว่าเป็นวัตถุย้ายที่ifงบในรหัสพลาดเฟรมซึ่งในตำแหน่ง rects _positionBเท่ากับ ฉันตัดสินใจที่จะปรับเปลี่ยนรหัสไปในทิศทางที่ตรงกันข้ามถ้าตำแหน่ง rects คือมากกว่าหรือเท่ากับ _positionBรหัสของฉันไม่ยาวเกินไปดังนั้นฉันจะแสดงด้านล่าง: using UnityEngine; using System.Collections; public class Rectangle : MonoBehaviour { private Vector3 _positionA = new Vector3(-0.97f, -4.28f); //Start position private Vector3 _positionB = new Vector3(11.87f, -4.28f); //End position private Transform _rect_tfm; private bool _atPosA = false, _atPosB = …
9 unity  c#  vector  mathematics  vector  matrix  unity  c#  transformation  java  3d  terrain-rendering  shading  ios  opengl-es  opengl  rendering  optimization  python  scripting  minecraft-modding  modding  pc  3d-meshes  mesh  culling  point-cloud  networking  interpolation  mathematics  game-design  ai  game-mechanics  animation  unreal-4  skeletal-animation  3dsmax  unity  c#  3d  opengl  c++  textures  unity  ide  cocos2d  cocos2d-x-js  unity  c#  mono  il2cpp  c++  game-loop  timer  linux  flash  actionscript-3  java  glsl  c++  vector  entity-component  c++  directx11  windows  visual-studio  libgdx  mouse  unity  c#  architecture  storage  unity  c#  rotation  coordinates  quaternion  vrpn  movement  vector  unreal-4  unity  shaders  unity  gui  text  bug  shooter  3d  animation  rendering  voxels  c++  mmo  multithreading  linux  textures  procedural-generation  terrain-rendering  multiplayer  mmo  game-state  java  android  libgdx  opengl  procedural-generation  unity  gui  3d  animation  tools  geometry-shader  mobile  advertisements  unity  c#  animation  scripting  unity  animation  unityscript  coroutines  unity  shaders  lighting  camera 

1
พื้นผิวเคลื่อนไหวสำหรับรุ่น; วิธีการเขียน Shader หรือไม่?
กำลังดู Rocket League และสังเกตว่ามีสติ๊กเกอร์เคลื่อนไหวและล้อ . ฉันต้องการใช้งานสิ่งที่คล้ายกับเอฟเฟกต์ในภาพด้านบน ฉันจะเขียน Unity Shader เพื่อสร้างเอฟเฟกต์ล้อได้อย่างไร ฉันไม่ค่อยรู้เรื่อง Shaders มากนัก แต่ฉันสามารถแก้ไข Unity Shader มาตรฐานเพื่อสร้างเอฟเฟกต์ภาพเคลื่อนไหวได้หรือไม่?

3
ฉันจะส่งเมทริกซ์หลายตัวไปยังจุดสุดยอดได้อย่างไร
ฉันกำลังฝึกอนิเมชั่นโดยใช้กระดูก / สกินนิ่ง ฉันกำลังพยายามส่งเมทริกซ์หนึ่งส่วนต่อจุดยอด ฉันนึกถึงสองแนวทางนี้ วิธีที่ 1 ฉันมีมือจับอันเดียวสำหรับเมทริกซ์กระดูกแต่ละอันเช่นนี้ u_Bone0 = GLES20.glGetUniformLocation(mProgram, "u_Bone[0]"); u_Bone1 = GLES20.glGetUniformLocation(mProgram, "u_Bone[1]"); และในการที่onDrawฉันส่งแต่ละคนไปยัง shader: GLES20.glUniformMatrix4fv(u_Bone0, 1, false, matrix0, 0); เห็นได้ชัดว่านี่ไม่ใช่วิธีที่ดีถ้าฉันมีเมทริกซ์จำนวนมาก ความคิดที่สองของฉันที่ฉันยังไม่ได้ลองเนื่องจากมีโค้ดจำนวนมากสำหรับการปรับโครงสร้าง วิธีที่ 2 คือการใช้glUniformMatrix4fvเพื่อส่งพวกเขาทั้งหมดในครั้งเดียว (สมมติว่าฉันมี 20 เมทริกซ์) GLES20.glUniformMatrix4fv(u_Bones, 20, false, matrices, 0); ที่เป็นmatrices float[16 * 20]แต่จากนั้นการปรับเปลี่ยนเมทริกซ์สำหรับแต่ละกระดูกจะค่อนข้างน่าเบื่อ ตัวอย่างเช่นถ้าฉันต้องการหาเมทริกซ์ที่ 3 ฉันต้องการบางสิ่งตามแนวของ float[] _3rd = Arrays.copy(matrices, 3*16, 4*16); และการประหยัดกลับคืนค่าสามารถเป็นที่น่ารำคาญยิ่งขึ้น …

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

1
2D โปรไฟล์ผิวด้านบนของน้ำ
ฉันพยายามสร้างเอฟเฟกต์ของความหนาของผิวน้ำด้วย shader ที่ยอด ฉันอยู่ในสภาพแวดล้อมของเกม 3 มิติ แต่มันเป็นมุมมองเลื่อนดังนั้นมุมมอง "2D" นี่คือบทแนะนำที่ดีเกี่ยวกับการสร้างเอฟเฟกต์ดังกล่าวใน 2D จริงโดยใช้ตัวแบ่งส่วน แต่ฉันคิดว่ามันใช้ไม่ได้ในกรณีนี้ สำหรับช่วงเวลาที่ฉันมีเครื่องบินเพียงลำเดียวฉันก็ใช้การหักเหแสง และฉันต้องการใช้เอฟเฟกต์ความหนาของน้ำ แต่ฉันไม่รู้จะทำยังไง ฉันไม่ได้พยายามที่จะสร้างการเสียรูป / การเคลื่อนที่ของน้ำโดยใช้จุดยอดในขณะนี้นี่ไม่ใช่ประเด็น ฉันไม่รู้ว่ามันเป็นไปได้หรือเปล่ากับ quad ที่เรียบง่ายบางทีฉันควรใช้วัตถุแบบนี้ นี่คือตัวอย่างบางส่วน. ฉันไม่มีความคิดเกี่ยวกับวิธีสร้างเอฟเฟกต์นี้ ขอบคุณมาก ! [ แก้ไข ] เพิ่มเอฟเฟกต์น้ำเรย์แมนเพื่อการอ้างอิงที่ดีขึ้นของเอฟเฟกต์

1
การเพิ่มประสิทธิภาพการทำงานของเครื่องแยกชิ้นส่วนหนัก
ฉันต้องการความช่วยเหลือในการเพิ่มประสิทธิภาพชุดของเฉดสีต่อไปนี้: เวอร์เท็กซ์: precision mediump float; uniform vec2 rubyTextureSize; attribute vec4 vPosition; attribute vec2 a_TexCoordinate; varying vec2 tc; void main() { gl_Position = vPosition; tc = a_TexCoordinate; } Fragment: precision mediump float; /* Uniforms - rubyTexture: texture sampler - rubyTextureSize: size of the texture before rendering */ uniform sampler2D rubyTexture; uniform …

1
gluLookAt ทำงานอย่างไร
จากความเข้าใจของฉัน gluLookAt( eye_x, eye_y, eye_z, center_x, center_y, center_z, up_x, up_y, up_z ); เทียบเท่ากับ: glRotatef(B, 0.0, 0.0, 1.0); glRotatef(A, wx, wy, wz); glTranslatef(-eye_x, -eye_y, -eye_z); แต่เมื่อฉันพิมพ์ModelViewเมทริกซ์การเรียกเพื่อglTranslatef()ดูเหมือนจะทำงานไม่ถูกต้อง นี่คือข้อมูลโค้ด: #include <stdlib.h> #include <stdio.h> #include <GL/glut.h> #include <iomanip> #include <iostream> #include <string> using namespace std; static const int Rx = 0; static const int …

2
จัดการกับแสงจำนวนมากในฉาก (พร้อมเฉดสี)
ฉันอยากรู้เกี่ยวกับวิธีจัดการกับแสงไฟมากมายในฉาก ให้แผนที่ขนาดใหญ่มากในเกมเล่นตามบทบาทกับดันเจี้ยน (พร้อมไฟในนั้น) ฯลฯ ฉันรู้เกี่ยวกับแสงที่เลื่อนออกไป แต่คำถามของฉันคือเพิ่มเติม: วิธีการที่ไม่ได้ทำให้ไฟจำนวนมาก เห็นได้ชัดว่าเป็นที่น่าพอใจที่จะแสดงแสงที่มีผลต่อฉากเท่านั้น แต่ฉันไม่รู้เทคนิค / อัลกอริทึมในการเก็บภาพ ไม่มีใครต้องการหรือสามารถให้แสง 500 จุดเพียงเพราะมีบางแห่งในแผนที่ แต่ไม่มีใครสามารถนำเส้นตรงจากแสงไปยังผู้เล่นและทดสอบว่ามีอะไรอยู่ระหว่างนั้นหรือไม่ ระยะทางดูไม่เหมือนตัวบ่งชี้ที่ดี (แสงแดด?) tl; dr: ฉันจะทราบได้อย่างไรว่าไฟใดที่ส่งผลกระทบต่อฉากเพื่อแสดงผลเท่านั้น

4
การเรนเดอร์พิกเซลที่สมบูรณ์แบบสำหรับชุดเรนเดอร์เป้าหมายด้วย Quad เต็มหน้าจอ
ฉันมีปัญหาบางอย่างในการแสดงผลกลุ่มของค่าที่แสดงผลเป้าหมาย ค่าไม่เคยจบลงในช่วงที่ฉันต้องการ โดยพื้นฐานแล้วฉันใช้รูปสี่เหลี่ยมเต็มหน้าจอและพิกเซลเชดเดอร์เพื่อแสดงผลพื้นผิวเป้าหมายของชุดเรนเดอร์ของฉันจากนั้นตั้งใจจะใช้พิกัดพื้นผิวเป็นพื้นฐานสำหรับการคำนวณบางอย่างในเดอร์ พิกัดพื้นผิวของช่วงควอดจาก (0,0) ที่มุมบนซ้ายถึง (1,1) ที่มุมล่างขวา ... ปัญหาคือหลังจากการแก้ไขค่าเหล่านี้จะไม่มาถึงที่ส่วนพิกเซลเช่น . ตัวอย่าง: ฉันแสดงผลเป็นพื้นผิว 4x4 และตัวแบ่งส่วนในกรณีนี้เพียงแค่แสดงพิกัดพื้นผิว (u, v) ในช่องสีแดงและสีเขียว: return float4(texCoord.rg, 0, 1); สิ่งที่ฉันต้องการออกจากมันคือพื้นผิวที่พิกเซลที่ด้านซ้ายบนคือ RGB (0,0,0) และทำให้เป็นสีดำพิกเซลที่ด้านบนขวาคือ RGB (255,0,0) และสว่าง สีแดงและพิกเซลที่ด้านล่างซ้ายคือ RGB (0,255,0) - สีเขียวสดใส อย่างไรก็ตามฉันได้รับที่นี่แทน (การเรนเดอร์รูปสี่เหลี่ยมตรงไม่มีการแก้ไข) พิกเซลด้านบนซ้ายเป็นสีดำ แต่ฉันได้สีแดงเข้มและเขียวเข้มที่มุมอื่น ๆ เท่านั้น ค่า RGB ของพวกเขาคือ (191,0,0) และ (0,191,0) ฉันสงสัยอย่างยิ่งว่ามันเกี่ยวข้องกับตำแหน่งการสุ่มตัวอย่างของรูปสี่เหลี่ยม: พิกเซลด้านบนซ้ายอย่างถูกต้องสุ่มตัวอย่างที่มุมบนซ้ายของรูปสี่เหลี่ยมและได้รับ (0,0) เป็นพิกัด …

3
การแรเงาที่เลื่อนออกไป - วิธีรวมแสงหลายดวงเข้าด้วยกัน?
ฉันเริ่มต้นด้วย GLSL และฉันได้ใช้การแรเงาที่เลื่อนออกไปอย่างง่ายซึ่งจะส่งออก G-buffer ด้วยตำแหน่ง, ค่าพื้นฐานและอัลเบโด้ ฉันยังเขียน shader แสงจุดง่ายเช่นกัน ตอนนี้ฉันวาดทรงกลมสำหรับจุดไฟและเอาท์พุทไปที่บัฟเฟอร์แสง ปัญหาคือฉันจะรวมผลลัพธ์ของบัฟเฟอร์แสงเมื่อวาดแสงหลายดวงได้อย่างไร เช่นเมื่อฉันวาดแสงที่สองไปยัง lightbuffer โดยใช้ shader แสงจุดฉันจะเพิ่มแสงแรกในแสงที่สองในบัฟเฟอร์แสงได้อย่างไร ฉันหมายความว่าคุณไม่สามารถอ่านและเขียนไปยังบัฟเฟอร์เอาต์พุตเดียวกันได้หรือไม่

1
มีหนังสือดีๆเกี่ยวกับการเขียนโปรแกรมกราฟิกไหม?
ฉันกำลังมองหาหนังสือที่ใช้วิธีการแบบ bottom-up สำหรับการเขียนโปรแกรมกราฟิก ดังนั้นสิ่งที่เริ่มต้นด้วยการกรองแบบ 2d อาจจะย้ายไปที่การทำแผนที่ปกติจากนั้นการบดเคี้ยวโดยรอบ ฯลฯ ฉันถามเพราะฉันขี้เกียจไม่กี่ปีที่ผ่านมาในการพัฒนาเกมและใช้เครื่องมือที่จัดการสิ่งนี้ ฉันต้องการเริ่มต้นการเขียนเฉดสีให้กับเกมของฉันแทนที่จะพึ่งคนที่คลุมเครือที่ฉันยืมมาในอดีต ฉันคิดว่าความรู้ที่แข็งแกร่งมากในเรื่องนี้จะช่วยได้และฉันเป็นผู้เรียนแบบล่างขึ้นบนดังนั้นโปรดช่วยฉันด้วย! ฉันรู้ว่าชุด GPU Gems นั้นยอดเยี่ยม แต่พวกเขาดูเหมือนจะเป็นตำราอาหารมากกว่าวิธีการจากล่างขึ้นบนที่ฉันต้องการ คุณมักจะได้รับทฤษฎีที่กระจัดกระจายจากตำราอาหารมากกว่าการสร้างทฤษฎีจากบทก่อนหน้า แก้ไข: สิ่งที่คุณอ่านโดยเฉพาะ! ฉันสามารถค้นหาสิ่งนี้ได้จาก amazon แต่ก็ยากที่จะได้รับการตรวจสอบอย่างเป็นกลาง

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