Đề tài Tìm hiểu quá trình phát triển của hoạt hình 3D và cách thức xây dựng các plug-In hỗ trợ cho phần mềm 3D Maya
Quy trình làm phim hoạt hình 3D
Hoạt hình hiện nay được chia thành 3 loại chính dựa vào cách thức thực
hiện: dạng cel, stop-motion và hoạt hình 3D có sử dụng máy tính.
Hoạt hình dạng cel (được lấy tên từ loại giấy celluloid thường được sử dụng
khi vẽ các hình ảnh) là hoạt hình 2D. Những hình ảnh liên tiếp được vẽ bằng
tay bởi họa sĩ thông qua một bề mặt phẳng nào đó hoặc thông một môi trường
máy tính. “Gia đình Simpsons” là một ví dụ về loại phim hoạt hình này.
Hình 12 - The Simpsons Hình 13 - Wallace & Gromit
Hoạt hình dạng stop-motion (hay còn gọi là frame-by-frame) có thể là hoạt
hình 2D hoặc 3D tùy thuộc vào từng mục đích cụ thể. Đây là một kỹ thuật giúp
cho các đối tượng tĩnh có thể chuyển động khi quay. Những đối tượng này dịch
chuyển một khoảng cách rất nhỏ giữa các frame liên tiếp, tạo ra hiệu ứng
chuyển động khi phim được phát lại, cũng giống như phim hoạt hình được tạo
ra bằng cách vẽ tay tất cả các hình ảnh mô tả chuyển động.
Claymation cũng là một dạng của hoạt hình stop-motion. Dạng này yêu cầu
rất nhiều những bức ảnh chụp mô tả những chuyển động khác nhau rất nhỏ
trong một cảnh. Điểm khác nhau căn bản ở đây chính là cách sử dụng những
mô hình nhân vật là các mô hình như búp bê. Claymatino thường là hoạt hình
3D bao gồm các mô hình 3D được chạm khắc rồi đặt trong một cảnh 3D.
Wallace & Gromit là một ví dụ rất điển hình về loại phim hoạt hình stopmotion.
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tải về để xem bản đầy đủ
Tóm tắt nội dung tài liệu: Đề tài Tìm hiểu quá trình phát triển của hoạt hình 3D và cách thức xây dựng các plug-In hỗ trợ cho phần mềm 3D Maya
Trường Đại Học Bách Khoa Hà Nội Khoa Công nghệ thông tin ----- ----- BÁO CÁO THỰC TẬP TỐT NGHIỆP Đề tài: Tìm hiểu quá trình phát triển của hoạt hình 3D và cách thức xây dựng các plug-in hỗ trợ cho phần mềm 3D Maya Giáo viên hướng dẫn: Lê Tấn Hùng Sinh viên thực hiện: Nguyễn Thị Thương Huyền Lớp: CNPM – K47 Hà Nội, 2/2007 Báo cáo thực tập tốt nghiệp Nguyễn Thị Thương Huyền – Lớp Công Nghệ Phần Mềm K47 1 Mục lục Mục lục................................................................................................................................ 1 Danh mục các hình ............................................................................................................. 2 Lời mở đầu .......................................................................................................................... 3 Phần I – Quá trình phát triển của hoạt hình 3D................................................................. 4 1. Lịch sử xuất hiện và quá trình phát triển của hoạt hình 3D trên thế giới ............... 4 2. Quá trình phát triển của sản xuất phim hoạt hình 3D ở Việt Nam và những kết quả đạt được ........................................................................................................................... 8 3. Những khó khăn trong quá trình sản xuất phim hoạt hình ở Việt Nam và cách khắc phục ...................................................................................................................... 12 Phần II – Quy trình và các kỹ thuật bổ sung cho quá trình làm phim hoạt hình 3D ........ 16 1. Quy trình làm phim hoạt hình 3D ......................................................................... 16 2. Một số công cụ trong quá trình sản xuất phim hoạt hình ..................................... 21 2.1 Bộ mô hình hóa ............................................................................................. 21 2.2 Bộ biên tập chất liệu ..................................................................................... 23 2.3 Bộ tạo cảnh ................................................................................................... 26 2.4 Bộ render ....................................................................................................... 29 3. Phương thức xây dựng những plug-in hỗ trợ cho Maya ....................................... 30 3.1 Maya API ...................................................................................................... 30 3.2 Đưa một plug-in vào Maya ........................................................................... 31 3.3 Xây dựng một plug-in ................................................................................... 32 3.4 Ví dụ xây dựng một plug-in đơn giản ........................................................... 34 Phần III – Tài liệu và các trang web tham khảo............................................................... 36 Báo cáo thực tập tốt nghiệp Nguyễn Thị Thương Huyền – Lớp Công Nghệ Phần Mềm K47 2 Danh mục các hình Hình 1 - Phenakistoscope – Joseph Plateau, 1832 .............................................................. 4 Hình 2 - Humorous phases of funny faces; nhà sản xuất và thiết kế, J. Stuart Blackton ... 5 Hình 3 - Gertie, the dinosaur............................................................................................... 5 Hình 4 - Steamboat Willie .................................................................................................. 6 Hình 5 - Toy story 1995 ...................................................................................................... 7 Hình 6 - Tron 1982 ............................................................................................................ 7 Hình 7 - Final Fantasy X ..................................................................................................... 7 Hình 8 - Chuyện hai chiếc bình (2003) ............................................................................... 9 Hình 9 - Voi và vẹt (2004) .................................................................................................. 9 Hình 10 - Giấc mơ của ếch xanh (2005) ........................................................................... 11 Hình 11 - Happy feet (2006 ) ............................................................................................ 15 Hình 12 - The Simpsons ................................................................................................... 16 Hình 13 - Wallace & Gromit ............................................................................................ 16 Hình 14 - Lưu đồ thực hiện ............................................................................................... 17 Hình 15 – Storyboard ........................................................................................................ 18 Hình 16 - Hình lục giác và khi kéo dài ............................. ... p Nguyễn Thị Thương Huyền – Lớp Công Nghệ Phần Mềm K47 29 Các gói phần mềm 3D khác nhau thường đưa ra những khuynh hướng sử dụng khác nhau về những nguồn sáng cơ bản này cũng như các loại nguồn sáng khác đã được bổ sung vào hệ thống 3D của họ. Một vài nguồn sáng có thể làm cho các đối tượng có những loại bóng đổ khác nhau. Một số nguồn sáng khác đưa ra các ánh xạ kết cấu vô hướng được sử dụng như là các bộ lọc ánh sáng để biến đổi cường độ của ánh sáng trên một bề mặt 3D. Trong các bộ phim cũng như trong các sản phẩm video, sự xuất hiện cuối cùng của các cảnh phim rất phụ thuộc vào cách thức nhà làm phim tạo ánh sáng cho cảnh. Và những cách thức chiếu sáng này lại phụ thuộc vào những thuộc tính của rất nhiều chất liệu được áp lên bề mặt của các đối tượng trong cảnh. Bất kỳ một thành phần nào của cảnh cũng đều có thể được biến đổi hình dạng để tạo nên sự đa dạng. Trong bộ mô hình hóa, các đối tượng có thể được bẻ cong, nén lại, cuộn lại và các thao tác khác để tạo nên các hình dạng phức tạp nhưng các kết quả sẽ được gán vào những đặc tính của đối tượng. Trong một chương trình dùng để tạo cảnh, các thao tác giống nhau có thể được thực hiện khi tạo hình một đối tượng nhưng chúng chỉ được lưu lại khi một trong các thao tác đó được chọn. Việc điều khiển cách thức chuyển động trong một chương trình tạo cảnh là rất quan trọng. Thậm chí là khi các đối tượng không tồn tại trong thực tế, nếu chuyển động của chúng không giống thật, mọi người có thể phát hiện ra dễ dàng. Nhà làm phim xác định các chuyển động và các giá trị khác thông qua các đường cong và các frame chính. Các đường cong chuyển động được thể hiện thông qua một đồ thị. Trục ngang của đồ thị thể hiện thời gian để chuyển động được thực hiện. Trục đứng của đồ thị thể hiện giá trị về vị trí của chuyển động đó. Một đối tượng chuyển động theo ba chiều, quay theo ba trục và sẽ yêu cầu không ít hơn 6 đường cong để miêu tả những chuyển động này. Nếu đối tượng bị vặn xoắn, uốn cong hay các phép biến đổi khác, cần phải bổ sung thêm các đường cong khác. Khi chú ý đến việc xử lý chất liệu, màu sắc, sự phản xạ, độ trong suốt và sự chiếu sáng sẽ tiết kiệm được thời gian thực hiện cũng như tạo được những hiệu ứng như ý muốn. Các loại kết cấu màu sắc, va chạm và vô hướng có thể được áp vào các bề mặt tạo các bề mặt mong muốn. Phần lớn các thuộc tính của ánh sáng có thể được xử lý qua các tham số về màu sắc, cường độ và khoảng cách cường độ giảm dần để tạo ra những hiệu ứng ánh sáng nhấp nháy, sáng chói hoặc lung linh. Tất cả những hiệu ứng này, và rất nhiều các hiệu ứng hoạt hình khác sẽ được thực hiện với sự tham gia của các đường cong và các frame chính thông qua chương trình tạo cảnh. Bộ render Một khi dự án đã được xử lý qua chương trình tạo cảnh, công việc của nhà làm phim gần như hoàn thành và bộ phim sẵn sàng được render. Quá trình Báo cáo thực tập tốt nghiệp Nguyễn Thị Thương Huyền – Lớp Công Nghệ Phần Mềm K47 30 render là một quá trình tự động thông qua các câu lệnh của phần mềm làm phim để tính toán mỗi bức ảnh liên tiếp trong phim. Kết quả cuối cùng là một dãy liên tiếp các bức ảnh được lưu trữ trong máy tính. Dãy các ảnh này có thể được chuyển đổi sang dạng mong muốn. Giả sử rằng bộ render sử dụng đưa ra được những kết quả tốt, thì mục đích lớn nhất lúc này là tốt độ xử lý. Thời gian là tiền bạc, đặc biệt trong lĩnh vực kinh doanh các sản phẩm 3D. Không phải tất cả các công việc liên quan đến hoạt hình đều yêu cầu khả năng render với số lượng nhiều và một số công việc có thể chỉ yêu cầu render một số cảnh nào đó trong vài phút. Mặt khác, các hình ảnh chuyển động giống như trong phim “Truy tìm Nemo” có thể phải yêu cầu hàng trăm máy tính có cấu hình mạnh để render trong vòng chỉ vài tuần hoặc vài tháng. Trên đây chỉ là một số kỹ thuật cơ bản nhất hiện nay trong việc sản xuất phim hoạt hình nói riêng cũng như tạo ra các sản phẩm 3D nói chung. Có thể thấy rằng hoạt hình 3D không phải dễ dàng thực hiện mà yêu cầu rất nhiều kỹ năng kết hợp với nhau cả về kỹ thuật lẫn nghệ thuật. Có thể so sánh làm phim hoạt hình 3D giống như việc lái xe. Cần phải biết hàng trăm thứ mới có thể điều khiển được nó. Nhưng dù có khó khăn đến đâu, kỹ thuật làm phim hoạt hình 3D đã khẳng định được vị trí của mình khi những bộ phim như “Shrek”, “Truy tìm Nemo”, “Happy feet” ... lần lượt ra đời. 3. Phương thức xây dựng những plug-in hỗ trợ cho Maya Maya là một phần mềm có khả năng mở rộng. Điều đó có nghĩa là các cá nhân hoặc các tổ chức khác có thể thay đổi các thành phần hiện có và thêm vào các đặc tính hoàn toàn mới. Maya đã cung cấp hai cách thức thay đổi. Cách thứ nhất là sử dụng ngôn ngữ kịch bản. Đây là một cách thức dễ dùng, dễ học và tạo ra được những tính năng mạnh mẽ. Phần lớn những thao tác cần thực hiện đều có thể được điều khiển thông qua ngôn ngữ kịch bản. Cách thứ hai là thông qua API (Application Programmer Interface). Sử dụng API cho phép cung cấp một hiệu năng lớn hơn mà ngôn ngữ kịch bản không thể cung cấp được (mã nguồn được viết sử dụng API sẽ thực hiện nhanh gấp 10 lần so với mã nguồn sử dụng ngôn ngữ kịch bản) và cung cấp khả năng cho phép thêm các đối tượng mới vào Maya. Maya API Maya API là những API viết bằng C++ cho phép truy nhập vào các thành phần bên trong của Maya. Nó đã được đóng gói tạo nên một tập hợp các thư viện tương ứng với những thành phần chức năng khác nhau của Maya. Các thư viện bao gồm: OpenMaya – Thư viện này chứa các lớp cơ bản để định nghĩa các node và các câu lệnh, đồng thời còn dùng để kết hợp chúng vào trong một plug-in. Báo cáo thực tập tốt nghiệp Nguyễn Thị Thương Huyền – Lớp Công Nghệ Phần Mềm K47 31 OpenMayaUI – Thư viện này chứa các lớp cần thiết để tạo mới các thành phần giao diện người dùng như menu ngữ cảnh, các công cụ thao tác, các công cụ để định vị vị trí. OpenMayaAnim – Thư viện này chứa các lớp để giải quyết các vấn đề về tạo hình ảnh động, bao gồm cả việc làm biến dạng và đảo ngược chuyển động. OpenMayaFX – Thư viện này chứa các lớp để giải quyết vấn đề với các lực động học. OpenMayaRender – Thư viện này chứa các lớp để thực hiện các chức năng render. Đưa một plug-in vào Maya Trước khi bắt tay vào viết một plug-in cho Maya, bạn cần biết cách thức để load một plug-in vào Maya.Có hai cách để load và unload một plug-in. Cách đầu tiên và là cách dễ nhất là sử dụng Plug-in Manager có sẵn ở Windows -> General -> Editors -> Plug-in Manager (hoặc Windows -> Settings/Preferences -> Plug-in Manager trong Maya 8.0). Plug-in Manager sẽ sử dụng biến môi trường MAYA_PLUG_IN_PATH để định vị những plug-in có thể load. Trong UNIX, biến này là một danh sách các thư mục chứa các plug-in được phân cách bằng dấu hai chấm “:”. Trong Windows NT, MAYA_PLUG_IN_PATH nằm trong registry và những thư mục được ngăn cách bằng dấu chấm phẩy “;”. Biến này có thể được thay đổi bằng cách sử dụng MayaEnviroment.exe Cách thứ hai là thông qua câu lệnh loadPlugin của MEL như trong ví dụ sau loadPlugin “hello”; Câu lệnh này sẽ tìm kiếm trong danh sách của MAYA_PLUG_IN_PATH để tìm file tên là hello.so trong Unix và file tên là hello.mll trong nền NT. Nếu được tìm thấy, nó sẽ được load vào Maya như là một plug-in. Unload một plug-in trong MEL là một vấn đề đơn giản bằng cách sử dụng câu lệnh unloadPlugin kèm theo tên của plug-in đó.Lưu ý rằng một plug-in cần phải được unload trước khi nó được biên dịch lại. Trước khi bạn unload một plug-in, bạn cần phải xóa hết tất cả các tham chiếu từ các cảnh của Maya đến nó. Trong suốt quá trình xóa các node từ các cảnh được định nghĩa bởi plug-in cần xóa, cần phải cân bằng các tham chiếu từ các node bị xóa và các câu lệnh được thực hiện từ hàng đợi của lệnh undo. Nếu bạn vẫn thực hiện unload một plug-in trong khi nó đang được sử dụng, lúc đó bạn không thể load lại được các node đã sử dụng plug-in này. Nguyên nhân là do các node đang tồn tại trong cảnh sẽ được chuyển sang thành node có dạng “Unknown”. Và cả khi plug-in này được unload, bạn cũng không được phép thay đổi kiểu của các node đang tồn tại. Báo cáo thực tập tốt nghiệp Nguyễn Thị Thương Huyền – Lớp Công Nghệ Phần Mềm K47 32 Xây dựng một plug-in Các bước sau đây áp dụng cho Microsoft Visual C++ 2005 để xây dựng plug-in cho Maya. Bước 1: Tạo một project Visual C++ 1. Chọn File -> New 2. Chọn tab Projects 3. Chọn tùy chọn Win32 Project 4. Điền tên plug-in của bạn vào phần Project Name 5. Điền tên thư mục và đường dẫn nơi bạn muốn project của bạn được tạo ra trong trường Location 6. Click OK Một hộp thoại xuất hiện. Chọn tùy chọn Application type là DLL Báo cáo thực tập tốt nghiệp Nguyễn Thị Thương Huyền – Lớp Công Nghệ Phần Mềm K47 33 Bước 2: Thêm các file vào project mà bạn vừa tạo ra 1. Chọn Project ->Add To Project ->Files 2. Sử dụng hộp thoại để định vị vị trí các file cho plug-in của bạn 3. Click OK Những file này đã được add vào project 4. Lặp lại với những file thêm vào trong những thư mục khác. 5. Nếu đây là một plug-in mới, bạn có thể sử dụng File New và lựa chọn kiểu file C++ để tạo ra một file C++ mới cho plug-in của bạn. Bước 3: Thêm một số thông số và thư mục chứa vào project 1. Chọn Project -> Plugin Property 2. Trong box lựa chọn, chọn All Configurations 3. Trong phần Configuration Properties chọn C/C++ 4. Trong các mục của C/C++ chọn Preprocessor 5. Thêm WIN32;NDEBUG;_WINDOWS;NT_PLUGIN vào list của Preprocessor Definitions 6. Trong mục General của C/C++, chọn Additional Include Directories 7. Thêm đường dẫn thư mục include của Maya vào phần này. Nếu plug-in của bạn được đặt trong thư mục C:\Program Files\Alias\Maya8.0\devkit\plug-ins, bạn có thể sử dụng cấu trúc ..\..\include Nếu không, bạn cần để cả đường dẫn đầy đủ C:\Program Files\Alias\Maya8.0\include 8. Trong phần CommandLine của C/C++, thêm vào Additional Options các tham số sau: /I "C:\Program Files\Alias\Maya8.0\include" 9. Click OK để lưu lại sự thay đổi Bước 4: Thêm các thư viện vào project 1. Chọn Project -> Plugin Property 2. Trong box lựa chọn, chọn All Configurations 3. Trong phần Configuration Properties chọn Linker 4. Trong mục Input, chọn Additional Dependencies và thêm opengl32.lib Foundation.lib OpenMaya.lib OpenMayaUI.lib OpenMayaAnim.lib OpenMayaFX.lib OpenMayaRender.lib 5. Trong mục General, chọn Output File và thay đổi từ .dll thành .mll 6. Trong mục CommandLine, chọn mục Additional Options và thêm vào /LIBPATH:" C:\Program Files\Alias\Maya8.0\lib" 7. Click OK để lưu lại thay đổi Bước 5: Chọn thư viện runtime thích hợp 1. Chọn Project -> Plugin Property 2. Trong box lựa chọn, chọn All Configurations 3. Trong phần Configuration Properties chọn C/C++ Báo cáo thực tập tốt nghiệp Nguyễn Thị Thương Huyền – Lớp Công Nghệ Phần Mềm K47 34 4. Trong các mục của C/C++ chọn Code Generation 5. Trong mục Runtime Library, chọn Multi-threaded DLL (/MD) 6. Click OK để lưu lại thay đổi Ví dụ xây dựng một plug-in đơn giản Khi học một ngôn ngữ mới, chương trình đầu tiên bạn thường thấy là chương trình “Hello World”. Theo truyền thống ấy, plug-in đầu tiên là một plug-in “Hello World”. Plug-in này đơn giản chỉ là hiển thị dòng “Hello World” trên cửa sổ khi Maya được mở. Mã nguồn của chương trình #include DeclareSimpleCommand( helloWorld, "Alias|Wavefront", "2.0"); MStatus helloWorld::doIt( const MArgList& ) { printf("Hello World\n"); return MS::kSuccess; } Đoạn chương trình này được lưu trong file tên là helloWorld.cpp. Nó sẽ được biên dịch qua các bước như phần 7.3. Sau đó sẽ được load vào Maya như hướng dẫn ở phần 7.2. Gõ “helloWorld” vào trong cửa sổ lệnh, dùng phím Enter để thực hiện lệnh và trên của sổ output, bạn sẽ thấy “Hello World” được hiển thị. Chú ý rằng bạn cần phải unload plug-in một lần nữa trước khi biên dịch lại. Từ ví dụ trên có thể thấy một số đặc điểm quan trọng như sau: MSimple.h Đây là một file header đặc biệt được sử dụng cho những plug- in có lệnh đơn giản. Nó sẽ phụ trách những công việc cần thiết để đăng ký câu lệnh mới với Maya thông qua macro DeclareSimpleCommand. MStatus Đây là một lớp được sử dụng bởi API để chỉ rõ sự thành công hay thất bại của một phương thức. Phần lớn các phương thức trong các lớp API trả về mã trạng thái thông qua MStatus và những thông tin cho mỗi phương thức được thể hiện chi tiết qua các giá trị trạng thái được trả về. Để tránh sự đụng độ về không gian tên với các mã trạng thái khác, tất cả các giá trị MStatus được bắt đầu bằng MS, ví dụ như MS::kSuccess là một mã trạng thái thành công. Danh sách đầy đủ được chứa trong MStatus.h. API chỉ sử dụng một số ít các mã trạng thái. Tuy nhiên, nếu như lỗi logging được cho phép trong API thông Báo cáo thực tập tốt nghiệp Nguyễn Thị Thương Huyền – Lớp Công Nghệ Phần Mềm K47 35 qua MGlobal::startErrorLogging() thì những chi tiết vễ lỗi sẽ được xuất ra file error log khi một phương thức trả về một giá trị khác với MS::kSuccess. DeclareSimpleCommand Như lưu ý ở trên thì macro DeclareSimpleCommand() giúp bạn không phải viết những đoạn mã đăng ký để cho phép Maya nhận file của bạn như là một plug-in. Tuy nhiên để làm cho đơn giản, nó không cho phép bạn xác định một phương thức undo cho câu lệnh của bạn, vì thế bạn không thể tạo ra các câu lệnh có khả năng undo thực sự khi sử dụng macro này. Những câu lệnh không cung cấp chức năng undo sẽ không thay đổi được trạng thái của cảnh. Chúng có thể được sử dụng để truy vấn những thông tin về cảnh nhưng không thể thay đổi được các thông số đó. Nếu một câu lệnh không có khả năng undo được lại thay đổi được các thông số, khả năng undo của Maya sẽ bị phá vỡ. Macro DeclareSimpleCommand yêu cầu 3 tham số: tên của class sẽ được sử dụng để thực hiện lệnh, tên của nhà cung cấp (hoặc tác giả) của lệnh và version của lệnh. MArgList Lớp MArgList cung cấp các chức năng tương tự như các tham trị, tham biến vào của một chương trình C hay C++, cung cấp một danh sách các đối số cho hàm của bạn. Lớp này cung cấp các phương thức để nhận các tham số với các kiểu khác nhau, bao gồm cả integer, double, string, vector... Một điểm khác biệt quan trọng giữa việc sử dụng tham biến/tham trị và một MArgList là phần tử đầu tiên của MArgList là tham số đầu tiên trong lệnh chứ không phải là tên của lệnh như trong một chương trình viết bằng C hay C++. Trên đây chỉ là một số đặc điểm cơ bản về cấu trúc khi viết một API cho Maya. Để viết được một plug-in hoàn chỉnh thì còn cần rất nhiều kiến thức cũng như kinh nghiệm khác nữa. Báo cáo thực tập tốt nghiệp Nguyễn Thị Thương Huyền – Lớp Công Nghệ Phần Mềm K47 36 Phần III – Tài liệu và các trang web tham khảo Understanding 3D Animation Using Maya – John Edgar Park Maya at a Glance – George Maestri ml aniamtion.273
File đính kèm:
- de_tai_tim_hieu_qua_trinh_phat_trien_cua_hoat_hinh_3d_va_cac.pdf