2.3.1. Giới thiệu
Kỹ thuật này sử dụng Mass-Springs (MS) hỗ trợ mô phỏng các sợi dưới các hình dạng, chuyển động khác nhau từ rất cong đến thẳng, từ sợi rất ngắn đến sợi rất dài và từ sợi rất mảnh đến sợi rất dày,… Mô phỏng các hiệu ứng khác nhau có trên sợi từ hiệu ứng wind, gravity và damping. Với mỗi sợi riêng lẻ sẽ được
xây dựng mô hình bằng một bề mặt hình trụ NURBS xoắn với n điểm điều khiển. Kết thúc của một sợi tóc sẽ được cố định trên bề mặt của plane, torus và hình cầu. Lực Mass-Spring sẽ điều khiển (thao tác) với các phần còn lại của mỗi sợi. Thực chất sự chuyển động của mỗi sợi sẽ được xác định bởi sự cứng rắn và độ dài rest của mỗi spring giữa các điểm điều khiển và mass của mỗi điểm điều khiển, cũng như là các lực bên ngoài.
2.3.2. Một số kỹ thuật cơ bản
Mass – spring được sử dụng để tạo ra hoạt cảnh. Bề mặt hình trụ NURBS xoắn dùng để xây dựng mô hình sợi riêng lẻ. Sợi được xây dựng trên một mặt phẳng (plain), hình cầu và torus. Giới hạn góc rest, độ dài mỗi phần, số sợi, độ dày của mỗi sợi, cũng như: trọng lực, gió thổi, tóc thấm ướt (damping) thì được người dùng tự động lựa chọn.
* Pipeline:
Đối với pipeline trong hệ thống này: Thứ nhất, hình dạng cơ sở (cơ bản) được
lựa chọn; thứ hai, kiểu (messy hoặc combed), độ dày, giới hạn độ dài và giới hạn
góc rest mỗi phần của sợi được lựa chọn; Thứ ba, các spring và particle cho hệ thống mass-spring được tạo ra; Thứ tư, các lực bên ngoài (gravity, wind và
damping) được chọn; Thứ năm, các điểm điều khiển của các sợi được rút (trích) sau
mỗi lần lặp đi lặp lại của hệ thống mass-spring; Cuối cùng, các bề mặt ngoài hình
trụ NURBS xoắn được xây dựng và render.
* Hình dạng cơ sở:
Để xây dựng mô hình sợi trên một mặt phẳng, trước hết cần một mặt phẳng đề xây dựng mô hình sợi trên đó. Ở đây, 3 hình dạng cơ sở được sử dụng: plain, torus và sphere. Trong đó: Sphere và torus xây dựng mô hình bằng bề mặt NURBS, plain xây dựng mô hình chỉ dựa vào việc biểu diễn các đa giác.
Hình 2.14: Các hình dạng cơ sở (a) plain; (b) sphere; (c) torus
2.3.3. Thuật toán
2.3.3.1. Hệ thống mass-spring
Trước tiên, các spring được tạo và sau đó là các particle. Mỗi vòng lặp của hệ
thống massy-spring thì được thực hiện với một giải thuật Euler sửa đổi.
Ở đây, chỉ có các spring tuyến tính mới được sử dụng. Chúng được xây dựng dựa trên cơ sở số lượng tóc được nhìn thấy. Độ dài rest của các spring thì dựa vào giới hạn độ dài được lựa chọn trước đó.
Sau khi các spring được xây dựng thì các particle thực tế được tạo ra. Các particle thì được chia ra n particle cho mỗi sợi, với điều kiện n=8. Particle đầu tiên của mỗi sợi thì được cố định trên bề mặt. Các particle còn lại trong sợi này thì lớn lên ra ngoài về hướng bình thường của hình dạng cơ sở. Độ quăn và độ dài của mỗi particle này được xác định dựa trên giới hạn độ dài và góc rest được lựa chọn trước đó. Mass của mỗi particle thì được thiết lập tới 1 (tập hợp tới 1). Các véctơ lực và vận tốc của mọi particle thì được thiết lập tới 0.
Thuật toán 1: Mô tả quá trình xây dựng các particle.
COPYV(particles[i*parts].p , surf[k]); MAKEV(particles[i*parts].v, 0.0f, 0.0f, 0.0f) MAKEV(particles[i*parts].f, 0.0f, 0.0f, 0.0f) for (j=1..parts) MAKEV(particles[i*parts+j].v, 0.0f, 0.0f, 0.0f) MAKEV(particles[i*parts+j].f, 0.0f, 0.0f, 0.0f) if (nx==0) particles[i*parts+j].p.x=
randomp(restang)+particles[i*parts].p.x; else particles[i*parts+j].p.x= -nx*randomp(leng)+particles[i*parts+j-1].p.x; if (ny==0) particles[i*parts+j].p.y = randomp(restang)+particles[i*parts].p.y; else particles[i*parts+j].p.y = -ny*randomp(leng)+particles[i*parts+j-1].p.y; if (nz==0) particles[i*parts+j].p.z = randomp(restang)+particles[i*parts].p.z; else particles[i*parts+j].p.z = -nz*randomp(leng)+particles[i*parts+j-1].p.z; 2.3.3.2. Các lực ngoài
Người dùng lựa chọn lực ngoài, như: gravity, wind và damping. Wind và gravity thay đổi hướng với mười lần vòng lặp của hệ thống mass-spring.
Giải thuật tiếp theo, cho phép lực được thêm vào thực sự đối các lực bên trong của mỗi particle mà nó không cố định trên bề mặt. Ở lực thứ nhất của mỗi particle được thiết lập tới 0, sau đó nếu particle này không cố định trên bề mặt thì lực wind và gravity được thêm vào.
Thuật toán 2: Mô tả quá trình thêm lực vào mỗi particle
For (i=0 ... particles)
MAKEV(particles[i].f, 0.0f, 0.0f, 0.0f) if (particles[i].fixed) continue;
ADDV(particles[i].f, wind);
particles[i].f.y +=gravity *particles[i].m;
2.3.3.3. Các điểm điều khiển
Mỗi sợi riêng lẻ sẽ được xây dựng mô hình bằng bề mặt hình trụ NURBS xoắn
với n điểm điều khiển, độ 2 và chia thành 20x20. Mỗi hình trụ này gồm một độ dày
và độ dài nhất định. Một đường tròn xác định bề dày của sợi hình trụ này. Trước
được tạo ra. Sau đó, các điểm nút v đối với các điểm điều khiển đường tròn này được tạo ra.
Hình 2.15. Độ dày của mỗi sợi với 9 điểm điều khiển.
Độ xoắn của sợi thì được xác định bởi vòng lặp hiện thời của hệ thống mass-
spring. Các điểm nút u được tính dựa trên nhiều particle mà sợi đó chưa đựng. Một
khi trong trường hợp, một sợi chỉ gồm có 8 particle thì chỉ có 12 điểm nút u.
Sau khi tất cả các điểm điều khiển được rút cho mỗi sợi, thì sợi đó được render như là một bề mặt hình trụ NURBS xoắn.
Thuật toán 3: Mô tả quá trình xác định điểm điều khiển
For (i=0 … parts) For (j=0 … 9)
MAKEV( cp[i*9+j],
ADDV( particles[k*parts+i].p, circle))
Hình 1.16. Các điểm điều khiển mass-spring trên bề mặt hình trụ NURBS xoắn
2.3.3.4. Mô hình NURBS xoắn
Mô hình NURBS xoắn được sử dụng để biểu diễn các sợi có dạng hình trụ với các điểm điều khiển mass-spring.
Một NURBS surface có p độ theo hướng u và q độ theo hướng v được xác định như sau: n i m j q j p i n i m j j i q j p i v N u N P v N u N v u S 0 0 j i, , , 0 0 , j i, , , W ) ( ) ( W ) ( ) ( ) , ( Trong đó:
{Pi,j} được xác định từ một lưới điều khiển bi-directional, {Wi,j} là trọng lượng,
{Ni,p(u)} và {Nj,q(v)} là các hàm cơ sở B-Spline vô tỷ (non-rational) được xác định dựa trên các véctơ điểm nút (điểm trung tâm) như sau:
1 1 1 p 1 p } 1 ,..., 1 , ,..., u , 0,...,0 { p p r u U với r = n+p+1 1 1 1 q 1 q } 1 ,..., 1 , ,..., v , 0,...,0 { q q s v V với s= m+q+1
Như vậy, trên cơ sở sử dụng kỹ thuật mô phỏng Mass-Springs thì những sợi khác nhau, những thuộc tính ràng buộc khác nhau được thiết lập và lựa chọn để tạo ra những kiểu khác nhau phù hợp với từng yêu cầu cụ thể. Chẳng hạn như khi muốn mô phỏng sợi có những thuộc tính khác nhau: số sợi, độ lớn, độ dài, không có ngoại lực,… được thiết lập và lựa chọn khác nhau để mô phỏng sợi. Khi mô phỏng sợi mà
chưa có ngoại lực tác động thì sợi sẽ thẳng theo hướng vectơ pháp tuyến p. Để tạo ra
những kiểu sợi gần giống thực tế thì cần có ngoại lực tác động (gió, trọng lực,…), việc lựa chọn giá trị cho ngoại lực thường tuỳ theo độ lớn sợi (to, nhỏ) khác nhau mà ta có thể lựa chọn các thông số khác nhau.
2.4. Kết luận và vấn đề nghiên cứu
Mô phỏng sợi là một trong những nhiệm vụ quan trọng trong hệ thống mô phỏng trong thực tại ảo, vì đối tượng dạng sợi có thể sử dụng vào trong nhiều đối tượng ảo như sợi tóc, sợi vải,... trên con người ảo. Trong mô phỏng sợi, yêu cầu không những phải đảm bảo chất lượng hình ảnh mà còn phải đáp ứng yêu cầu về tốc
độ xử lý. Trong chương này, luận văn đã trình bày ba kỹ thuật nghiên cứu cho mô phỏng sợi, cụ thể:
Kỹ thuật mô phỏng sợi dưới dạng ảnh dựa vào phân chia mô hình 3D thành các vùng tương ứng và kỹ thuật ánh xạ, nhằm khắc phục hiện tượng biến dạng trong quá trình ánh xạ từ ảnh sợi 2D lên các vùng mô hình 3D tương ứng. Kỹ thuật này phù hợp cho mô phỏng tóc ngắn (tóc nam giới), tóc bám sát bề mặt da đầu và áp dụng trên con người hay nhân vật ảo.
Kỹ thuật mô phỏng sợi sử dụng mô hình NURBS và đề xuất nâng cao kỹ
thuật mô phỏng NURBS nhằm tăng tốc độ mô phỏng, thể hiện tính cục bộ của sợi dựa vào giảm miền ảnh hưởng của các điểm điều khiển lên một điểm đang xét.
Kỹ thuật mô phỏng Mass-Springs thì những sợi khác nhau, những thuộc
tính ràng buộc khác nhau được thiết lập và lựa chọn để tạo ra những kiểu khác nhau phù hợp với từng yêu cầu cụ thể. Chẳng hạn như khi muốn mô phỏng sợi có những thuộc tính khác nhau: số sợi, độ lớn, độ dài, không có ngoại lực,… được thiết lập và lựa chọn khác nhau để mô phỏng sợi
Chương 3
CHƯƠNG TRÌNH THỰC NGHIỆM 3.1. Yêu cầu bài toán
Mô phỏng đối tượng dạng sợi là một công việc hết sức quan trọng và cần thiết trong thực tại ảo, vì đối tượng có hình dạng sợi có thể sử dụng để mô hình hóa và mô phỏng cho nhiều đối tượng khác trong môi trường ảo trên các nhân vật ảo như sợi tóc trên con người ảo, sợi lông trên các nhân vật ảo, sợi vải, sợi tơ,… Tuy nhiên, mỗi sợi khi thể hiện trên những đối tượng khác nhau lại có những đặc tính, thuộc tính thể hiện khác nhau như to, nhỏ, mật độ, cong, thẳng, xoắn, có ngoại lực tác động như gió, ướt,… nên khi mô phỏng chúng thì chúng ta cần phải thể hiện được tất cả những thuộc tính đó sao cho đảm bảo giống với thực tế. Trong phạm vi nghiên cứu của đề tài, luận văn tiến hành việc mô phỏng đối tượng dạng sợi, mảnh trong thực tại ảo, mà tập trung vào mô phỏng thử nghiệm sợi tóc.
Bài toán mô phỏng sợi (tóc) theo hướng như sau:
+ Đầu vào (Input): Bằng cách thu thập, nghiên cứu các thông tin, hình ảnh sợi, các thuộc tính của các sợi tóc, mảnh tóc thông qua các nguồn dữ liệu.
+ Đầu ra (Output): Mô phỏng sợi tóc với một số những thuộc tính khác nhau như: to, nhỏ, mật độ, cong, thẳng, xoắn, có ngoại lực tác động như gió, ướt,….
3.2. Phân tích, lựa chọn công cụ
Để xây dựng hệ thống mô phỏng sợi, thực hiện 2 pha chính :
Thứ nhất là tạo mô hình 3D : Có rất nhiều phần mềm công cụ cho việc tạo mô hình 3D như Maya, 3DSMax, LightWare,… Song, hai phần mềm phổ biến nhất là Maya và 3DSMax. Hai phần mềm này đều là những chuẩn 3D. Ở Việt Nam 3DSMax quen thuộc hơn Maya. Nhưng xu thế trên thế giới các công ty chuyển sang Maya mạnh hơn. Mô hình với Maya cho kích thước nhẹ hơn so với 3DSMax. Hiện tại phiên bản mới nhất của Maya là 2015 và 3DSMax là 2016.
Maya, 3DSMax cũng như các phần mềm tạo mô hình 3D khác giúp tạo mô hình 3 chiều mô phỏng thế giới thực. Nó có các đối tượng nguyên thuỷ như hình cầu, hình trụ, hình hộp, mặt phẳng, đường cong,… Từ các đối tượng nguyên thuỷ
này, ta sử dụng các thao tác như dịch chuyển, xoay, co giãn cùng với các kỹ thuật chỉnh sửa như cắt xén, mở rộng, thêm bớt …để tạo nên đối tượng mong muốn trong thế giới thực. Sau đó các đối tượng sẽ được thêm xương (nếu có), tính chất bề mặt (như màu sắc, da, tóc, mắt,…) và được tạo các chuyển động mô phỏng một cách sinh động các thể hiện của đối tượng trong thế giới thực.
Thứ hai là lập trình điều khiển mô hình : Hệ thống mô phỏng thử nghiệm mô phỏng sợi tóc thông qua sử dụng ngôn ngữ lập trình C++, thư viện đồ hoạ OpenSG và thư viện mã nguồn mở.
Khi làm việc với các phần mềm ta sẽ thao tác trên 4 khung nhìn khác nhau của đối tượng, 4 khung nhìn này sẽ cho ta nhìn được đối tượng ở các góc độ khác nhau một cách đồng thời, hình ảnh sau đây minh họa điều này :
Hình 3.1. Các khung nhìn khác nhau trên 3DSMax
Ta có hệ trục tọa độ 3 chiều XYZ, màu xanh lam ứng với trục Y, đỏ với trục X và xanh đậm với trục Z. Góc trên phải là khung làm việc cho phép ta thao tác trong 3 chiều, 3 góc còn lại cho phép ta làm việc ở 3 mặt cắt của mô hình. Với các
khung nhìn này ta có thể thao tác dễ dàng hơn, khi một thay đổi xuất hiện ở một khung nhìn sẽ cho hiệu ứng đối với các khung nhìn khác.
Bên cạnh hệ trục tọa độ XYZ ta còn có hệ tọa độ UV, hệ tọa độ UV bao bọc bề mặt theo 2 chiều trái sang phải và dưới lên trên. Có thể hình dung ra hệ tọa độ này như là các đường kinh tuyến và vĩ tuyến của trái đất. Hệ tọa độ này chủ yếu được sử dụng trong quá trình thêm tính chất bề mặt cho mô hình.
3.3. Một số kết quả của chương trình thử nghiệm
3.3.1. Kết quả thử nghiệm kỹ thuật mô phỏng sử dụng NURBS
Với lựa chọn công cụ là phần mềm 3DSMax và ngôn ngữ lập trình C++, thư viện đồ họa OpenSG và mã nguồn mở với các thuật toán kỹ thuật xử lý ảnh. Sau đây là kết quả thu được khi mô phỏng mô hình 3D về sợi tóc trên máy tính.
Mô phỏng một số đối tượng có hình dạng sợi, mảnh dựa vào mô hình NURBS
Hình 3.3. Xác định vectơ nút ứng với trường hợp tối ưu
Trên cơ sở có mô hình sợi tóc, chúng ta cần biểu diễn tóc hay các kỹ thuật nâng cao chất lượng biểu diễn tóc sao cho phù hợp với từng ứng dụng. Ví dụ: trong giải trí, thường không yêu cầu cao về chất lượng hình ảnh mà chủ yếu yêu cầu về tốc độ xử lý.
Tiếp theo, trình bày một ứng dụng cụ thể về mô phỏng tóc trên nhân vật con người với một số chức năng như: thiết lập số lượng sợi tóc, mảnh tóc, kích thước của mỗi sợi, bó tóc, độ dài và số điểm điều khiển mỗi sợi cũng như thêm vào các ràng buộc như: sức gió, lực hấp dẫn và trọng lực, màu sắc,.. trên cơ sở những nghiên cứu và đề xuất trên.
Sử dụng công cụ 3DS MAX, MAYA để tạo mô hình nhân vật cũng như thiết kế và định nghĩa các vùng cho phù hợp như: vùng mặt, vùng tóc, lông mày, lông my, vùng râu, vùng ria, …trên mô hình con người ảo.
+ Mô hình đầu được thiết kế từ 3DS MAX:
+ Mô hình đầu được lưu trữ với định dạng: *.WRML, *.LWO
Vì mỗi một định dạng (*.WRML, *.LWO,) lại có cách tổ chức và lưu trữ dữ liệu khác nhau, tùy thuộc từng định dạng mà có cách load khác nhau, vì vậy một yêu cầu tối thiểu trong quá trình load các file này vào chương trình là phải nắm rõ được cấu trúc cũng như cách tổ chức dữ kiệu của từng định dạng, từ những hiểu biết đó mới có thể làm chủ được các định dạng này.
Hình 3.2. Minh họa mô hình render tổng thể
+ Tiếp theo, sử dụng ngôn ngữ lập trình như VC++ kết hợp với các thư viện đồ họa như OpenGL để load mô hình, điều khiển và tiến hành mô phỏng tóc trên các mô hình đã thiết kế này. Load một mô hình vào chương trình thực chất là việc lấy các thông số về tọa độ các điểm của mô hình trong không gian 3 chiều, các thông tin về màu sắc, ánh sáng,...
Xác định các bề mặt (Faces) đã được định nghĩa trong khi thiết kế mô hình, mỗi một bề mặt là tập hợp của nhiều đa giác. Mỗi một đa giác thường được cấu thành từ các thành phần nguyên thủy như: vertex, nomal, color…. , ở đây cần quan tâm nhiều đến Vertex chính là một điểm hay một đỉnh của một đa giác. Một Vertex sẽ quan tâm tới hai thành phần đó là: position và một vector nomal. Nếu chỉ sử dụng các position được định nghĩa sẵn từ mô hình thì thử hình dung: mỗi người