Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
Mình tóm gọn kỹ thuật làm demo như sau: hiện nay có 2 trường phái chính như sau: Một: tìm cách tối ưu toàn bộ data dùng trong demo (model+texture+music+scene data) càng nhiều càng tốt, cái này điển hình là demo 7thHeaven. Hai: Sinh toàn bộ các dữ liệu model+texture trong demo, music và scene data (dữ liệu scene, cho biết lúc nào vẽ cái gì, làm cái gì, etc...) và tìm cách nén tối đa, loại này phổ biến hiện nay, cái fr08 GL114 gởi lên là ví dụ đó đó.
Music: Cái dễ nói trước, music thì dùng nhạc MIDI (file *.mid), loại âm thanh này lưu nốt nhạc nên nhỏ xíu, bạn tìm mấy file của Windows có sẵn mà xem, vài kb mà nghe được khá lâu, giống như bạn chơi organ, chỉ lưu nốt nhạc và giai điệu (rythm) có kèm theo gam... Bạn nào chơi nhạc thì biết. Nén tối đa, khoảng 2~5k cho một bản nhạc nho nhỏ.
Scene Data: Cái này thì khó giải thích, nhưng mà bạn nghĩ thử xem, demo thường được viết bằng các trình đồ hoạ, người lập trình sẽ viết vài function và procedure, sau đó dùng các hàm này như script để vẽ scene. Nói đơn giản, scene data được ém vào ngay trong chương trình. Cái này khi dịch sẽ thành mã máy, nhanh vô cùng, nhỏ vô cùng, ko cần tối ưu gì cho mệt.
Model: Như đã nói ở trên, có 2 trường phái ém, trường phái đầu tiên tìm cách mô hình một hình thể càng đơn giản càng tốt (để tiết kiệm đó mờ, giả sử một model khoảng 500 poly thì cần ~750 vertex, tính ra khoảng 750x3x2(toạ độ mỗi vertex cần 3 thông số, mỗi thông số là số thực cần 2 bytes để lưu), như vậy mất khoảng 4k cho một model như vậy, chưa kể texture và normal vector, nhân lên ta có 12k là ít nhất cho một texture. Waste 12k is not an option!!! Vì vậy, các demo ko dùng một model đầy đủ nào hết, toàn bộ là model thu gọn (giả sử một model hình viên thuốc chỉ bao gồm dữ liệu chiều cao viên thuốc, bán kính bo, đường kính và quan trọng nhất là mã để sinh các vertex của viên thuốc đó, 7thHeaven dùng cách này để lưu các model, nếu bạn để ý kỹ, tất cả các model của demo này đều dùng các primitive đơn giản và thực hiện toán tử Boolean lên nó, đối với một engine raytrace, việc render mí cái này là chuyện nhỏ (7thHeaven viết engine raytrace bằng Assemble!!!). Đối với fr08 thì mọi chuyện phức tạp hơn, họ dùng các phép toán hình học tự nhiên để sinh toàn bộ model (bạn có thể ko tin điều này, nhưng đó là sự thực, các model của the farbrausch chỉ lưu một số thông tin rất ít (như các toà nhà, vật thể cụ thể... mới cần lưu mà thôi). Một số model trong các demo của the farbrausch (con két, đèn đường…) nhìn rất đơn giản và đẹp tuy theo họ chỉ nói là khoảng vài chục vertex mỗi model, tức khoảng 50 poly cho mỗi model, một số model đơn giản có thể đơn giản bằng primitive cho tiện. Tuy nhiên điểm hay nhất của the farbrausch là sinh các model recursion, hay các model fractal, tức các mô hình tự định nghĩa và mô hình gồ ghề (ví dụ cụ thể như cây cối-mô hình tự định nghĩa, và terrain-mô hình gồ ghề). Các mô hình này được xây dựng thuần tuý toán học nên chẳng cần lưu model làm gì hết. Tóm lại, đối với các demo, các model thường được tối ưu hết cỡ, do đó theo ý tôi chiếm đến 8kb là hết cỡ.
Texture: Phần này do GL114 hỏi, và đương nhiên là phần dễ gây thắc mắc nhất. Mình cũng chia thành 2 trường phái như trên, đó là cách dùng texture có sẵn được tối ưu và cách dùng các texture tự sinh bằng các hàm toán học. Texture tối ưu là cách làm của 7thHeaven, họ tối ưu tất cả các texture có trong demo (kích thước texture 128x128x8bit). Bạn thử tìm một hình nào đó, rescale nó về kích thước này, giảm quality xuống còn 30-60% thì kích thước chỉ còn 1-2kb. 7thHeaven dùng cách này để lưu khoảng chừng 10 texture vào chương trình (bạn thử đếm xem họ xài mí texture?). Chỉ có họ mới dám làm cách này bởi vì engine render của họ là tự xây dựng nên mã khá nhỏ, dư nhiều chỗ trống. Nhưng cũng phải công nhận là họ tối ưu tốt thật, hình người liên hoàn xuất hiện ở đầu demo khoảng 8 hình mà cũng chỉ có chưa đến 2kb mà thôi. the farbrausch thì khác, họ tự sinh texture. Bạn để ý thấy đoạn loading ở đầu demo là họ đang sinh texture đó, lúc đó mà chặn thread coi thì sẽ thấy demo này đang ăn khoảng vài chục MB bộ nhớ, đó là texture được sinh ra đó. Hiện nay giải thuật sinh texture phổ biến nhất là kỹ thuật Perlin Noise, dùng các nhiễu để tạo các hình ảnh ngẫu nhiên khá tốt. Bạn có biết khói, marble và wood texture trong 3dsmax là dùng Perlin Noise để tạo không? Vì vậy, nếu bạn có thể làm được texture gì với 3 chức năng đó của 3dsmax thì các demo cũng làm được. Hồi đầu mình cũng hơi nghi ngờ khả năng của nó nhưng cho đến lúc làm được vài cái Perlin Noise thì mới hiểu rõ. Perlin Noise ngoài tạo texture còn có thể làm được đủ thứ trên đời, như mô phỏng các hiện tượng ngẫu nhiên hay mô phỏng ứng xử. Bạn có thể lên trang web của Ken Perlin để xem một số áp dụng của ông (bạn đã thấy 3D trong trình duyệt Web chưa? Nếu chưa thì nên vào xem thử. Và tất cả các model và texture trong trang web này hầu hết được tự sinh!!!). Đây là link http://mrl.nyu.edu/~perlin/
Hiện nay, the farbrausch đang đứng đầu danh sách 64kdemo bằng 3 giải nhất liên tiếp trong 3 năm. Trong số các demo của nhóm này, demo poem to a horse là demo mình thích nhất, đây có thể xem là một demo trình diễn các model và texture tự sinh đẹp và hấp dẫn nhất. Các hình ảnh render giả raytrace y như thật. Tất cả cũng chỉ trong 64k. Mình gởi kèm cho các bạn xem thử.
Nói tóm lại, mình cảm thấy đã giải thích khá chi tiết, tuy có hơi khó hiểu. Thế giới demo đồ hoạ là một thế giới vô cùng hấp dẫn (đối với mình). Bạn nào có hứng thú thì trao đổi với mình thêm các kỹ thuật lập trình đồ hoạ, như một số hiệu ứng trong các demo trên đây.
Nó dọa đấy anh ạ Có lẽ 100% hình ảnh là vector - dựng từ phương trình (kiểu như fraction fracxiếc gì đấy), âm thanh có lẽ cũng phải có định dạng đặc biệt (em nghe kỹ thấy chỉ có một số kiểu tiếng nhất định thôi)Khu Quốc Dũng đã viết:Đúng là cực kỳ ấn tượng. Đoạn cuối của cái fr08 nó còn bật mí kích thước thực sự của file khi bung ra là 1.9G tức là file đã "nén" lại được 30.000 lần. Khiếp thật.