Announcement

Collapse
No announcement yet.

ถามเรื่อง vga

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • ถามเรื่อง vga

    ถามเรื่องท่อ ในการ์ดจอ มีไว้เพื่ออะไรครับ ไม่รู้จริงจริงครับ

  • #2
    Originally posted by ssss View Post
    ถามเรื่องท่อ ในการ์ดจอ มีไว้เพื่ออะไรครับ ไม่รู้จริงจริงครับ
    PixelPipelines

    รอท่านถัดไป ^^ ไม่รู้ จ๊ะ

    Comment


    • #3
      Vertex Shader คือ
      ในเกมสามมิตินั้น วัตถุแต่ละชิ้นที่อยู่ภายในฉาก ไม่ว่าจะเป็นรถยนต์ ต้นไม้ ตึก คน ฯลฯ ล้วนแล้วแต่จะประกอบไปด้วยสามเหลี่ยมหลาย ๆ ชิ้นมาต่อเข้าด้วยกันจนเกิดเป็นรูปร่างขึ้นภายในเกม Vertex ก็คือจุดยอดที่ปรากฏตรงมุมของสามเหลี่ยมแต่ละชิ้นนั่นเอง
      จุดยอดหรือ Vertex นั้นเป็นข้อมูลสำคัญที่จะบ่งบอกให้คอมพิวเตอร์ทราบว่าวัตถุชิ้นนั้น ๆ ที่จะสร้างมีรูปทรงอย่างไร เพราะแต่ละ Vertex จะมีข้อมูลแสดงตำแหน่งตัวเองอยู่ ทำให้คอมพิวเตอร์สามารถกำหนดจุดยอดนี้ในฉากได้อย่างถูกต้อง โดย Vertex นั้นจะบ่งบอกพิกัดทั้งในแกน X แกน Y แกน Z และแกน W (แกน Z จะบอกความลึกของตำแหน่ง เช่น รถยนต์ที่อยู่ด้านหน้าตึกจะมีความลึกน้อยกว่าตึกที่อยู่ด้านหลัง ซึ่งด้วยข้อมูลนี้เกมจะแสดงภาพของรถยนต์บังตึกเอาไว้ไม่ให้เรามองเห็นตึกได้ แต่สมมติว่าเราอยากให้มองเห็นตึกโดยไม่สนใจว่ารถยนต์จะอยู่ด้านหน้า เราก็สั่งค่าแกน Z ของรถยนต์ให้อยู่ลึกกว่าตัวตึก เท่านี้ก็จะทำให้เรามองทะลุรถยนต์ไปเห็นตึกด้านหลังได้ แต่ก็จะเกิดภาพที่ไม่สมจริงขึ้น ส่วนแกน W ใช้บ่งบอกน้ำหนัก)
      นอกเหนือจากการบรรจุข้อมูลเกี่ยวกับตำแหน่งของตนแล้ว Vertex ยังต้องบรรจุข้อมูลเกี่ยวกับสีเอาไว้ด้วย เพื่อให้คอมพิวเตอร์ทราบว่าจะแสดงสีอะไรใน Vertex แต่ละตำแหน่ง โดยข้อมูลสีนั้นจะเก็บในรูปของ RGBA หรือ Red, Green, Blue, Alpha
      นอกจากนี้ก็ยังต้องมีข้อมูลเกี่ยวกับ Texture หรือพื้นผิวที่จะนำมาวางไว้บน Vertex ต่าง ๆ เพื่อให้เกิดเป็นเสื้อผ้าหรือลวดลายของกำแพง ฯลฯ
      จะเห็นได้ว่า Vertex แต่ละตำแหน่งนั้นต้องเก็บข้อมูลมากมาย ซึ่งเมื่อรวมในแต่ละฉากเข้าด้วยกันแล้ว ข้อมูล Vertex ที่มีส่วนสำคัญทำให้เกิดรูปร่างสามมิติที่สมบูรณ์นั้นมีอยู่มหาศาล ซึ่งข้อมูลนี้จะต้องมีการคำนวณและปรับเปลี่ยนทุกครั้งที่ผู้เล่นเคลื่อนไหวไปในตำแหน่งต่าง ๆ ภายในฉากหรือมีการเปลี่ยนมุมมอง เพราะทุกครั้งที่ผู้เล่นหันหน้าไปด้านซ้ายหรือขวา หรือเดินหน้าถอยหลัง ตำแหน่งของวัตถุภายในภาพที่สัมพันธ์กับตำแหน่งของผู้เล่นก็จะเปลี่ยนไปอยู่เสมอ
      ความเคลื่อนไหวของวัตถุสามมิติดังกล่าวข้างต้นนี้เราจะเรียกว่า Transform
      แต่เกมสามมิติจะยังไม่สมบูรณ์หากไม่มีการสร้างแสงและเงาให้กับภาพ ซึ่งการสร้างแสงและเงา หรือที่เรียกกันว่า Lighting นั้น จะเป็นการบรรจุข้อมูลลงไปในแต่ละ Vertex ว่าจะต้องใช้แสงแบบใด สว่างจ้าเหมือนไฟจากสปอตไลท์หรือเป็นไฟเรื่อ ๆ จากแสงเทียน ฯลฯ
      ทั้งนี้ในกรณีของการเพิ่มข้อมูลเกี่ยวกับแสงและเงาลงในแต่ละ Vertex นั้นจะใช้เฉพาะในเกมที่ใช้สามารถแบบ Vertex Lighting เท่านั้น ซึ่งเกมในปัจจุบันนั้นจะใช้เทคนิคการใส่ Texture รูปเงาหรือรูปแสงเข้าไปในวัตถุแทนเพื่อสร้างภาพที่ทำให้เกิดความรู้สึกเหมือนมีแสงหรือเงาแทน

      Pixel Shader คือ
      อย่างที่ได้อธิบายไปแล้วว่าฉากสามมิตินั้นจะต้องประกอบไปด้วยข้อมูลสามเหลี่ยมที่มี Vertex ใช้ระบุตำแหน่งเพื่อทำให้ภาพมีความลึกและมีรูปทรงของวัตถุแต่ละชิ้นอย่างชัดเจนเพื่อให้สามารถนำมาสร้างเป็นฉากได้ ซึ่งในส่วนนี้จะเป็นข้อมูลที่คำนวณใน Vertex Shader
      แต่เมื่อ Vertex Shader คำนวณข้อมูลในส่วนนี้เสร็จสิ้นแล้ว Vertex Shader ก็จะต้องส่งข้อมูลต่อมายัง Pixel Shader ซึ่งข้อมูลที่ส่งต่อมานี้จะต้องมีการลบส่วนที่ไม่จำเป็นทิ้งไปเสียก่อน โดยส่วนที่ต้องลบทิ้งก็คือข้อมูลในส่วนที่จะไม่ปรากฏบนภาพสุดท้าย เช่น วัตถุที่อยู่ด้านหลัง ตรงนี้เรากลับไปที่ตัวอย่างที่พูดถึงแต่แรก คือรถยนต์ที่จอดหน้าตึก ข้อมูลที่ต้องลบทิ้งก็คือส่วนของรถยนต์ที่อยู่ตรงข้ามกับผู้เล่น (ถ้ารถหันด้านซ้ายหาผู้เล่น ส่วนด้านขวาของรถยนต์หันเข้าหาตึก ข้อมูลด้านขวาของรถจะถูกลบออก) และตัวตึกที่ถูกรถยนต์บังเอาไว้
      จากนั้นข้อมูลของภาพจะถูกแทนที่ด้วยค่า X และ Y เพื่อทำให้กลายเป็นฉากสองมิติ เพื่อให้สามารถกำหนดจุดบนจอภาพที่เป็นสองมิติได้ (เพราะจอภาพคอมพิวเตอร์มีสองมิติไม่ใช่สามมิติ)
      ดังนั้นในขั้นตอนการส่งต่อข้อมูลจาก Vertex Shader มาที่ Pixel Shader ภาพฉากสามมิติที่การ์ดแสดงผลคำนวณแบบสามมิติจริง ๆ จึงถูกเปลี่ยนให้การเป็นจุด (Pixel) ซึ่งเป็นสองมิติ โดยภาพสุดท้ายเราจะเห็นแบบภาพสามมิติเหมือน หรือ Virtual 3D
      สิ่งที่ Pixel Shader ทำก็คือการนำจุด (Pixel) เหล่านั้นมาใส่สีและเอฟเฟกต์ต่าง ๆ เข้าไป
      เมื่อคำนวนเสร็จ ก็มาถึงขั้นตอนการนำข้อมูล Texture เหล่านั้นมา Blend (ผสม) ให้อยู่ภายในพิกเซลเดียว จากนั้นเมื่อได้ข้อมูลแล้วก็นำไปสู่ขั้นตอนต่อมาคือการใส่เอฟเฟกต์หมอก และสุดท้ายทำการ Alpha Blending เพื่อให้ทราบว่าจะมีความเข้มจางของพิกเซลมากน้อยแค่ไหน เท่านี้เป็นอันสิ้นสุดการคำนวณ

      หลักๆก็ประมาณนี้ครับ แต่อาจจะมีแตกต่างกันไปตามแต่สถาปัติยกรรมของการ์ด หรือ Generation ของการ์ดครับ

      อันนี้ผมก๊อปมานะครับ ไม่ได้เขียนเอง แต่นานแล้วเลยจำแหล่งที่มาไม่ได้ครับ^^

      Comment


      • #4
        ถ้างั้นมีมากก็ยิ่งดีใช่ไหมครับ

        Comment


        • #5
          มากไว้ก่อนดีแน่นอนคร้าบ

          Comment

          Working...
          X