OpenGL ကိုသံုးၿပီး 3D graphic ကမၻာတစ္ခုကို ဖန္တီးမယ္ ဆိုရင္ lighting ဆိုတဲ့ အလင္းကလည္း အေရးၾကီးပါတယ္။ OpenGL နဲ႔မွ မဟုတ္ပါဘူး။ တစ္ျခား ဘယ္ API မွာမဆို အလငး္ေတြနဲ႔ က႑က လည္း အေရးပါပါတယ္။ အခု ကၽြန္ေတာ္ 3D ပါတ္၀န္းက်င္ တစ္ခုမွာ ပါ၀င္လာႏိုင္တဲ့ အဓီက lighting ေတြအေၾကာင္း ကို ေျပာျပခ်င္ပါတယ္။
Computer 3D graphic rendering မွာ သံုးလုိ႔ရတဲ့ light (အလင္း) ေတြ အမ်ိဳးမ်ိဳး ရိွပါတယ္။ တစ္ခု ႀကိဳေျပာခ်င္တာက အလင္းေတြကို စဥ္းစားတယ္ ဆိုတာ 3D world ထဲမွာ ရိွေနတဲ့ object တစ္ခု အတြက္ မူတည္ စဥ္းစားတာ ျဖစ္ပါတယ္။ အလင္း ကိုယ္တိုင္ သက္သက္ကိုပဲ စဥ္းစားေလ့ မရိွပါဘူး။
ပထမဆံုး light အမ်ိဳးအစားက Ambient light ျဖစ္ပါတယ္။ Ambient ဆိုတ့ဲ အတိုင္း အဲဒီ အလင္း အမ်ိဳးအစားက ပါတ္၀န္းက်င္ အႏွံ႔ကေန လာတယ္လို႔ ေျပာလုိ႔ရတဲ့အတြက္ သူ႔ရဲ႕ direction ကို ခန႔္ မွန္းလို႔ မရပါဘူး။ ေနရာအႏွံ႔ကေန ပ်ံ႕ၿပီး ၀င္လာတဲ့ အလင္းမ်ိဳးပါ။ ဒါေၾကာင့္ ambient light မွာ direction မရိွပါဘူး။ 3D object ေပၚမွာလည္း ေနရာအႏွံ႕ က်ေရာက္ႏိုင္ပါတယ္။ ဘယ္ကေန ဘယ္လို လာတယ္ဆိုတာ ခန္႔မွန္းရ ခက္ပါတယ္။ ပါတ္၀န္းက်င္မွာ ရိွေနတဲ့ တစ္ျခား object ေတြက ေနျပန္ ထြက္လာတဲ့ အလင္းမ်ိဳးလည္း ပါႏိုင္ပါတယ္။ ဒါေၾကာင့္ Ambient အလင္းက သူကိုယ္တိုင္ ဘယ္က လာတယ္ဆိုတာ မေျပာႏိုင္သလို object ေပၚကို က်တဲ့ အခါ မွာလည္း direction အားလံုးကို အညီအမွ် ပ်ံ႕ထြက္သြားတတ္ပါတယ္။ ဥပမာ- ပံုမွန္ အခန္း တစ္ခုထဲ မွာ လင္းေနတဲ့ အေျခအေနမ်ိဳးပါ။
ေနာက္ အလင္း အမ်ိဳးအစားက Diffuse light လို႔ ေခၚပါတယ္။ Diffuse light က direction ရိွပါတယ္။ ဒါေပမယ့္ object ေပၚကို က်ေရာက္ၿပီးတဲ့ အခါမွာေတာ့ direction အားလံုးကို အညီအမွ် ပ်ံ႕ႏွံ႔သြား တတ္ပါတယ္။ ဘာထူးျခား သလည္း ဆိုေတာ့ အလင္း ကိုယ္တိုင္ကေတာ့ ဦးတည္ရာဘက္ နဲ႔ position တိတိက်က် ရိွေပမယ့္ အရာ၀တၳဳေပၚကို အလင္း က်ၿပီးရင္ အရပ္မ်က္ႏွာ အားလံုးကို အညီအမွ် ပ်ံ႕တတ္တဲ့ အတြက္ ၾကည့္သူ (eye) က ဘယ္ေနရာမွာပဲ ရိွရိွ အလင္း ပမာဏ ေျပာင္းမသြားပါဘူး။ ဆိုလိုတာက အရာ၀တၳဳ (Object) ရဲ႕ မ်က္ႏွာျပင္ လင္းမယ့္ေနရာကေတာ့ light အေပၚမွာ မူတည္ပါတယ္။ ဒါပေမယ့္ ၾကည့္သူအတြက္ ဘယ္ေနရာကပဲ ၾကည့္ၾကည့္ အဲဒီ အရာ၀တၳဳရဲ႕ မ်က္ႏွာျပင္မွာ အလင္း က်ေရာက္မႈ ပံုစံက အတူတူပဲ လို႔ ခံစားရေစပါတယ္။ Eye point ရဲ႕ position အေပၚမွာ မူတည္ၿပီး ေျပာင္းလဲမႈ မရိွပါဘူး။
Specular light ဆိုတာက်ေတာ့ object ကို အလင္းက်ၿပီးရင္ ျပန္ၿပီး လက္လာတဲ့ ပံုစံမ်ိဳးပါ။ ေျပာင္လက္ တဲ့ အရာ၀တၳဳေတြ (ဥပမာ- စတီးခြက္) လိုမ်ိဳး object ေတြက ျမင့္မားတဲ့ specular component ရိွတယ္လို႔ ေျပာလို႔ ရပါတယ္။ ဒါေၾကာင့္ object တစ္ခုရဲ႕ specularity ဆိုတာ အဲဒီ object ရဲ႕ အလင္းျပန္မႈ မမာဏလို႔ ေျပာလို႔ရပါတယ္။ Specular light ကိုစဥ္းစားတဲ့ ေနရာမွာ object တစ္ခုေပၚ ကို အလင္းက်ၿပီးရင္ အဲဒီ object ကေန ျပန္လက္ ထြက္လာတဲ့ အလင္းမ်ိဳးပါ။ ဒါေၾကာင့္ light ရဲ႕ direction ေပၚလည္း မူတည္သလို၊ object ရဲ႕ specularity (အလင္းျပန္မႈ ပမာဏ) အေပၚမွာလည္း အမ်ားႀကီး မူတည္ပါတယ္။ ၿပီးေတာ့ light direction အေပၚ မူတည္တဲ့ အတြက္ eye point ေျပာငး္သြားရင္ အလင္းျပန္မႈ ပံုစံလည္း ေျပာင္းသြားပါတယ္။
ေနာက္ဆံုး အလင္း အမ်ိဳးအစားကေတာ့ emissive light ပါ။ သူကေတာ့ ရွင္းပါတယ္။ Object ကိုယ္တိုင္က ျပန္ၿပီး ထုတ္လႊတ္တဲ့ပံုစံ အလင္းမ်ိဳးပါ။ ဒါေၾကာင့္ object ရဲ႕ emissive color တန္ဖိုးက အဲဒီ Object ထုတ္လႊတ္မယ့္ light ပမာဏကို သတ္မွတ္ႏိုင္ပါတယ္။ သူက light ဆိုေပမယ့္ object ကိုယ္တိုင္ကပဲ လင္းေနတယ္ လို႔ စဥ္းစားတာမ်ိဳးပါ။ ျပင္ပ တစ္ျခား ပါတ္၀န္းက်င္မွာ ရိွေနတဲ့ အရာ၀တၳဳေတြကို အဲဒီ emissive light က သက္ေရာက္မႈ မရိွပါဘူး။ သူ႔ဘာသာပဲ လင္းေနတယ္ ထင္ရတဲ့ အလင္းမ်ိဳးပါ။
OpenGL မွာ 3D ျမင္ကြင္း တစ္ခုအတြက္ light source ဆိုတဲ့ အလင္း စုစုေပါင္း (၈)ခုအထိ ဖန္တီးလို႔ ရပါတယ္။ အလင္းေတြကို ဖန္တီးၿပီဆိုရင္ အဲဒီ အလင္းရဲ႕ တည္ေနရာ position၊ အဲဒီ အလင္းမွာ direction ရိွမယ္ ဆိုရင္ ဘယ္ direction ကို သက္ေရာက္ေနသလည္း၊ အဲဒီ light source ရဲ႕ color ကေရာ ဘာအေရာင္လည္း၊ ေနာက္ၿပီး ကိုယ္ စိတ္၀င္စားတဲ့ အရာ၀တၳဳ ရဲ႕ အလင္းျပန္မႈ ပမာဏ၊ မ်က္ႏွာျပင္ အေရာင္၊ အလင္းအေပၚမွာ ဘယ္လို တံု႔ျပန္မယ္ ဆိုတဲ့ အခ်က္ေတြ အားလံုးကို ထည့္သြင္း စဥ္းစားဖို႔ လိုပါတယ္။ ဒါမွသာ ၿပီးျပည့္စံုတဲ့ အလင္း ပါတဲ့ 3D ကမၻာတစ္ခုကို ရမွာပါ။
Computer 3D graphic rendering မွာ သံုးလုိ႔ရတဲ့ light (အလင္း) ေတြ အမ်ိဳးမ်ိဳး ရိွပါတယ္။ တစ္ခု ႀကိဳေျပာခ်င္တာက အလင္းေတြကို စဥ္းစားတယ္ ဆိုတာ 3D world ထဲမွာ ရိွေနတဲ့ object တစ္ခု အတြက္ မူတည္ စဥ္းစားတာ ျဖစ္ပါတယ္။ အလင္း ကိုယ္တိုင္ သက္သက္ကိုပဲ စဥ္းစားေလ့ မရိွပါဘူး။
ပထမဆံုး light အမ်ိဳးအစားက Ambient light ျဖစ္ပါတယ္။ Ambient ဆိုတ့ဲ အတိုင္း အဲဒီ အလင္း အမ်ိဳးအစားက ပါတ္၀န္းက်င္ အႏွံ႔ကေန လာတယ္လို႔ ေျပာလုိ႔ရတဲ့အတြက္ သူ႔ရဲ႕ direction ကို ခန႔္ မွန္းလို႔ မရပါဘူး။ ေနရာအႏွံ႔ကေန ပ်ံ႕ၿပီး ၀င္လာတဲ့ အလင္းမ်ိဳးပါ။ ဒါေၾကာင့္ ambient light မွာ direction မရိွပါဘူး။ 3D object ေပၚမွာလည္း ေနရာအႏွံ႕ က်ေရာက္ႏိုင္ပါတယ္။ ဘယ္ကေန ဘယ္လို လာတယ္ဆိုတာ ခန္႔မွန္းရ ခက္ပါတယ္။ ပါတ္၀န္းက်င္မွာ ရိွေနတဲ့ တစ္ျခား object ေတြက ေနျပန္ ထြက္လာတဲ့ အလင္းမ်ိဳးလည္း ပါႏိုင္ပါတယ္။ ဒါေၾကာင့္ Ambient အလင္းက သူကိုယ္တိုင္ ဘယ္က လာတယ္ဆိုတာ မေျပာႏိုင္သလို object ေပၚကို က်တဲ့ အခါ မွာလည္း direction အားလံုးကို အညီအမွ် ပ်ံ႕ထြက္သြားတတ္ပါတယ္။ ဥပမာ- ပံုမွန္ အခန္း တစ္ခုထဲ မွာ လင္းေနတဲ့ အေျခအေနမ်ိဳးပါ။
ေနာက္ အလင္း အမ်ိဳးအစားက Diffuse light လို႔ ေခၚပါတယ္။ Diffuse light က direction ရိွပါတယ္။ ဒါေပမယ့္ object ေပၚကို က်ေရာက္ၿပီးတဲ့ အခါမွာေတာ့ direction အားလံုးကို အညီအမွ် ပ်ံ႕ႏွံ႔သြား တတ္ပါတယ္။ ဘာထူးျခား သလည္း ဆိုေတာ့ အလင္း ကိုယ္တိုင္ကေတာ့ ဦးတည္ရာဘက္ နဲ႔ position တိတိက်က် ရိွေပမယ့္ အရာ၀တၳဳေပၚကို အလင္း က်ၿပီးရင္ အရပ္မ်က္ႏွာ အားလံုးကို အညီအမွ် ပ်ံ႕တတ္တဲ့ အတြက္ ၾကည့္သူ (eye) က ဘယ္ေနရာမွာပဲ ရိွရိွ အလင္း ပမာဏ ေျပာင္းမသြားပါဘူး။ ဆိုလိုတာက အရာ၀တၳဳ (Object) ရဲ႕ မ်က္ႏွာျပင္ လင္းမယ့္ေနရာကေတာ့ light အေပၚမွာ မူတည္ပါတယ္။ ဒါပေမယ့္ ၾကည့္သူအတြက္ ဘယ္ေနရာကပဲ ၾကည့္ၾကည့္ အဲဒီ အရာ၀တၳဳရဲ႕ မ်က္ႏွာျပင္မွာ အလင္း က်ေရာက္မႈ ပံုစံက အတူတူပဲ လို႔ ခံစားရေစပါတယ္။ Eye point ရဲ႕ position အေပၚမွာ မူတည္ၿပီး ေျပာင္းလဲမႈ မရိွပါဘူး။
Specular light ဆိုတာက်ေတာ့ object ကို အလင္းက်ၿပီးရင္ ျပန္ၿပီး လက္လာတဲ့ ပံုစံမ်ိဳးပါ။ ေျပာင္လက္ တဲ့ အရာ၀တၳဳေတြ (ဥပမာ- စတီးခြက္) လိုမ်ိဳး object ေတြက ျမင့္မားတဲ့ specular component ရိွတယ္လို႔ ေျပာလို႔ ရပါတယ္။ ဒါေၾကာင့္ object တစ္ခုရဲ႕ specularity ဆိုတာ အဲဒီ object ရဲ႕ အလင္းျပန္မႈ မမာဏလို႔ ေျပာလို႔ရပါတယ္။ Specular light ကိုစဥ္းစားတဲ့ ေနရာမွာ object တစ္ခုေပၚ ကို အလင္းက်ၿပီးရင္ အဲဒီ object ကေန ျပန္လက္ ထြက္လာတဲ့ အလင္းမ်ိဳးပါ။ ဒါေၾကာင့္ light ရဲ႕ direction ေပၚလည္း မူတည္သလို၊ object ရဲ႕ specularity (အလင္းျပန္မႈ ပမာဏ) အေပၚမွာလည္း အမ်ားႀကီး မူတည္ပါတယ္။ ၿပီးေတာ့ light direction အေပၚ မူတည္တဲ့ အတြက္ eye point ေျပာငး္သြားရင္ အလင္းျပန္မႈ ပံုစံလည္း ေျပာင္းသြားပါတယ္။
ေနာက္ဆံုး အလင္း အမ်ိဳးအစားကေတာ့ emissive light ပါ။ သူကေတာ့ ရွင္းပါတယ္။ Object ကိုယ္တိုင္က ျပန္ၿပီး ထုတ္လႊတ္တဲ့ပံုစံ အလင္းမ်ိဳးပါ။ ဒါေၾကာင့္ object ရဲ႕ emissive color တန္ဖိုးက အဲဒီ Object ထုတ္လႊတ္မယ့္ light ပမာဏကို သတ္မွတ္ႏိုင္ပါတယ္။ သူက light ဆိုေပမယ့္ object ကိုယ္တိုင္ကပဲ လင္းေနတယ္ လို႔ စဥ္းစားတာမ်ိဳးပါ။ ျပင္ပ တစ္ျခား ပါတ္၀န္းက်င္မွာ ရိွေနတဲ့ အရာ၀တၳဳေတြကို အဲဒီ emissive light က သက္ေရာက္မႈ မရိွပါဘူး။ သူ႔ဘာသာပဲ လင္းေနတယ္ ထင္ရတဲ့ အလင္းမ်ိဳးပါ။
OpenGL မွာ 3D ျမင္ကြင္း တစ္ခုအတြက္ light source ဆိုတဲ့ အလင္း စုစုေပါင္း (၈)ခုအထိ ဖန္တီးလို႔ ရပါတယ္။ အလင္းေတြကို ဖန္တီးၿပီဆိုရင္ အဲဒီ အလင္းရဲ႕ တည္ေနရာ position၊ အဲဒီ အလင္းမွာ direction ရိွမယ္ ဆိုရင္ ဘယ္ direction ကို သက္ေရာက္ေနသလည္း၊ အဲဒီ light source ရဲ႕ color ကေရာ ဘာအေရာင္လည္း၊ ေနာက္ၿပီး ကိုယ္ စိတ္၀င္စားတဲ့ အရာ၀တၳဳ ရဲ႕ အလင္းျပန္မႈ ပမာဏ၊ မ်က္ႏွာျပင္ အေရာင္၊ အလင္းအေပၚမွာ ဘယ္လို တံု႔ျပန္မယ္ ဆိုတဲ့ အခ်က္ေတြ အားလံုးကို ထည့္သြင္း စဥ္းစားဖို႔ လိုပါတယ္။ ဒါမွသာ ၿပီးျပည့္စံုတဲ့ အလင္း ပါတဲ့ 3D ကမၻာတစ္ခုကို ရမွာပါ။

0 comments:
Post a Comment