การแรเงาหรือแสงคืออะไร มันแตกต่างจากตูนแรเงาหรือเป็นแนวคิดเดียวกันหรือไม่ specularity ถูกคำนวณแตกต่างกันอย่างไรสำหรับการแรเงาบนทางลาดเทียบกับ blinn-phong หรือ lambert
การแรเงาหรือแสงคืออะไร มันแตกต่างจากตูนแรเงาหรือเป็นแนวคิดเดียวกันหรือไม่ specularity ถูกคำนวณแตกต่างกันอย่างไรสำหรับการแรเงาบนทางลาดเทียบกับ blinn-phong หรือ lambert
คำตอบ:
ในการแรเงาแบบ Blinn / Phong แบบดั้งเดิมคุณคำนวณคำที่กระจายสำหรับพิกเซลโดยการวัดค่ามุมโคไซน์ระหว่างค่าปกติที่พื้นผิวและทิศทางของแสง ดังนั้นในกรณีนี้ shader ง่าย ๆ จะมีลักษณะดังนี้:
float DiffuseCoeff(in float3 pos, in float3 normal, in float3 lightPos) {
float3 lightDir = lightPos - pos;
lightDir.normalize();
return max(0.0, Dot(lightDir, normal));
}
ในการแรเงาทางลาดความคิดคือการปรับค่าสัมประสิทธิ์การกระจายโดยพื้นผิวการค้นหา 1D คุณสามารถสร้างเอฟเฟกต์ต่าง ๆ ได้ขึ้นอยู่กับสิ่งที่คุณใส่ในพื้นผิวนี้ ดังนั้นฟังก์ชัน shader ของเราในการคำนวณสัมประสิทธิ์การกระจายกลายเป็น:
texture1D rampTex;
float DiffuseCoeff(in float3 pos, in float3 normal, in float3 lightPos) {
float3 lightDir = lightPos - pos;
lightDir.normalize();
// Map value from [-1, 1] to [0, 1]
float rampCoord = Dot(lightDir, normal) * 0.5 + 0.5;
return tex1D(rampTex, rampCoord);
}
ตัวอย่างเช่นถ้าเราต้องการที่จะใช้เซลล์ shader สิ่งที่เราสามารถทำได้คือการสร้างพื้นผิวลาดที่เลียนแบบฟังก์ชั่นขั้นตอน:
คุณสามารถใช้แนวคิดเดียวกันนี้ในการสร้างเอฟเฟกต์ต่าง ๆ สำหรับแสงแบบ specular เช่นกัน การแรเงา "Ramp" หมายถึงความคิดในการปรับค่าการแรเงาด้วยพื้นผิวเท่านั้น
แก้ไข : Team Fortress 2 ใช้ rader shader ในการเรนเดอร์ คุณสามารถตรวจสอบรายละเอียดในเอกสารนี้:
http://www.valvesoftware.com/publications/2007/NPAR07_IllustrativeRenderingInTeamFortress2.pdf
ดูภายใต้ส่วนที่ 5 ที่ส่วนย่อยที่ชื่อว่า "ฟังก์ชั่นการแปรปรวนแบบกระจาย"