Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 12 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
12
Dung lượng
464,12 KB
Nội dung
XÂYDỰNGMÔHÌNHXỬLÝSONGSONG,ĐAMÀNHÌNHTRONGKỸTHUẬTĐỒHỌA3D Nguyễn Văn Trường, Nguyễn Công Định Trung tâm Công nghệ Mô phỏng, Học viện KTQS Tóm tắt Trên sở thư viện đồhọa chuyên dụng ta hiển thị nhanh cải thiện chất lượng cảnh đồhọa3D nhờ thuật toán chọn lọc, xếp phân loại số thuật toán khác Bài báo đề cập đến môhìnhxửlý theo chế độđa nhiệm songsong,đahình hiển thị Môhình ứng dụng thư viện mã nguồn mở OpenSG cho phép tối ưu liệu tăng tốc độ hiển thị đồhoạ3D liệu lớn hỗ trợ phát triển nhanh ứng dụngđồhoạ chất lượng cao Từ khóa: songsong,đa luồng, đa hình, đồhọa 3D, mô phỏng, thực ảo Đa nhiệm, hiển thị đa luồng nhiều hình hiển thị theo phương pháp truyền thống: Phương pháp truyền thống hiển thị cảnh đồhọa3D thời gian thực sử dụng ba pha riêng biệt APP, CULL, DRAW: APP làm nhiệm vụ cập nhật liệu động, bao gồm vị trí camera, vị trí đối tượng chuyển động, CULL phụ thuộc vào APP làm nhiệm vụ lọc cảnh xếp đối tượng theo độ ưu tiên khung nhìn để tăng tốc độ hiển thị cảnh đồng thời tùy thuộc vào việc cập nhật vị trí camera, tạo liệu hiển thị theo kiểu danh sách để pha DRAW vẽ cảnh lên hình Quá trình vẽ trình duyệt qua danh sách thông báo cho OpenGL xửlý ta xem hìnhHình 1: Ba pha hiển thị đồhọa thời gian thực Hình - Chia pha thành nhiệm vụ songsong cho hệ thống có nhiều hình hiển thị đồhọaTrong hệ thống có nhiều hình hiển thị đồ họa, CULL DRAW trở nên cần thiết pha sản sinh danh sách hiển thị thực vẽ hình khung nhìn khác Tuy nhiên hệ thống cần pha APP chung để cập nhật liệu Dưới trình tự yêu cầu cần thực theo quan điểm đa nhiệm cho nhiều hình hiển thị Với môhình máy đơn cần xửlý pha theo thời kỳ (APP, CULL0, DRAW0, CULL1, DRAW1, CULL2, DRAW2…) Theo trình tự cần nhiều thời gian để thực khung hình qua trình tự thực pha Để phân nhiệm ta định hai nhiệm vụ sau miêu tả hình 2: Nhiệm vụ thực pha APP nhiệm vụ CULL / DRAW cho hình Với hệ thống đaxử lý, tất nhiệm vụ thực songsongxửlý riêng biệt Hơn nữa, CULL / DRAW chia phần để chạy songsong hệ thống Có hai môhình thực hệ thống xửlýsong song: Chia cắt nhiệm vụ lớn thành nhiều nhiệm vụ nhỏ độc lập để thực songsong nhiệm vụ máy để giảm bớt thời gian xửlý Thực nhiệm vụ lớn songsong máy cho đồng thời gian hệ thống Với hai môhình ta tách pha CULL/DRAW từ pha APP, sau tiếp tục chia pha CULL DRAW thành nhiều nhiệm vụ chạy songsong riêng biệt theo môhình thứ Ghép CULL/DRAW thành nhiệm vụ kép cho hệ thống hiển thị theo môhình thứ hai Nhưng xuất vài vấn đề giai đoạn chạy songsong Trước hết, pha phải xửlý liệu kỳ Nghĩa pha APP phải kết thúc làm việc liệu trước pha CULL Tương tự pha DRAW bắt đầu xửlý liệu mà pha CULL chưa làm việc xong Tuy nhiên, APP không cần phải đợi hai pha CULL DRAW làm việc xong mà xửlý liệu khung hình hệ thống vận hành theo hìnhmô tả Bên cạnh liệu dùng chung hai giai đoạn phải bảo vệ dùng đệm Bên cạnh liệu ghi pha giai đoạn đọc pha chạy songsong hệ thống Điều đòi hỏi cần có hệ thống quản lý liệu lớn để xửlý liệu 3D Đây môhình hãng SGI đưa có hiệu sản phẩm đồhọa hãng hình Nhưng vài năm gần trở lên lạc hậu vài lý sau: Vấn đề thời gian thực, sản phẩm mô yêu cầu độ hiển thị khung hình 60 Hz nghĩa khung hình cần 16.667 mili giây để pha thực xong nhiệm vụ Vào năm 90, SGI phát triển kỹthuậtđồhọa thời gian thực với xửlý đạt yêu cầu hệ thống máy tính có tốc độ thấp so với Trong tốc độđồhọa phụ thuộc nhiều vào hai pha APP CULL Hơn nữa, hệ thống băng thông rộng phát triển giảm bớt thời gian liên thông pha máy chủ máy trạm, với kỹthuậtxửlýđa luồng có kết khả quan Một vấn đề cuối cần thiết yêu cầu thiết bị mô phải đáp ứng tương tác người dùng Vì yêu cầu hình ảnh trực quan sinh động với tốc độ hiển thị thời gian thực Hình - Môhìnhxửlýsongsong "Truyền thống" Cách tiếp cận Các ứng dụngđồhọa3D chất lượng cao chạy phần cứng thời mong muốn có số khung hình 60 cần phải có thời gian xửlý pha Pre - CULL (Có thể hiểu pha APP – theo môhình cũ) CULL nằm khoảng mili-giây đến 3,5 mili-giây để thực khung hình Xét hệ thống xửlý đơn, hình hiển thị Với yêu cầu giảm bớt thời gian pha Pre – CULL CULL, sơ đồ pha có dạng hìnhHình - Bộ xửlý đơn, hình hiển thị theo môhình pha Pre – CULL CULL Qua sơ đồ ta thấy tất pha nằm khung hình, độ trễ giảm khung hình Nhưng pha DRAW chiếm nửa thời gian thực khung hình Các ứng dụngđồhọa có lợi từ đồ thị khung cảnh, mà pha CULL loại bỏ đối tượng không thuộc khung hình cần hiển thị để đưa vào nhánh đồ thị nhằm tối ưu hóa liệu Xét môhìnhđaxửlý với nhiều hình hiển thị Cần phải tận dụng hết lợi ích hệ thống đaxửlý việc sử dụng luồng chạy pha Pre - CULL, pha CULL/DRAW hệ thống Để làm điều giả thiết hai khía cạnh quản lý liệu : 1) Dữ liệu ghi pha Pre –CULL có thuộc tính toàn cục 2) Dữ liệu sinh pha CULL mang tính cục tiếp cận cặp nhiệm vụ CULL/DRAW 3 Ứng dụng thiết kế MôhìnhxửlýsongsongMôhình tổng quát thiết kế theo sơ đồ chung hình 5: Luồng Chính Luồng thực Pre - CULL Khai báo hệ CPU đảm nhiệm nhiệm vụ CULL / DRAW Có thể chạy luồng đơn, luồng riêng biệt phụ thuộc vào môhìnhxửlý chọn từ mục trước Điều xác định hostname hệ thống, tham số định CPU hệ thống làm việc với để hiển thị cảnh Rendering Surface(Trả lại Bề mặt) Đây kết hiển thị đồhọahình máy tính xác định tham số sau: Tên máy trạm nơi thực kết hiển thị đồhọa Host Mànhình hiển thị Display Viewport khung hình hiển thị bên bàn hình hạn chế hình Viewport ảnh hiển thị HìnhMôhìnhxửlýsongsong tổng quát Có hai môhình mục trước đề cập để thực môhìnhđa nhiệm (multi-task), đahình hiển thị đồhọa (multi – display) Sự khác chỗ có định ghép hai pha CULL/DRAW thành hay không Ở đưa hai phương pháp phương pháp có đặc tính riêng Môhình A Môhình ghép hai pha CULL/DRAW thành nhiệm vụ kép miêu tả theo sơ đồhìnhHình 6: Ba pha hiển thị đồhọa thời gian thực theo môhình A Môhình giả thiết khung hình thực theo thứ tự, dùng luồng cho nhiệm vụ kép CULL/DRAW Thời gian tiến trình B C thực theo sơ đồhình Pha Pre – Cull cập nhật liệu động đồ thị khung cảnh Dữ liệu động bao gồm vị trí camera, định vị đối tượng chuyển động bên cảnh, số khung hình thời gian trôi qua, đồng phương tiện quản lý liệu khác Dữ liệu giả thiết liệu toàn cục, cấp phát lấy ứng dụng Như vậy, pha CULL phải đợi Pre – CULL kết thúc tiến trình Khi pha Pre – Cull thực xong báo hiệu cho pha CULL thực CULL đọc liệu động cập nhật, sinh liệu để hiển thị, liệu mang tính cục không cho ứng dụng tiếp cận lấy từ pha DRAW Dữ liệu xửlý phân kỳ Pha DRAW duyệt qua danh sách hiển thị cảnh đồhọaHình Sơ đồ miêu tả quan hệ liệu pha môhình A Môhình B Môhình tách riêng luồng riêng biệt cho hai pha CULL / DRAW hìnhHình 8: Ba pha hiển thị đồhọa thời gian thực theo môhình B Dữ liệu cho môhìnhmô tả theo sơ đồhình sau Hình Sơ đồ miêu tả quan hệ liệu pha môhình B Sơ đồ khác với sơ đồmôhình A dùng luồng cho nhiệm vụ kép CULL/DRAW Ở pha DRAW không duyệt liệu cung cấp pha CULL cách trực tiếp mà qua hai đệm Dữ liệu phát sinh từ pha CULL ghi vào đệm Buffer pha vẽ đọc liệu từ đệm Buffer Khi đồng hai pha CULL DRAW trỏ tới đệm trao đổi Cách tiếp cận yêu cầu phân cảnh pha CULL cần có hai đệm cục bộ, phải bổ sung việc đồng hai pha CULL DRAW Ứng dụng thư viện OpenSG xâydựng sản phẩm mô Hiện có nhiều thư viện đồhọa3D tích hợp thuật toán xửlýsongsong cảnh đồhọa3D thời gian thực cho phép xâydựng sản phẩm mô với liệu lớn Nổi bật thư viện OpenSG www.opensg.org OpenSG hệ thống thư viện mã nguồn mở (LGPL) cho phép sử dụng tự Thư viện chạy hệ điều hành IRIX, Windows Linux Yêu cầu sức mạnh tính toán ứng dụng gần vô hạn - yêu cầu lập trình tính toán chuyên ngành yêu cầu chất lượng cao hiển thị liệu Để làm điều cần phải có sức mạnh siêu máy tính nhóm máy xửlý theo chế songsong Nhưng siêu máy tính đắt tiền nhiều lần Việc dùng nhiều máy tính theo chế songsong ngày quan tâm xâydựng sản phẩm mô Dưới môhình ứng dụng máy theo chế songsongHình 10 – Môhình máy tính theo có chế xửlýsongsong hiển thị hìnhTrong sơ đồ cần ba máy: Máy trạm chạy ứng dụng thực hai pha APP CULL (cập nhật liệu, điều khiển tương tác người máy, thực tính toán mô chuyên ngành.) Hai máy chủ thực pha DRAW nghĩa hiển thị cảnh thông qua hai camera khác mô hai mắt nguời Với thư viện OpenSG ta thực xửlýsongsong 48 máy Hình 11 Một cảnh trả lại hai cửa sổ độc lập Hình ảnh hiển thị cửa sổ: cửa sổ nhỏ cho phép tương tác mô (sự chuyển động chuột hay bàn phím) Hai cửa sổ lại hiển thị cảnh thể hiển thị cửa sổ Để làm điều cần hai chương trình khác ( Client & Server) Dưới toàn mã chương trình rút gọn Chương trình chạy máy trạm // all needed include files #include #include #include #include #include #include #include OSG_USING_NAMESPACE using namespace std; SimpleSceneManager *mgr; NodePtr scene; int setupGLUT( int *argc, char *argv[] ); int main(int argc, char **argv) { #if OSG_MINOR_VERSION > ChangeList::setReadWriteDefault(); #endif osgInit(argc,argv); int winid = setupGLUT(&argc, argv); //this time we'll have not a GLUTWindow here, but this one MultiDisplayWindowPtr multiWindow = MultiDisplayWindow::create(); //set some necessary values beginEditCP(multiWindow); // we connect via multicast multiWindow->setConnectionType("Multicast"); // we want two rendering servers multiWindow->getServers().push_back("Server1"); multiWindow->getServers().push_back("Server2"); endEditCP(multiWindow); //any scene here scene = makeTorus(.5, 2, 16, 16); // and the ssm as always mgr = new SimpleSceneManager; mgr->setWindow(multiWindow); mgr->setRoot (scene); mgr->showAll(); multiWindow->init(); glutMainLoop(); return 0; } void display(void) { //redrawing as usual mgr->redraw(); //the changelist should be cleared - else things //could be copied multiple times OSG::Thread::getCurrentChangeList()->clearAll(); // to ensure a black navigation window glClear(GL_COLOR_BUFFER_BIT); glutSwapBuffers(); } void reshape(int w, int h) { glutPostRedisplay(); } void mouse(int button, int state, int x, int y) { if (state) mgr->mouseButtonRelease(button, x, y); else mgr->mouseButtonPress(button, x, y); glutPostRedisplay(); } void motion(int x, int y) { mgr->mouseMove(x, y); glutPostRedisplay(); } int setupGLUT(int *argc, char *argv[]) { glutInit(argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); int winid = glutCreateWindow("OpenSG"); glutReshapeFunc(reshape); glutDisplayFunc(display); glutMouseFunc(mouse); glutMotionFunc(motion); return winid; } Chương trình chạy máy chủ #include #include #include #include #include OSG_USING_NAMESPACE using namespace std; GLUTWindowPtr window; RenderAction *ract; ClusterServer *server; void display(); void reshape( int width, int height ); int main(int argc,char **argv) { int winid; // initialize Glut glutInit(&argc, argv); glutInitDisplayMode( GLUT_RGB |GLUT_DEPTH | GLUT_DOUBLE); if (!argv[1]){ cout setId(winid); window->init(); //create a new server that will be connected via multicast //argv[1] is the name of the server (at least it should be ) server = new ClusterServer(window,argv[1],"Multicast",""); server->start(); glutMainLoop(); return 0; } void display() { //simply execute the render action server->render(ract); //and delete the change list OSG::Thread::getCurrentChangeList()->clearAll(); } void reshape( int width, int height ) { window->resize( width, height ); } Một số kết Sử dụngmôhình trên, xâydựng thành công môhìnhsongsong,đahình hiển thị nhiều máy Số khung hình đạt 60 fps bảo đảm việc tương tác qua lại người dùng, đáp ứng yêu cầu đạt thiết bị tập lái (Hiện ứng dụng sản phẩm hệ thống tập lái xe BMP-1 TTCN Mô thực Cảnh môđồhọa3D hiển thị hình 12) Hình 12 Cảnh chiều cabin tập lái xe BMP-1 Kết luận Với cách tiếp cận báo sử dụng lợi phần cứng để xâydựngmôhìnhđa nhiệm, songsong,đa luồng đahình hiển thị đồhọaMôhình nêu ứng dụng tốt sản phẩm mô mà cần có liệu lớn đòi hỏi tương tác thời gian thực • Tuy vậy, việc hoàn thiện môhình nêu cần đầu tư thêm nhiều thời gian công sức, tập hợp lực lượng đông đảo cán chyên môn tham gia đội ngũ chuyên gia chuyên ngành Tài liệu tham khảo [1] Open Scenegraph, (Robert Osfield) 2004 www.openscenegraph.org [2] Open SG, (Dirk Reiners) 2000 www.opensg.org [3] Silicon Graphics Inc SGI OpenGL Optimizer Whitepaper http://www.sgi.com/software/optimizer/whitepaper.pdf, 1998 [4] Net Juggler Guide, (Allard, J et al) http://netjuggler.sourceforge.net 2001 [5] MPI: The Complete Reference, (Snir, M et al) MIT Press, 1996 [6] osgVRPN: http://mew.cx/osg/ [7] VRPN: http://www.cs.unc.edu/Research/vrpn/ [8] OpenThread: http://openthread.sourceforge.net 2004 [9] Open Producer : http://Producer.sourceforge.net 2004 ... 8: Ba pha hiển thị đồ họa thời gian thực theo mô hình B Dữ liệu cho mô hình mô tả theo sơ đồ hình sau Hình Sơ đồ miêu tả quan hệ liệu pha mô hình B Sơ đồ khác với sơ đồ mô hình A dùng luồng cho... TTCN Mô thực Cảnh mô đồ họa 3D hiển thị hình 12) Hình 12 Cảnh chiều cabin tập lái xe BMP-1 Kết luận Với cách tiếp cận báo sử dụng lợi phần cứng để xây dựng mô hình đa nhiệm, song song, đa luồng đa. .. chế hình Viewport ảnh hiển thị Hình Mô hình xử lý song song tổng quát Có hai mô hình mục trước đề cập để thực mô hình đa nhiệm (multi-task), đa hình hiển thị đồ họa (multi – display) Sự khác chỗ