Shading & Optical View Kelompok 6 : >Reyinhart Dennisen. P. M >Suci Muliani
Normal Vector o Normal vector adalah vector yang arahnya tegak lurus pada luasan (face). o Normal vector dapat diperoleh dari perkalian silang (cross-product) dari dua vector yang berada pada face. N=v1×v2
v2 face
v1
Unit Vector o Unit Vector adalah vector yang besarnya adalah satu satuan dan arahnya tergantung arah vector asalnya. o Besar suatu vector dapat diperoleh dengan o Agar vector v menjadi unit vector maka semua koefisien (vx,vy,vz)
Implementasi Unit Vector
vector3D_t unitVector(vector3D_t vec) { int i; float vec2=0.; float vec1,invvec1; for(i=0;i<3;i++) vec2+=vec.v[i]*vec.v[i]; vec1=sqrt(vec2); if (vec1!=0.) { invvec1=1./vec1; for (i=0;i<3;i++) vec.v[i]*=invvec1; } vec.v[3]=1.; return vec; }
Optical Model o Optical model adalah model yang meng-gambarkan bagaimana vectorvector yang berhubungan dengan pencahayaan di-nyatakan.
Illuminant
Normal Vector to the Reflection Vector Plane Eye
N L Light Vector
R V
α
α
View Vector
β P
Direction Vectors |L| = |N| = |R| = |V| = 1
Macam – macam optical model : Diffuse Scattering Specular Reflection Ambient Lambert’s Law Phong Model
Diffuse Scattering o Model optical yang paling sederhana adalah Diffuse Scattering, dimana cahaya dari arah light vector disebarkan ke segala arah pada face secara merata
Illuminant
Light Vector
Normal Vector to the Plane L
Eye
N
α
Diffuse Scatter P
Dimana : Id = Is kd MAX(cosα,0) cosα = L . N Id Is kd
: Intensity of the diffuse component : Intensity of the Light Source : Diffuse reflection coeffisient
Specular Reflection o Model specular reflection adalah model optik yang menyatakan bahwa cahaya yang mengenai face akan dipantulkan secara spherical searahIlluminant vector refleksinya. Normal Vector to the Plane Reflection N VectorR V View L Light α α Vector Vector β P
Eye
Model specular reflection dinyatakan dengan:
dapat
Isp = Is ksp MAX(cosn β,0) cos β = R . V R = 2N(L . N) – L Isp Reflection Is : ksp : n : 200)
:
Intensity
of
the
Specular
Intensity of the Light Source Specular Reflection coeffisient constant from experiment (1-
R = 2N(L . N) – L ♦ L . N = R . N, R = aL + bN L . N = (aL + bN) . N b = (1 – a) L . N R = aL + {(1 – a) L . N} N R2 = 1, (L2 = 1, N2 = 1) then a = ±1 → a = –1
Ambient o Ambient adalah keadaan dimana cahaya refleksi mengalami pengurangan tingkat kecerahan. Model ambient ini dapat dinyatakan dengan : Ia = Is ka Ia : Intensity of the Ambient Reflection Is : Intensity og the Light Source ka : Ambient reflection coeffisient
Lambert’s Law o Lambert Law adalah model optik yang menggabungkan diffuse scattering dan peristiwa ambient secara bersama-sama sehingga diperoleh model sebagai berikut : CL = Cs { kd MAX(cosα,0)+ka } cos α = L . N CL Cs
: Reflection Color : Surface Color
Phong Model o Phong model adalah model optik yang lengkap, dimana kejadian diffuse scattering, specular reflection dan peristiwa ambient digabungkan menjadi satu model. Model phong dapat dinyatakan dengan : CL = Cs { kd MAX(cosα,0)+ka } + Cwhite ksp MAX(cosn β,0) cos α = L . N cos β = R . V R = 2N(L . N) – L CL : Reflection Color Cs : Surface Color Cwhite : Specular Color (white)
Implementasi Phong Model color_t PhongModel(vector3D_t Light,vector3D_t
Normal, vector3D_t View,color_t col) { float kspe=0.7; //specular reflection coefficient float kdif=0.6; //diffuse reflection coefficient float kamb=0.4; //ambient light coefficient float tmp,NL,RV; color_t ColWhite={1,1,1}; vector3D_t ReflectionVector=(2.*(Light*Normal)*Normal)-Light; tmp=Normal*Light; NL=funcPositive(tmp); tmp=ReflectionVector*View; RV=funcPositive(tmp); return kdif*NL*col+kspe*power(RV,4)*ColWhite+kamb*col; }
Wireframe Model o Wireframe model adalah suatu cara pemodelan obyek 3D yang paling sederhana. Objek yang dimodelkan akan digambar seperti jaring – jaring jala. Wireframe model berisi sekumpulan titik (vertex) dan sekumpulan rusuk (edge) yang menghu-bungkan setiap pasang titik. Misalnya ada titik 1, 2 dan 3. Kemudian rusuk pertama menghubungkan titik 1 dan titik 2 sedangkan rusuk 2 menghubungkan
o Bisa dikatakan bahwa wireframe model menyimpan obyek 3D dalam dua daftar, yaitu daftar vertex dan daftar edge. Daftar vertex menyimpan informasi titik – titik pembentuk permukaan obyek dan daftar edge menyimpan relasi antar titik. Kedua daftar ini disimpan secara terpisah tetapi tetap menjadi satu kesatuan sehingga hanya bisa diakses untuk menggambar suatu
Shading o Efek shading, yaitu efek pewarnaan tingkat kecerahan setiap face yang terdapat pada objek gambar sehingga objek gambar tersebut akan terlihat nyata atau tidak. o Efek shading ini menggunakan optical model sebagai sarana perhitungannya.
Flat Shading o Flat shading adalah salah satu teknik shading, dimana satu face mempunyai warna yang sama, seperti terlihat pada gambar berikut :
o Flat shading menggunakan model phong untuk optical view
Implementasi Flat Shading if(NormalVector.v[2]>0.) { NormalVector=unitVector(NormalVector); fillcol=PhongModel(LightVector,NormalVector,ViewVec tor,col); fillPolygon(p,bola.fc[i].NumberofVertices,fillcol); }
• col adalah variabel warna, yang menyatakan warna dasar dari objek
Gouraud Shading o Gouraud shading mempunyai gradasi warna yang memperhitungkan tingkat kecerahan setiap titik pada face tersebut. o Degan teknik shading ini didapatkan warna yang halus gradasinya. o Shading ini memerlukan vector normal pada setiap titiknya dan menggunakan fungsi gradatePolygon untuk menyatakan gouraud shading.
Implementasi Gouraud Shading for (i=0;i<sphere.NumberofVertices;i++) { vec[i]=Point2Vector(sphere.pnt[i]); vec[i]=mat*vec[i]; nrmvec[i]=mat*sphere.NormalVector[i]ZeroVector; }
Teknik penggambaran objek 3D menggunakan gouraud shading adalah sebagai berikut : Setiap titik yang terdapat pada objek harus didefinisikan vector normalnya terlebih dahulu. Vector normal setiap titik akan menye-suaikan arahnya berdasarkan matriks trans-formasi yang dikenakan pada titik
Implementasi Gouraud Shading if (0.<normalzi) { for (j=0;j<sphere.fc[i].NumberofVertices;j++) { buff[j]=Vector2Point2D(vecbuff[j]); NormalVector=unitVector(nrmvecbuff[j]); colbuff[j]=PhongModel(LightVector,NormalVector,View Vector,ColCyan); } gradatePolygon(buff,colbuff,sphere.fc[i].NumberofVe rtices); }
Dimana : Jumlah warna pada setiap face sama dengan jumlah titik yang terdapat pada face