Apa itu shading ramp atau pencahayaan dan bagaimana cara kerjanya? Apakah berbeda dari toon shading atau apakah konsepnya sama? Bagaimana specularity dihitung secara berbeda untuk ramp shading versus blinn-phong atau lambert?
Dalam naungan Blinn / Phong tradisional, Anda menghitung istilah difus untuk piksel dengan mengukur kosinus sudut antara normal di permukaan dan arah cahaya. Jadi, dalam hal ini, shader sederhana akan terlihat seperti ini:
float DiffuseCoeff(in float3 pos, in float3 normal, in float3 lightPos) {
float3 lightDir = lightPos - pos;
lightDir.normalize();
return max(0.0, Dot(lightDir, normal));
}
Dalam ramp shading, idenya adalah memodulasi koefisien difus dengan tekstur pencarian 1D. Bergantung pada apa yang Anda masukkan ke dalam tekstur ini, Anda dapat menghasilkan efek yang berbeda. Karenanya, fungsi shader kami untuk menghitung koefisien difus menjadi:
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);
}
Misalnya, jika kita ingin menerapkan shader sel, yang bisa kita lakukan adalah menghasilkan tekstur ramp yang mengemulasi fungsi langkah:
Anda dapat menggunakan ide yang sama untuk menghasilkan efek berbeda untuk pencahayaan specular juga. Naungan "Ramp" benar-benar hanya merujuk pada gagasan memodulasi nilai warna oleh tekstur.
EDIT : Team Fortress 2 menggunakan ramp shader dalam rendering mereka. Anda dapat melihat detail di makalah ini:
http://www.valvesoftware.com/publications/2007/NPAR07_IllustrativeRenderingInTeamFortress2.pdf
Lihat di Bagian 5, di subbagian yang berjudul "Fungsi Waring Difus"