Bài viết do Bullno1 viết tại diễn đàn GameDevVN
Homepage: http://irrlicht.sourceforge.net
Irrlicht là cái giống gì? Ăn đc ko ?
Đây là một engine opensource đc phát triển chính bởi nikolaus và đồng bọn. Nó có ưu điểm là cross-platform(Windows, linux,mac, playstation 2,32-bit, 64-bit), cross-api(DirectX,OpenGL,software) .Cách sử dụng thì không thể đơn giản hơn:
Code:
#include <irrlicht.h>//include một cái header
#pragma(lib,"irrlicht.lib") //link một cái lib
using namespace irr;

int main()
{
        // start up the engine
        IrrlichtDevice *device = createDevice(video::EDT_DIRECT3D8,
                core::dimension2d<s32>(640,480)); //khởi tạo engine

        video::IVideoDriver* driver = device->getVideoDriver();
        scene::ISceneManager* scenemgr = device->getSceneManager();

        device->setWindowCaption(L"Hello World!");

        // load and show quake2 .md2 model
        scene::ISceneNode* node = scenemgr->addAnimatedMeshSceneNode(
                scenemgr->getMesh("quake2model.md2")); // load model của quake 2

        // if everything worked, add a texture and disable lighting
        if (node)
        {
                node->setMaterialTexture(0, driver->getTexture("texture.bmp"));
                node->setMaterialFlag(video::EMF_LIGHTING, false);
        }

        // add a first person shooter style user controlled camera
        scenemgr->addCameraSceneNodeFPS(); //tạo một camera có thể điều khiển bằng bàn phím

        // draw everything
        while(device->run() && driver)
        {
                driver->beginScene(true, true, video::SColor(255,0,0,255));//xóa cảnh cũ
                scenemgr->drawAll();//vẽ cảnh mới, có culling đàng hoàng
                driver->endScene();//đưa lên màn hình
        }

        // xóa cái device đi
        device->drop();
        return 0;
}
Bạn còn nhớ những ngày unresolved external với DirectX? Những ngày push pop điên người với OpenGL? Những ngày lặn ngụp trong một đống doc của OGRE? Với Irrlicht thì không có chuyện đó. Irrlicht luôn được thiết kế với phương trâm: giữ cho mọi thứ đơn giản hết mức có thể. Nhưng nó cũng mạnh không kém các engine kia:
Trích từ http://irrlicht.sourceforge.net
Các chức năng chính

* Tốc độ render cao với DirectX và OpenGL
* Không phụ thuộc vào platform: Windows95, 98, NT, 2000, XP, Linux và MacOS
* Thư viện vật liệu(material) lớn với các vật liệu dựng sẵn và tự tạo qua shader
* Chuyển đổi trực tiếp giữa cảnh trong nhà và ngoài trời với hệ thống quản lý cảnh(scene manager) mở
* Nhân vật chuyển động theo bộ xương(skeleton) hoặc theo biến hóa(morph)
* Nhiều hiệu ứng đặc biệt
* Hỗ trợ .NET
* Có thể render bằng phần mềm(bull: để làm quái gì trong thời đại này :-/ )
* Hệ thống giao diện mạnh và dễ chỉnh sửa
* Hệ thống vẽ ảnh 2 chiều
* Tài liệu gọn, dễ hiểu (cái này đúng)
* Viết trên C++ hoàn toàn hướng đối tượng
* Nạp trực tiếp(ko cần exporter) các dạng model: Maya (.obj), 3DStudio (.3ds), COLLADA (.dae), DeleD (.dmf), Milkshape (.ms3d), Quake 3 levels (.bsp), Quake2 models (.md2), Microsoft DirectX (.X)... [more]
* Nạp trực tiếp các dạng texture: Windows Bitmap (.bmp), Portable Network Graphics (.png), Adobe Photoshop (.psd), JPEG File Interchange Format (.jpg), Truevision Targa (.tga), ZSoft Painbrush (.pcx)... [more]
* Hệ thống kiểm tra va chạm, phản ứng nhanh và đơn giản
* Hệ thống toán học, container(những cái giống như mảng hay list) nhanh, tối ưu
* Đọc file nén: .zip, .pak trực tiếp
* Hệ thống đọc+xử lý XML nhanh
* Hỗ trợ unicode
* Hỗ trợ các IDE: Microsofts VisualStudio6.0™, VisualStudio.NET 7.0-8.0™, Metrowerks Codewarrior, and Bloodshed Dev-C++ with g++3.2-4.0.
* Engine hoàn toàn miễn phí, bản quyền zlib nghĩa là có thể sử dụng cho mọi mục đích mà không cần mở mã, không cần trả tiền như LGPL hay GPL.

Hiệu ứng đặc biệt
* Mặt nước như thật(không thật lắm đâu :P )
* Ánh sáng động
* Đổ bóng động( chậm như rùa :P )
* Billboards (cái ảnh 2D mà lúc nào cũng quay về phía camera)
* Bump mapping (làm cho mặt phẳng có cảm giác lồi lõm mà không cần thêm vertex)
* Parallax mapping (khá giống cái trên kia)
* Vật thể trong suốt(
* Light maps (kiểu như ánh sáng + bóng tĩnh được tính toán trước nên chất lượng cao mà không tốn cpu+gpu)
* Hiệu ứng particle tùy ý
* Sphere mapping (một vật thể bóng như oto, súng phản chiếu mối trường xung quanh)
* Texture chuyển động
* Skyboxes (cái hộp bầu trời ý)
* Sương mù

Drivers
Có 6 driver tất cả

* Direct3D 8.1
* Direct3D 9.0
* OpenGL 2.0
* The Irrlicht Engine Software renderer( chán, vứt đi)
* The Apfelbaum Software Renderer( tốt hơn, có thể dùng cho game 2D, nhưng cũng đáng vứt đi)
* A null device.(chả vẽ cái gì cả, thường dùng cho game server, chỉ cần một số tính năng như ray casting)

Hỗ trợ các ngôn ngữ shader sau:

* Pixel and Vertex Shaders 1.1 to 3.0
* ARB Fragment and Vertex Programs
* HLSL
* GLSL

Các định dạng texture

* Adobe Photoshop (.psd)
* JPEG File Interchange Format (.jpg)
* Portable Network Graphics (.png)
* Truevision Targa (.tga)
* Windows Bitmap (.bmp)
* Zsoft Paintbrush (.pcx)

Các định dạng mesh:

* 3D Studio meshes (.3ds)
* B3D files (.b3d)
* Alias Wavefront Maya (.obj)
* Cartography shop 4 (.csm)
* COLLADA (.xml, .dae)
* DeleD (.dmf)
* FSRad oct (.oct)
* Irrlicht scenes (.irr)
* Microsoft DirectX (.x) (binary & text)
* Milkshape (.ms3d)
* My3DTools 3 (.my3D)
* OGRE meshes (.mesh)
* Pulsar LMTools (.lmts)
* Quake 3 levels (.bsp)
* Quake 2 models (.md2)
Những cái hay cái đẹp về irrlicht có rất nhiều search một ít là ra, những cái xấu ít ai biết:

Design không tốt lắm: Vâng, bạn sẽ thấy method setMD2Animation, GetXJointNode,GetMS3DJointNode trong class ISceneNode. Có nghĩa là những hàm liên quan đến định dạng model lại thuộc về SceneNode

Hệ thống animation kém:Trái lại những gì trên trang chủ nói, hệ thống animation của Irrlicht không hay lắm. Chính vì nó hỗ trợ nhiều kiểu mesh nên một số chức năng chỉ có trên một số định dạng, một số chức năng lại không. Cách mà engine xửa lý các mesh thuộc các dạng khác nhau là hoàn toàn khác nhau. Những yêu cầu đơn giản như xoay một joint trên character không được đáp ứng. Cũng may là trong phiên bản mới : 1.4(mới chỉ có trên svn) , hệ thống animation đang được viết lại từ đầu. Một định dạng chuẩn đã đc đưa ra để chấm dứt việc engine lớn lên chỉ vì hỗ trợ thêm các định dạng mới.

Hệ thống shader lạc hậu:Irrlicht có hỗ trợ HLSL nhưng không hoàn toàn, GLSL cũng vậy, không hề có multipass rendering trong shader. Cube texture cũng không có. Irrlicht đc mệnh danh là cross-api(Dx hay OpenGL đều đc) nhưng ngôn ngữ shader thì không. Khi có một user nào đấy chia sẻ shader của mình trên một ngôn ngữ thì những người dùng ngôn ngữ còn lại chỉ biết chảy nước dãi. Lại may tiếp, một gã nick là Nadro đang phát triển hệ thống Cg(ngôn ngữ shader giống như C của nVidia chạy đc trên mọi hệ điều hành, cả Dx và OpengL) trên Irrlicht

Hệ thống đổ bóng(shadow nhé, ko phải shader) chậm như rùa: dựa trên stencil shadow và không optimized thì thế thôi Big Grin.gif . Có người đã phát triển hệ thống shadow map trên Irrlicht thành công. Tuy nhiên tôi thấy là hắn đã phải work around(tìm cách giải quyết vấn đề theo hướng phức tạp hơn) khá nhiều vì những hạn chế của irrlicht nên chưa đc hiệu quả như mong muốn.

Irrlicht không hề nhanh như chớp(lightning fast): Irrlicht có thể có hệ thống toán nhanh, hệ thống container nhanh, có thể có hệ thống culling giỏi nhưng: những công nghệ mới như hardware vertex buffer, hardware index(lưu dữ liệu về mesh vào card đồ họa chứ không gửi lên theo từng frame) lại không được hỗ trợ thì gặp phải terrain hay level to cũng sẽ chậm thôi.

Vậy có nên dùng irrlicht nữa không?:
Nên rất nên. Irrlicht vẫn đang phát triển từng ngày, trong một thời gian ngắn nó đã ngấp nghé ngôi vị thống lĩnh của OGRE. Những điểm yếu có nó đang được khắc phục. Và nhất là với những bạn mà đọc phần điểm yếu không hiểu tôi viết gì(tức là chưa đạt đc đến giới hạn của engine) thì không phải lo về nó đâu.

P/S : OGRE cũng là một Game Engine khá nổi tiếng và khá mạnh, engine này từng được dùng để phát triển game Thiên Long Bát Bộ - game do công ty FPT phát hành tại VN