Tentang Shading Modelling Bab 2 ( Desain Pemodelan Grafik) lanjutan..
Tugas Softskill
BAB
II
KONSEP
DAN TEORI PADA SHADING MODELLING
Shading mengacu pada penggambaran
kedalaman suatu objek dalam model 3D atau ilustrasi dengan mengubah-ubah
tingkat dari kegelapan suatu object(darkness).
Menggambar Shading merupakan suatu
proses yang digunakan dalam menggambar dengan tingkat darkness tertentu pada
sebuah kertas dengan memakai media yang lebih padat atau menampilkan bayangan
yang lebih gelap untuk area yang lebih gelap dan memakai media yang tidak
terlalu padat atau menampilkan bayangan yang lebih terang untuk area yang lebih
terang. Ada berbagai macam teknik shading, misalnya cross hatching dimana
garis-garis tegak lurus dengan jarak satu sama lain (kedekatan) yang
berbeda-beda digambar pada pola grid untuk membentuk bayangan area. Semakin
dekat garis-garis tersebut, semakin gelap area yang muncul. Begitu pula
sebaliknya, semakin jauh garis-garis tersebut, semakin terang area yang muncul.
Pola-pola yang terang (misalnya objek
yang memiliki area terang dan area berbayang) akan sangat membantu dalam
pembuatan ilusi kedalaman pada kertas dan layar komputer.
Komputer
grafis
Pada komputer grafis, shading mengacu pada proses
mengubah warna berdasarkan sudut terhadap cahaya dan jarak dari cahaya untuk
menciptakan efek photorealistic. Shading dilakukan selama proses penggambaran.
Sudut
terhadap sumber cahaya
Shading mengubah warna tampilan dalam
model 3D berdasarkan sudut permukaan terhadap cahaya matahari atau sumber
cahaya lainnya.
Gambar pertama di bawah ini menunjukkan
permukaan-permukaan kotak yang digambar dimana semuanya memiliki warna yang
sama. Garis tepi telah digambar sehingga memudahkan gambar dilihat dan
dibedakan.
Gambar kedua merupakan model yang
sama, namun tidak memiliki garis tepi. Sangat sulit membedakan permukaan kotak
yang satu dengan yang lainnya.
Gambar ketiga memiliki shading dimana
membuat gambar menjadi lebih realistis dan lebih mudah dilihat serta dibedakan.
Sumber
cahaya
Ada berbagai jenis cahaya:
• Ambient
light – Ambient light menyinari semua objek dalam suatu scene secara merata,
membuat objek menjadi terang tanpa menambahkan bayangan.
• Directional
light – Directional light menyinari semua objek secara merata dari suatu arah
tertentu. Ia bagaikan suatu area terang dengan ukuran dan jarak yang tidak
terbatas dari scene. Ada bayangan, tetapi itu bukan merupakan distance falloff.
• Point
light – Point light berasal dari satu titik dan menyebar dalam berbagai arah.
• Spotlight
– Spotlight berasal dari satu titik dan menyebar mengikuti arah kerucut.
• Area
light – Area light berasal dari satu bidang datar dan menyinari semua objek
dalam arah tertentu yang berasal dari bidang datar tersebut.
• Volume
light – Volume light merupakan suatu ruang tertutup yang menyinari objek dalam
ruang tersebut.
Shading diinterpolasikan berdasarkan
bagaimana sudut dari sumber cahaya mencapai objek dalam suatu scene. Tentu saja
sumber-sumber cahaya tersebut mungkin dan seringkali dikombinasikan dalam
sebuah scene. Pelukis atau ilustrator kemudian menginterpolasikan bagaimana
cahaya-cahaya ini dikombinasikan dan memproduksi gambar 2D yang akan
ditampilkan di layar.
Distance
fall off
Secara teoritis, dua permukaan
paralel disinari jumlah cahaya yang sama dari sumber cahaya yang jauh, seperti
matahari. Walaupun permukaan yang satu jauh, mata kita melihat permukaan
tersebut lebih banyak di ruang yang sama sehingga penyinarannya tampak sama.
Perhatikan gambar pertama dimana
warna pada permukaan depan dari kedua kotak benar-benar sama. Tampaknya ada
sedikit perbedaan ketika kedua permukaan tersebut bertemu, tetapi ini merupakan
ilusi optikal yang disebabkan oleh garis tepi vertikal di bawah dimana kedua
permukaan ini bertemu.
Perhatikan gambar kedua dimana
permukaan kotak tampak lebih terang pada bagian depan dan tampak lebih gelap
pada bagian belakang. Selain itu, permukaan lantai juga tampak semakin gelap
seiring makin jauhnya jarak.
Efek distance falloff membuat gambar
tampak lebih realistis tanpa harus menambahkan cahaya tambahan untuk
menimbulkan efek yang sama. Distance falloff dapat dihitung dalam beberapa
cara:
• Tidak
ada
• Linier
– Untuk setiap unit x jarak suatu titik dari sumber cahaya, jumlah cahaya yang
diterima adalah unit x dikurangi bright.
• Kuadratik
– Ini menunjukkan bagaimana cahaya kira-kira bekerja di kehidupan nyata. Suatu
titik yang dua kali jauhnya dari sumber cahaya dibandingkan titik lainnya akan
menerima cahaya empat kali lebih sedikit.
• Faktor
n – Suatu titik yang jaraknya sebesar unit x dari suatu sumber cahaya akan
menerima cahaya sebesar 1/xn.
• Fungsi
matematis lainnya juga dapat digunakan.
Flat
vs smooth shading
Flat shading merupakan teknik
pencahayaan yang digunakan dalam komputer grafis 3D. Ia membentuk bayangan
setiap polygon dari suatu objek berdasarkan sudut antara permukaan normal
polygon dan arah dari sumber cahaya, warna-warna respective, dan intensitas
sumber cahaya. Ini digunakan dalam pembuatan gambar dengan kecepatan tinggi
dimana menggunakan teknik-teknik shading yang lebih sulit dan secara
perhitungan lebih mahal. Akan tetapi, di akhir abad ke-20, kartu grafis yang
terjangkau menawarkan smooth shading yang dapat digunakan dalam proses
penggambaran cepat, membuat flat shading tidak diperlukan lagi.
Kekurangan dari flat shading adalah
ia memberikan tampilan model yang low-polygon.
Terkadang tampilan ini dapat menguntungkan juga, misalnya dalam membuat
model objek berbentuk kotak. Pelukis terkadang menggunakan flat shading untuk
melihat polygon dari model padat yang mereka ciptakan. Teknik-teknik
pencahayaan dan shading lanjutan dan lebih realistis meliputi Gourad shading
dan Phong shading.
Model
Shading
Model shading
menentukan bagaimana suatu permukaan objek muncul dalam kondisi pencahayaan
yang berbeda-beda. Beberapa model matematis dapat digunakan untuk menghitung shading.
Setiap model shading memproses relasi dari permukaan normal terhadap sumber
cahaya untuk menciptakan efek shading tertentu.
Phong
Menggunakan warna-warna ambient,
diffuse, dan specular. Model shading ini membaca orientasi permukaan normal dan
menginterpolasikannya untuk menciptakan tampilan smooth shading. Ia juga
memproses relasi antara normal, cahaya, dan sudut pandang kamera untuk
menciptakan specular highlight.
Hasilnya adalah suatu objek dengan
bayangan smooth, permukaan area yang disinari diffuse dan ambient, serta suatu
specular highlight sehingga objek tampak bersinar seperti bola biliar atau bola
plastik. Pemantulan, transparansi, refraksi, dan tekstur dapat diterapkan pada
objek yang menggunakan Phongshader.
Lambert
Menggunakan warna-warna ambient dan
diffuse untuk menciptakan permukaan matte tanpa specular highlight. Ia
menginterpolasikan normal dari permukaan segitiga yang berdampingan sehingga
shading berubah secara progresif, menciptakan suatu permukaan matte.
Hasilnya adalah suatu objek dengan
smooth shading, seperti telur atau bola ping-pong. Pemantulan, transparansi,
refraksi, dan tekstur dapat diterapkan pada objek yang menggunakan Lambert
shader.
Blinn
Menggunakan warna-warna diffuse,
ambient, dan specular, serta refractive index untuk menghitung specular
highlight. Model shading ini identik dengan model shading Phong, kecuali bentuk
specular highlight-nya merefleksikan pencahayaan lebih akurat ketika ada sudut
tinggi antara kamera dan cahaya.
Model shading ini berguna untuk
tepian yang kasar atau tajam dan untuk mensimulasikan permukaan logam. Specular
highlight-nya tampak lebih terang dibandingkan model Phong. Pemantulan,
transparansi, refraksi, dan tekstur dapat diterapkan pada objek yang
menggunakan Blinnshader.
Cook-Torrance
Menggunakan warna-warna diffuse,
ambient, dan specular, serta refractive index untuk menghitung specular
highlight. Ia membaca orientasi permukaan normal dan menginterpolasikannya
untuk menciptakan tampilan smooth shading. Ia juga memproses relasi antara
normal, cahaya, dan sudut pandang kamera untuk menciptakan specular highlight.
Model shading ini memproduksi hasil
yang berada diantara model shading Blinn dan Lambert, serta berguna untuk
mensimulasikan objek yang lembut dan reflektif seperti kulit. Pemantulan,
transparansi, refraksi, dan tekstur dapat diterapkan pada objek yang
menggunakan Cook-Torrance shader.
Karena model shading ini lebih
kompleks untuk dihitung, ia memakan waktu lebih lama dalam pelukisan daripada
model shading lainnya.
// Copyright (c) 2007 PIXAR. All rights reserved. This program or
// documentation contains proprietary
confidential information and trade
// secrets of PIXAR. Reverse engineering of object code is
prohibited.
// Use of copyright notice is
precautionary and does not imply
// publication.
//
// RESTRICTED RIGHTS NOTICE
//
// Use, duplication, or disclosure by the
Government is subject to the
// following restrictions: For civilian
agencies, subparagraphs (a) through
// (d) of the Commercial Computer
Software--Restricted Rights clause at
// 52.227-19 of the FAR; and, for units of
the Department of Defense, DoD
// Supplement to the FAR, clause
52.227-7013 (c)(1)(ii), Rights in
// Technical Data and Computer Software.
//
// Pixar Animation Studios
// 1200 Park Avenue
// Emeryville, CA 94608
//
//------------------------------------------------------------------------------------------------------//
//------------------------------------------------------------------------------------------------------//
// SCRIPT: CookTorrance.sl
// AUTHOR: Scott Eaton
// DATE: July 3, 2007
//
// DESCRIPTION:
A simple implementation of the Cook-Torrance
//
shading model describe in:
//
A Reflectance Model for Computer Graphics
//
R. L. Cook, K. E. Torrance, ACM Transactions on Graphics 1982
//
//------------------------------------------------------------------------------------------------------//
//------------------------------------------------------------------------------------------------------//
surfaceCookTorrance(
floatKa = 1;
float Ks = .8;
floatKd = .8;
float IOR = 1.3;
float roughness = .2;
color opacity = 1;
colorspecularColor = 1;
colordiffuseColor = (.6, .6, .6);
floatgaussConstant = 100;
){
//the things we need:
// normalized normal and vector to eye
normalNn = normalize(N);
vectorVn = normalize(-I);
float F, Ktransmit;
float m = roughness;
fresnel( normalize(I), Nn, 1/IOR, F,
Ktransmit);
color cook = 0;
floatNdotV = Nn.Vn;
illuminance( P, Nn, PI/2 ){
//half angle vector
vector Ln = normalize(L);
vector H = normalize(Vn+Ln);
floatNdotH = Nn.H;
floatNdotL = Nn.Ln;
floatVdotH = Vn.H;
float D;
float alpha = acos(NdotH);
//microfacet distribution
D =
gaussConstant*exp(-(alpha*alpha)/(m*m));
//geometric attenuation factor
float G = min(1,
min((2*NdotH*NdotV/VdotH), (2*NdotH*NdotL/VdotH)));
//sum contributions
cook += Cl*(F*D*G)/(PI*NdotV);
}
cook = cook/PI;
Oi = opacity;
Ci = (Kd*diffuseColor*diffuse(Nn)+Ks*specularColor*cook)
* Oi;
}
Strauss
Hanya menggunakan warna-warna diffuse
untuk mensimulasikan suatu permukaan logam. Surface’s specular dikaitkan dengan
parameter smoothness dan “metalness” yang mengontrol warna-warna diffuse
berdasarkan specular ratio seperti pemantulan dan highlight.
Pemantulan, transparansi, refraksi, dan tekstur
dapat diterapkan pada objek yang menggunakan Strauss shader.
Anisotropic
Terkadang disebut juga ward. Model
shading ini mensimulasikan permukaan glossy dengan menggunakan warna-warna
ambient, diffuse, dan glossy. Untuk menciptakan efek “digosok” seperti
aluminium yang diamplas, dapat menggunakan orientasi specular color berdasarkan
orientasi permukaan objek. Specular dihitung menggunakan koordinat UV.
Pemantulan, transparansi, refraksi, dan
tekstur dapat diterapkan pada objek yang menggunakan anisotropic shader.
Constant
Hanya menggunakan warna-warna
diffuse. Ia mengabaikan orientasi permukaan normal. Semua permukaan segitiga
objek dianggap memiliki orientasi yang sama dan memiliki jarak yang sama dari
cahaya.
Ia menghasilkan suatu objek yang
permukaannya tidak ada shading, tampak seperti suatu potongan kertas. Ini
berguna jika kita ingin menambahkan static blur pada suatu objek sehingga tidak
ada cahaya specular atau ambient. Ia juga mendukung tekstur sebab tidak ada
atribut yang mengganggu definisi tekstur.
Model shading Blinn–Phong (disebut
juga model pemantulan Blinn–Phong atau model pemantulan Phong termodifikasi)
merupakan suatu modifikasi dari model pemantulan Phong yang dikembangkan oleh
Jim Blinn.
Blinn-Phong merupakan model shading
default yang digunakan di OpenGL dan Direct3D fixed-function pipeline (sebelum
Direct 3D 10 dan OpenGL 3.1), serta digunakan pada setiap vertex selagi ia
melewati pipa grafis; nilai piksel antara diantara vertice diinterpolasikan
oleh Gouraud shading by default, daripada menggunakan Phong shading yang lebih
mahal.
Dalam Phong shading, secara kontinu
harus menghitung ulang produk skalar
diantara viewer (V) dan sinar dari sumber cahaya (L) reflected (R) pada
suatu permukaan.
Jika kita menghitung halfway vector antara vector
viewer dan sumber cahaya,
Kita dapat mengganti dengan
dimana adalah permukaan normal
yang telah dinormalisasikan. Pada
persamaan di atas, dan adalah vector yang telah dinormalisasikan,
dan adalah solusi terhadap
persamaan dimana adalah matriks Householder yang merefleksikan
suatu titik di hyperplane yang memiliki origin dan memiliki normal.
Produk dot ini merepresentasikan
cosinus dari suatu sudut yang merupakan setengah dari sudut yang
direpresentasikan oleh produk dot Phong jika V, L, N, dan R semuanya berada di
bidang datar yang sama. Relasi antara sudut-sudut tersebut diperkirakan benar
jika vektor-vektor tidak berada di bidang datar yang sama, terutama ketika
sudut-sudutnya kecil. Oleh karena itu, sudut antara N dan H terkadang disebut
halfway angle.
Dengan pertimbangan bahwa sudut
antara halfway vector dan permukaan normal kemungkinan lebih kecil daripada
sudut antara R dan V yang digunakan dalam model Phong (kecuali permukaan
ditampilkan dari sudut yang sangat curam atau bersudut besar) dan karena Phong
menggunakan eksponen ditetapkan seperti
yang lebih mendekati expression sebelumnya.
Untuk permukaan front-lit (pemantulan
specular pada permukaan berhadapan dengan viewer), akan menghasilkan specular highlight yang
sangat dekat kecocokannya dengan pemantulan Phong. Namun demikian, di saat
pemantulan Phong selalu bulat untuk permukaan datar, pemantulan Blinn-Phong
menjadi elips ketika permukaan dilihat dari sudut yang curam. Ini dapat
dibandingkan terhadap kasus dimana matahari dipantulkan di permukaan laut yang
dekat dengan horizon atau ketika lampu lalu lintas yang sangat jauh dipantulkan
di trotoar yang basah dimana pantulannya akan selalu tersebar lebih vertikal
dari pada horizontal.
Walaupun model Blinn-Phong menyerupai
model Phong, ia menghasilkan model yang lebih akurat secara empiris dari fungsi
bidirectional reflectance distribution. (lihat: Experimental Validation of Analytical
BRDF Models, Siggraph 2004).
Dalam banyak kasus, model pelukisan
ini kurang efisien dibandingkan Phong shading karena ada perhitungan kuadrat
dan akar. Jika model Phong original hanya memerlukan pemantulan vektor yang
simple, bentuk modifikasi ini memerlukan lebih banyak perhitungan. Namun
demikian, karena banyak CPU dan GPU sudah memiliki fungsi kuadrat dan akar yang
lebih akurat (sebagai fitur standar), serta instruksi lain yang dapat
mempercepat proses pelukisan, masalah waktu sudah tidak terlalu dipermasalahkan
lagi.
Model Blinn-Phong akan lebih cepat
digunakan dalam kasus dimana viewer dan cahaya tidak memiliki keterbatasan. Ini
adalah contoh kasus untuk directional light. Dalam kasus ini, half-angle vector
bebas berada di posisi dan permukaan apapun. Vektor dapat dihitung satu kali
untuk setiap cahaya, kemudian digunakan untuk keseluruhan frame atau ketika
cahaya dan sudut pandang relatif tetap berada di posisi yang sama. Hal ini
tidak berlaku bagi vektor cahaya dipantulkan pada model Phong dimana ia vektor
bergantung pada rata tidaknya permukaan dan harus dihitung ulang untuk setiap
piksel gambar (atau untuk setiap vertex model dalam kasus pencahayaan vertex).
Pada kasus dimana cahaya terbatas,
misalnya ketika menggunakan point light, model Phong original akan lebih cepat
digunakan.
Sampel di bawah ini dalam High Level
Shader Language merupakan suatu metode penentuan cahaya diffuse dan specular
dari suatu point light. Struktur cahaya, posisi dalam ruang pada suatu
permukaan, tampilan arah vektor dan permukaan normal merupakan faktor penentu.
A Lighting structure is returned;
struct Lighting
{
float3 Diffuse;
float3 Specular;
};
structPointLight
{
float3 position;
float3diffuseColor;
floatdiffusePower;
float3specularColor;
floatspecularPower;
};
Lighting GetPointLight(PointLight light,
float3 pos3D, float3 viewDir, float3 normal )
{
Lighting OUT;
if(light.diffusePower>0)
{
float3lightDir=light.position- pos3D;//3D
position in space of the surface
float distance = length(lightDir);
lightDir=lightDir/ distance;// =
normalize( lightDir );
distance= distance * distance;//This line
may be optimised using Inverse square root
//Intensity of the diffuse light. Saturate
to keep within the 0-1 range.
floatNdotL= dot( normal,lightDir);
float intensity = saturate(NdotL);
// Calculate the diffuse light factoring
in light color, power and the attenuation
OUT.Diffuse= intensity
*light.diffuseColor*light.diffusePower/ distance;
//Calculate the half vector between the
light vector and the view vector.
//This is faster than calculating the
actual reflective vector.
float3 H = normalize(lightDir+viewDir);
//Intensity of the specular light
floatNdotH= dot( normal, H );
intensity=pow(
saturate(NdotH),specularHardness);
//Sum up the specular light factoring
OUT.Specular= intensity
*light.specularColor*light.specularPower/ distance;
}
return OUT;
}
wah agak berat bih bahasannya.. makasih ya gan buat informasinya..
ReplyDeletesama sama kang, semoga bermanfaat.. ^^
Deleteterima kasih atas kunjungannya.. ^^
Click to see the code!
Untuk memasukkan emoticon setidaknya ada satu spasi sebelum kode emoticon.