Computer graphic (အထူးသျဖင့္ 3D graphics) ေတြကို ဖန္တီး ပံုေဖၚတဲ့ ေနရာမွာ polygon ေတြကို သံုးၿပီး ဖန္တီး ရပါတယ္။ ၿပီးျပည့္စံုတဲ့ 3D graphic ပံုရိပ္နဲ႔ 3D ကမၻာတစ္ခုမွာ ပါ၀င္ေနတဲ့ အရာေတြ အားလံုး polygon ေတြနဲ႔ အရင္ တည္ေဆာက္ၿပီးမွ အဲဒီ polygon ေတြ တစ္ခုခ်င္းစီမွာ ပဲ ျဖစ္ျဖစ္၊ poly အစု တစ္ခုမွာပဲ ျဖစ္ျဖစ္ texture လို႔ ေခၚတဲ့ 2D ခ်ယ္သမႈ ေတြကို ကပ္ထားတာပါ။ Polygon ေတြမွာ သင့္ေတာ္ သလို texture ကပ္လုိက္မွ ၿပီးၿပည့္စံုတဲ့ 3D ရုပ္ပံု ေတြကို ရတာပါ။
တစ္ကယ္တမ္း ကြန္ပ်ဴတာထဲမွာ 3D API ေတြကို သံုးၿပီး polygon ေတြနဲ႔ အ
လုပ္လုပ္တဲ့ အခါမွာ polygon ရဲ႕ မ်က္ႏွာျပင္ ေတြနဲ႔ ပါတ္သက္ၿပီး စဥ္းစားစရာ ေတြ ရိွလာပါတယ္။ Polygon တစ္ခုကို rendering engine ကေန ပံုေဖၚေတာ့မယ္ ဆိုရင္ ဒဂၤါးျပား တစ္ခုရဲ႕ ေခါင္းနဲ႔ ပန္းလိုပဲ မ်က္ႏွာျပင္ ႏွစ္ဘက္ ပါတယ္လို႔ စဥ္းစားလို႔ ရပါတယ္။ ၿပီးေတာ့ အဲဒီ မ်က္ႏွာျပင္ (surface of polygon) တစ္ခု ခ်င္းစီကလည္း သီးျခားစီလို႔ ေျပာလို႔ ရပါတယ္။ ၾကည့္ေတာ့သာ triangle ေလးက တစ္ခုထဲရယ္။ တစ္ကယ္တမ္း သူ႔မွာ မ်က္ႏွာျပင္ ႏွစ္ခုပါပါတယ္။
3D ပံုတစ္ခုမွာ (ဥပမာ- လူတစ္ေယာက္၊ ကားတစ္စီးပဲျဖစ္ျဖစ္၊ ေနာက္ခံ ပါတ္၀န္းက်င္တစ္ခုပဲ ျဖစ္ျဖစ္) polygon ေတြ အမ်ားႀကီး ပါပါတယ္။ အႏုစိတ္ က်တဲ့ 3D graphic model တစ္ခုမွာ ဆိုရင္ polygon အေရအတြက္ သန္းနဲ႔ ခ်ီၿပီး ပါႏိုင္ပါတယ္။ (အဲ… အဲဒီ 3D model ကုိ ပံုေဖၚမယ့္ geometry engine နဲ႔ rendering engine ကေတာ့ မ်ားျပားတဲ့ polygon အေရအတြက္ကို ကိုင္တြယ္ႏိုင္ဖို႔ လိုတာေပါ့ေနာ္)။
Polygon ေတြ အမ်ားႀကီးနဲ႔ တည္ေဆာက္ထားတဲ့ 3D model တစ္ခုကို rendering လုပ္တဲ့ အခ်ိန္မွာ ျမန္ဆန္ ထိေရာက္မႈရိွေအာင္နဲ႔ processing power ေတြ မလိုအပ္ပဲ မသံုးမိေအာင္ လုပ္လို႔ရတဲ့ နည္းတစ္ခု ရိွပါတယ္။ အဲဒါက ဘာလည္းဆိုေတာ့ ၾကည့္ေနသူ Eye ရိွေနတဲ့ direction ဘက္ကို မ်က္ႏွာမူ (face) လုပ္မေနတဲ့ polygon ရဲ႕ မ်က္ႏွာျပင္ေတြကို ပံုေဖၚဖို႔၊ process လုပ္ဖု႔ိ မစဥ္စားဘူး ဆိုရင္ တစ္ကယ္ rendering မွာ ပိုၿပီး အက်ိဳးရိွႏိုင္ပါတယ္။ ဆိုလိုတာက- ၾကည့္ေနသူက ျမင္ရမွာ မဟုတ္တဲ့ polygon face ေတြကို rendering engine ကို process မလုပ္ခိုင္းဘူးေပါ့။ အဲဒီလို လုပ္တာကို BACK-FACE CULLING လို႔ ေခၚပါတယ္။ Back-face culling ေၾကာင့္ 3D rendering performance တက္လာ ႏိုင္ေစပါတယ္။ Culling ဆိုတာ အလြယ္ေျပာရင္ not drawing လို႔ ေျပာလို႔ ရပါတယ္။
ဥပမာ- 3D ကမၻာတစ္ခု ထဲက တုိက္တစ္ခု ဆိုပါေတာ့။ ကၽြန္ေတာ္တို႔ ၾကည့္ေနသူရဲ႕ ေနရာနဲ႔ direction အေပၚမွာ မူတည္ၿပီးေတာ့ eye vector direction နဲ႔ အတူတူ ျဖစ္ေနတဲ့ surface normal vector ေတြရိွတဲ့ polygon surface ေတြကို ပံုေဖၚစရာ မလိုဘူးေပါ့။ အျပင္မွာဆုိရင္ ကိုယ္မျမင္၇တဲ့ တိုက္ရဲ႕ ေနာက္ဘက္ျခမ္း ပံုစံမ်ိဳးေပါ့။
OpenGL မွာပဲ ျဖစ္ျဖစ္၊ တစ္ျခား graphic rendering API တစ္ခုခု မွာပဲျဖစ္ျဖစ္၊ back-face culling နဲ႔ ပါတ္သက္တဲ့ setting ေတြကို ထိန္းလို႔ ရပါတယ္။ Back-face culling ကို ဘယ္လို ထိန္းမလည္း ဆိုရင္ poly ေတြနဲ႔ surface normal ေတြ အေပၚမွာ မူတည္ၿပီး ထိန္းပါတယ္။ Polygon မ်က္ႏွာျပင္ရဲ႕ surface normal vector က ၾကည့္ေနသူ eye point ရဲ႕ direction မွာ မရိွဘူး (away ကို direct လုပ္ေနတယ္) ဆုိရင္ အဲဒီ polygon face ကို ပံုေဖၚစရာမ လိုဘူးေပါ့။ ဒါေၾကာင့္ back-face culling နဲ႔ အလုပ္လုပ္မယ္ ဆိုရင္ surface normal vector ေတြက အသက္ပါပဲ။
တစ္ကယ္တမ္း ကြန္ပ်ဴတာထဲမွာ 3D API ေတြကို သံုးၿပီး polygon ေတြနဲ႔ အ
3D ပံုတစ္ခုမွာ (ဥပမာ- လူတစ္ေယာက္၊ ကားတစ္စီးပဲျဖစ္ျဖစ္၊ ေနာက္ခံ ပါတ္၀န္းက်င္တစ္ခုပဲ ျဖစ္ျဖစ္) polygon ေတြ အမ်ားႀကီး ပါပါတယ္။ အႏုစိတ္ က်တဲ့ 3D graphic model တစ္ခုမွာ ဆိုရင္ polygon အေရအတြက္ သန္းနဲ႔ ခ်ီၿပီး ပါႏိုင္ပါတယ္။ (အဲ… အဲဒီ 3D model ကုိ ပံုေဖၚမယ့္ geometry engine နဲ႔ rendering engine ကေတာ့ မ်ားျပားတဲ့ polygon အေရအတြက္ကို ကိုင္တြယ္ႏိုင္ဖို႔ လိုတာေပါ့ေနာ္)။
Polygon ေတြ အမ်ားႀကီးနဲ႔ တည္ေဆာက္ထားတဲ့ 3D model တစ္ခုကို rendering လုပ္တဲ့ အခ်ိန္မွာ ျမန္ဆန္ ထိေရာက္မႈရိွေအာင္နဲ႔ processing power ေတြ မလိုအပ္ပဲ မသံုးမိေအာင္ လုပ္လို႔ရတဲ့ နည္းတစ္ခု ရိွပါတယ္။ အဲဒါက ဘာလည္းဆိုေတာ့ ၾကည့္ေနသူ Eye ရိွေနတဲ့ direction ဘက္ကို မ်က္ႏွာမူ (face) လုပ္မေနတဲ့ polygon ရဲ႕ မ်က္ႏွာျပင္ေတြကို ပံုေဖၚဖို႔၊ process လုပ္ဖု႔ိ မစဥ္စားဘူး ဆိုရင္ တစ္ကယ္ rendering မွာ ပိုၿပီး အက်ိဳးရိွႏိုင္ပါတယ္။ ဆိုလိုတာက- ၾကည့္ေနသူက ျမင္ရမွာ မဟုတ္တဲ့ polygon face ေတြကို rendering engine ကို process မလုပ္ခိုင္းဘူးေပါ့။ အဲဒီလို လုပ္တာကို BACK-FACE CULLING လို႔ ေခၚပါတယ္။ Back-face culling ေၾကာင့္ 3D rendering performance တက္လာ ႏိုင္ေစပါတယ္။ Culling ဆိုတာ အလြယ္ေျပာရင္ not drawing လို႔ ေျပာလို႔ ရပါတယ္။
ဥပမာ- 3D ကမၻာတစ္ခု ထဲက တုိက္တစ္ခု ဆိုပါေတာ့။ ကၽြန္ေတာ္တို႔ ၾကည့္ေနသူရဲ႕ ေနရာနဲ႔ direction အေပၚမွာ မူတည္ၿပီးေတာ့ eye vector direction နဲ႔ အတူတူ ျဖစ္ေနတဲ့ surface normal vector ေတြရိွတဲ့ polygon surface ေတြကို ပံုေဖၚစရာ မလိုဘူးေပါ့။ အျပင္မွာဆုိရင္ ကိုယ္မျမင္၇တဲ့ တိုက္ရဲ႕ ေနာက္ဘက္ျခမ္း ပံုစံမ်ိဳးေပါ့။
OpenGL မွာပဲ ျဖစ္ျဖစ္၊ တစ္ျခား graphic rendering API တစ္ခုခု မွာပဲျဖစ္ျဖစ္၊ back-face culling နဲ႔ ပါတ္သက္တဲ့ setting ေတြကို ထိန္းလို႔ ရပါတယ္။ Back-face culling ကို ဘယ္လို ထိန္းမလည္း ဆိုရင္ poly ေတြနဲ႔ surface normal ေတြ အေပၚမွာ မူတည္ၿပီး ထိန္းပါတယ္။ Polygon မ်က္ႏွာျပင္ရဲ႕ surface normal vector က ၾကည့္ေနသူ eye point ရဲ႕ direction မွာ မရိွဘူး (away ကို direct လုပ္ေနတယ္) ဆုိရင္ အဲဒီ polygon face ကို ပံုေဖၚစရာမ လိုဘူးေပါ့။ ဒါေၾကာင့္ back-face culling နဲ႔ အလုပ္လုပ္မယ္ ဆိုရင္ surface normal vector ေတြက အသက္ပါပဲ။

0 comments:
Post a Comment