LOD ชื่อนี้สำคัญไฉน ?

posted on 19 May 2008 13:06 by azimuth3d  in Programming

หลังจากที่เรา คลุกตัวเองอยู่กับการ Design หน้าตาของ terrain ของเราอยู่นาน คราวนี้เรามาหาวิธีทำให้มันเป็นจริง ในแบบ real time กันดีกว่า

Basic Mesh

วิธีสร้าง mesh จาก heightmap ที่เรามี ก็คือ การสร้าง patch ย่อยๆ ให้มีจำนวนเท่ากับ heightmap ใจแต่ละด้านจำนวน 2n

จาก Wireframe เราจะเห็นครับว่า เราสร้าง mesh ของ terrain อย่่างไรหนึ่ง patch มี 2 polygon ที่เห็นเป็นจุด Vertex แต่ละจุดนั่นเราจะใช้ค่า y จาก heightmap มากำหนดค่า

ดูจากโค้ดข้างล่างเราจะสร้างข้อมุลของ vertex ใน component x และ z โดยการวนลูป


double dStartX = - 100.0;

double dStartZ = -100.0;

const unsigned int uNumPatch = 513;

Vertex patch[uNumPatch ][uNumPatch ];

for(unsigned int i = 0; i < uNumPatch; i++)
{

for(unsigned int j = 0; j < uNumPatch; j++)
{

 

patch[i][j].x = dStartX + i;

patch[i][j].z =dStartZ + j;

patch[i][j].y = heightmap[i][j];

}

}
แค่นี้เราก้ได้ ข้อมุลของแต่่ละ patch แล้วละนะ แต่สำหรับแต่ใช้งานจริง ๆ มันไม่ง่ายแบบนี้นะสิครับ เพราะถ้า Terrain ของเรามีขนาดใหญ่ ซ่ะ ใครๆ ก็อยากให้มันมีขนาดใหญ่ละ พื้นที่แคบ ๆ ไม่สวยงามแน่นอน เวลาเรา render แล้วใช้ความละเอียดปกติ ทำให้โปรแกรมของเราทำงานข้าลง ดงั้นัน้ จึงมีการคิดค้น technique ที่เรียกว่า LOD (Level of Detail) ขึ้น

LOD หรือ Level Of Detail นั่นเป็นเทคนิคที่เราจะเลือกใช้ในการเลือกความละเอียดของ mesh สมัพันธ์กับความจำเป็นที่ต้องใช้งาน อย่างเช่น ถ้า mesh นั่นอยู่ใกล้เราจะใช้ polygon ทั้งหมดในการ render แต่เมื่อมันห่าง ออกไป ไกล ห่างออกไป ไกลซ่ะเหลือเกิน ไปโน่นแล้ว เราจะลดความละเลียดของ mesh ลง โดยใช้ Algorithm หลายๆรูป แบบในการจัดการ งงไหม เนี่ย ถ้าคุณงง คุณไมรู้ เราจะตามไปดู แต่ถ้าคุณเข้าใจที่ผมบ่นมาแล้ว ไม่ต้องดูนะ :P


ภาพยอดฮิตสำหรับการอธิบาย เกี่ยกวับ LOD น้อง bunny กระต่ายน้อยเป็นสัตว์ ตัวแรกที่เค้าใช้ทดลองกันครับ ก็คล้ายกับ Utah Teapot ละนะ :P จากที่เห็น เรามีกระต่ายตัวเดียวแต่ มีหลายๆ Resolution แต่ก็คงรูปร่างเดิมไว้ จากนั้นเราลองเอามาวางในตำแหน่งที่ห่างจากจุดเรามอง เริ่มจากตัวที่มีจำนวน polygon มากที่สุด ไปถึง ตัวที่ ขี้เหร่ ที่สุด ผมเรียกงั้นละนะ (แทบจะไม่ใช่กระต่ายแล้วละ ) พอจะเห็นประโยชณ์ของ LOD ยังละ เมือ่วัตถุอยู่ไกลออกไป เราสามรถใช้ความละเอียดที่ตำ่ลงตามไปด้วยได้ โดยไม่เห็นความเปลี่ยนแปลง

มีถึงวิธิการ ส่วนนี้ยากเข้าขั้นพอสมวรใคร ปวดหัวไปหายาแก้ปวดมากินได้ อนุุญาติ เอ้า ลุยกันต่อ จะเขียนแค่คร่าวๆ นะครับ

Mesh Simplification

ก็ตรงๆ ครับไม่อ้อมค้อม Simply ก็คือทำให้ง่ายขึ้นนั่นเอง การลดความาซับซ้อนของ Mesh ดูจากภาพ

เรียก Edge Collape ครับ เป็นการลบ Edge หรือ เส้้นที่เชื่อมระหว่าง Vertex นั่นละออก ไปซ่ะ

ยิ่งมีอีกหลายวิธีเพื่อที่จะสร้าง LOD ในแต่ละ level อาเหนื่อยคราวหน้ามาว่ากันต่อ ละกันนะครับ ....

 



edit @ 19 May 2008 19:15:41 by azimuth3d

Comment



smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry

Tweet

ไม่เขียนต่อแล้วหรือครับ?

#1 By darkpower (58.8.133.53) on 2009-05-07 15:49