ความแตกต่างระหว่างวัสดุและ Shader


27

ในเกมวัสดุมักจะมีผลต่อลักษณะที่ปรากฏของวัตถุเท่านั้น ลักษณะที่ปรากฏทางสายตานั้นได้รับผลกระทบจาก shaders ดังนั้นเกี่ยวกับคำศัพท์มีความแตกต่างระหว่างวัสดุและเฉดสีหรือไม่ คุณควรเขียนหนึ่ง shader สำหรับวัสดุหนึ่ง?


1
ฉันได้เห็นเครื่องมือบางอย่างที่วัสดุเป็น shader + diffuse texture + bumpmap แต่ฉันไม่คิดว่าจะมีคำจำกัดความสั้น ๆ
รอยต.

3
@RoyT เครื่องมือเหล่านั้นจะใช้คำศัพท์ที่ผิด วัสดุที่ไม่ได้เทียบเท่ากับShader - เป็น Shader เป็นโปรแกรมที่มีวัสดุที่เป็นพวงของค่าข้อมูล โปรแกรม shader ที่แตกต่างกัน 2 โปรแกรมสามารถแสดงเนื้อหาเดียวกันและได้ผลลัพธ์ที่แตกต่างกัน
bobobobo

@bobobobo หรือมากกว่านั้นโดยทั่วไปจะใช้ shader เดียวเพื่อแสดงวัสดุจำนวนมากโดยการเสียบพื้นผิวที่แตกต่างกันค่าพารามิเตอร์และอื่น ๆ
นาธานรีด

คำตอบ:


29

วัสดุคือการรวมกันของคุณลักษณะที่อธิบายว่าพื้นผิวของวัสดุที่กำหนดควรมีลักษณะอย่างไร

เครื่องยนต์บางตัวใช้เฉดสีที่แตกต่างกันสำหรับวัสดุที่แตกต่างกันซึ่งในกรณีนี้คำจำกัดความของวัสดุอาจมีลักษณะเช่นนี้:

[Material]
Shader=NormalMappedSpecular.glsl
Texture1=Rock.png
Texture2=RockNormal.png
Texture3=RockSpecular.png

เอ็นจิ้นอื่นใช้หนึ่ง shader สำหรับวัตถุทั้งหมด (หรือค่อนข้างเครื่องยนต์ตัดสินใจว่า shader จะใช้อะไรขึ้นอยู่กับพารามิเตอร์ความสามารถของ GPU และปัจจัยอื่น ๆ เช่นระยะทาง) ซึ่งในกรณีนี้วัสดุจะมีลักษณะเช่นนี้มากขึ้น:

[Material]
Ambient=0.5
Specularity=0.7
DiffuseMap=Rock.png
NormalMap=RockNormal.png
SpecularMap=RockSpecular.png

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

10

วัสดุระบุว่าวัตถุที่ตอบสนองต่อแสง

มีพารามิเตอร์ทั่วไปสองสามอย่าง:

  • Kd: การตอบสนองแบบกระจายต่อแสง
  • Ks: การตอบสนองต่อแสงเป็นพิเศษ
  • Ns: "Shininess"
  • map_Kd: พื้นผิว

ตอนนี้บอกว่าคุณมีรูปสามเหลี่ยมแสดงผลด้วยMวัสดุ Mมี Kd = (1,0,0) (การตอบสนองแบบกระจายสีแดง), Ks = (1,1,1) (การตอบสนองแบบ specular สีขาว), Ns = 25 (ไฮไลท์แบบ specular จะค่อนข้างคมชัดและไม่ได้เลือน) และไม่มี map_Kd ( ไม่มีพื้นผิว)

งานของshaderคือการใช้คณิตศาสตร์เพื่อใช้ตำแหน่งจุดสุดยอดของรูปสามเหลี่ยมตำแหน่งของแสงค่าสีของวัสดุและคิดออกว่าสีสามเหลี่ยมควรจะปรากฏ เครื่องคำนวณจุดยอดทำสิ่งนี้ "การคำนวณการแรเงา" หนึ่งครั้งในแต่ละจุดสุดยอดและสอดแทรกสีข้ามสามเหลี่ยม

การดำเนินการทั่วไปใน shader เพื่อคำนวณการตอบสนองแบบกระจายที่จุดยอดคือ:

// hlsl
float3 vertexToLight = normalize( lightPos.xyz - vertexPos.xyz ) ;

float3 diffuseColor = max( dot( vertexToLight, vertexNormal ), 0.0 ) * kd * lightColor ;

3

วัสดุเป็นสิ่งที่คุณใช้กับรูปทรงเรขาคณิตเพื่อให้สีและลวดลาย พื้นผิวเป็นส่วนประกอบของวัสดุ

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

ดังนั้นเพื่อตอบคำถามของคุณ - ใช่มีความแตกต่างมีการเหลื่อมกันเล็กน้อยเช่นกัน - คุณสามารถทำวัสดุสีแดงหรือเขียน shader เพื่อทำให้สิ่งต่าง ๆ เป็นสีแดง แต่ทั้งคู่ก็ช่วยให้คุณได้สิ่งต่าง ๆ มากมายที่คุณ ไม่สามารถอยู่กับคนอื่นได้

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

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


1
ในทางเทคนิคแล้วพื้นผิวไม่ได้เป็นวัสดุของตัวมันเองโดยปกติจะเป็นส่วนหนึ่งของวัสดุ
bobobobo

1

ถึงแม้ว่าจะช้ามี "คนโกง" ซึ่งสามารถช่วยให้คุณเข้าใจได้ดีขึ้น

วัสดุคือทุกสิ่งที่แนบมากับ shader ที่แน่นอนสำหรับการโทรแบบดึง

ตัวอย่างเช่นในคำตอบข้างต้นคุณมีวัสดุนี้: [วัสดุ] Shader = NormalMappedSpecular.glsl Texture1 = Rock.png Texture2 = RockNormal.png Texture3 = RockSpecular.png

ซึ่งแปลว่าคุณจะแสดงผลด้วย shader ที่ทำแผนที่ปกติและการคำนวณแบบพิเศษและจะใช้พื้นผิวทั้ง 3 ด้านใน shader นั้น

ต่อมาคุณสามารถใช้ shader เดิมได้อีกครั้งโดยมีพื้นผิว 3 แบบที่แตกต่างกัน (เช่นรถยนต์ carNormal และ carSpecular) คุณจะทำการเรียกการจับสลากที่แตกต่างกันด้วยวัสดุที่แตกต่างกันเพียงเพราะคุณเปลี่ยนพารามิเตอร์ shader

โดยรวมแล้ววัสดุคือทุกสิ่งที่สร้างการเรียกแบบดึงโดยใช้ shader เดียวกันโดยมีพารามิเตอร์เดียวกัน (พื้นผิวเครื่องแบบและคุณสมบัติ)

ฉันหวังว่านี่จะช่วยให้มองเห็นภาพได้ดีขึ้น


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