Skip to main content
Cập nhật lần cuối: 21/05/2026

Tổng quan Hình học NURBS

Bạn kéo một điểm trên curve trong Rhino, và toàn bộ đường cong uốn lượn mượt mà theo. Bạn dùng lệnh Loft nối hai đường thành mặt cong phức tạp, rồi xuất file cho xưởng CNC cắt chính xác đến từng milimét. Ở phía sau tất cả những thao tác đó là một hệ thống toán học ra đời từ những năm 1960 — NURBS — hiện là nền tảng của hầu hết mọi phần mềm mô hình 3D chuyên nghiệp trong kiến trúc và thiết kế công nghiệp.

Bài viết này không yêu cầu bạn giỏi toán. Mục tiêu là xây dựng một mô hình tư duy đúng về NURBS: tại sao nó tồn tại, nó hoạt động theo nguyên lý gì, và khi nào bạn nên dùng nó thay vì các loại hình học khác.


NURBS là gì — và tại sao nó được phát minh

NURBS là viết tắt của Non-Uniform Rational B-Spline. Đây là phương pháp biểu diễn đường cong và bề mặt bằng công thức toán học, thay vì lưu trữ tọa độ của từng điểm trên bề mặt đó.

Hãy so sánh hai cách lưu một đường tròn:

  • Cách mesh: Lưu tọa độ của 100 điểm xấp xỉ trên đường tròn. Càng ít điểm, đường càng góc cạnh. Muốn mượt hơn, phải thêm điểm — file ngày càng nặng.
  • Cách NURBS: Lưu công thức toán học của đường tròn. Không quan trọng bạn zoom lên bao nhiêu lần, đường tròn vẫn hoàn hảo. File gọn, độ chính xác không giới hạn.

Đây chính là lý do NURBS được phát triển. Trong những năm 1950–1960, kỹ sư Pierre Bézier (Renault) và Paul de Casteljau (Citroën) đang tìm cách mô tả thân xe hơi bằng máy tính để điều khiển máy CNC. Đường cong Bézier ra đời từ nhu cầu đó. NURBS sau này là sự tổng quát hóa mạnh mẽ hơn, được chuẩn hóa bởi nhà toán học Ken Versprille vào những năm 1970 và trở thành tiêu chuẩn công nghiệp.


Bốn thành phần cốt lõi của NURBS

Để hiểu NURBS, bạn cần nắm bốn khái niệm: Control Points, Degree, Knot Vector, và Weights.

1. Control Points (CV — Control Vertices)

Control Points là các điểm "nam châm" định hình đường cong. Điểm quan trọng cần ghi nhớ: hầu hết CV không nằm trên đường cong — chúng chỉ kéo đường cong về phía mình từ xa.

Đường cong NURBS Degree 3:

CV2 ●───────────● CV3
\ \
CV1 ● ←─── đường cong thực sự nằm bên trong
\
CV0 ●

Điều này khác với Interpolated Curve (InterpCrv trong Rhino) — loại curve đi qua các điểm được click. Nhưng ngay cả InterpCrv cũng có CV ẩn phía sau; Rhino chỉ tự tính toán vị trí CV để curve đi qua đúng điểm bạn chỉ định.

Số lượng CV ảnh hưởng trực tiếp đến:

  • Độ linh hoạt: Nhiều CV = curve có thể có hình dạng phức tạp hơn
  • Độ mượt: Ít CV = curve đơn giản, ít gợn, dễ kiểm soát
  • Hiệu năng file: Mỗi CV là dữ liệu cần lưu và xử lý

2. Degree (Bậc)

Degree là con số quy định "ảnh hưởng lan rộng bao xa" của mỗi CV lên đường cong. Nói đơn giản hơn: Degree kiểm soát độ mượt.

DegreeTên thường gọiĐặc điểmDùng khi nào
1LinearThẳng, góc cạnh tại mỗi CVPolyline, mạng lưới kết cấu
2QuadraticMượt nhưng còn cứngCung tròn chính xác, ít phổ biến
3CubicMượt tự nhiên, cân bằngMặc định trong Rhino, thiết kế tổng quát
5QuinticRất mượt, nối tiếp đẹpBề mặt cần tiếp xúc G2, thiết kế xe
7+High-degreeCực mượt, khó kiểm soátHiếm dùng trong kiến trúc

Quy tắc quan trọng: Một NURBS curve Degree n cần tối thiểu n+1 Control Points. Curve Degree 3 cần ít nhất 4 CV.

Tại sao Degree 3 là tiêu chuẩn vàng?

Degree 3 (cubic) là điểm ngọt ngào giữa độ mượt và khả năng kiểm soát. Nó đảm bảo continuity G2 (tiếp xúc mượt đến đạo hàm bậc 2), đủ cho hầu hết mọi ứng dụng kiến trúc và thẩm mỹ tốt. Degree cao hơn tốn tài nguyên tính toán hơn và khó kiểm soát hành vi cục bộ hơn.

3. Knot Vector (Vector Nút)

Knot Vector là phần ít được nhắc đến nhất nhưng là lý do có chữ "Non-Uniform" trong tên gọi. Đây là danh sách các giá trị số xác định tại đâu trên đường cong thì ảnh hưởng của mỗi CV bắt đầu và kết thúc.

Bạn không cần thao tác trực tiếp với Knot Vector trong công việc hàng ngày. Nhưng hiểu khái niệm giúp giải thích một số hành vi quan trọng:

Uniform knots (khoảng cách đều): CV có ảnh hưởng đồng đều. Đây là trường hợp đơn giản, nhưng không biểu diễn được đường tròn chính xác 100%.

Non-uniform knots (khoảng cách không đều): Cho phép CV ở vị trí quan trọng có ảnh hưởng mạnh hơn. Nhờ vậy, NURBS có thể biểu diễn cung tròn, elipse, và conic sections một cách chính xác tuyệt đối — không phải xấp xỉ.

Knot multiplicity: Khi một giá trị knot lặp lại nhiều lần, nó tạo ra điểm "ghim" trên curve. Ví dụ trong Rhino, khi bạn dùng lệnh Kink hoặc tạo curve có góc sắc, đó là do knot multiplicity bằng Degree tại điểm đó.

4. Weights (Trọng số)

Đây là phần "Rational" trong NURBS. Mỗi CV có một giá trị weight (mặc định = 1). Khi tăng weight của một CV, đường cong bị "hút" mạnh hơn về phía CV đó.

Weight = 1 (mặc định):  curve bị hút đều bởi tất cả CV
Weight = 3 tại CV2: curve bị kéo mạnh về phía CV2
Weight = 0.5 tại CV2: curve "tránh" CV2 hơn

Trong thực hành kiến trúc, bạn hiếm khi chỉnh weight thủ công. Nhưng khi Rhino tạo cung tròn, nó tự động dùng weight đặc biệt để đảm bảo đường tròn chính xác 100% — đây là lý do duy nhất biểu diễn tròn NURBS khác với đường cong thông thường.


NURBS Curves — Đường cong trong thực hành

Các loại đường cong NURBS

Open Curve (Đường cong mở): Đầu và cuối không nối nhau. Đây là loại phổ biến nhất — đường mái, đường profile mặt đứng, đường biên tấm panel.

Closed Curve (Đường cong đóng): Đầu và cuối gặp nhau tại cùng một điểm. Dùng cho contour mặt bằng, biên dạng tiết diện.

Periodic Curve: Dạng đặc biệt của closed curve, trong đó điểm nối hoàn toàn mượt — không có dấu "nối" nhìn thấy khi hiển thị CV. Rhino tạo loại này khi bạn dùng Circle hay Ellipse.

Continuity — Khái niệm then chốt khi nối curves

Khi thiết kế mặt đứng hay mặt cong, bạn thường phải nối nhiều curve lại. Chất lượng điểm nối được đo bằng Geometric Continuity (G):

MứcKý hiệuÝ nghĩaNhận biết bằng mắt
Vị tríG0Hai đầu chạm nhau, có thể có gócNhìn thấy điểm gãy rõ ràng
Tiếp tuyếnG1Hướng tiếp tuyến liên tụcMượt nhưng có thể thấy "nếp gấp ánh sáng"
Độ congG2Bán kính cong liên tụcMượt hoàn toàn, highlight di chuyển đều
Đạo hàm congG3Tỷ lệ thay đổi độ cong liên tụcChỉ phân biệt được với phân tích kỹ thuật

Trong kiến trúc, G2 là tiêu chuẩn cho bề mặt thẩm mỹ cao. G1 thường chấp nhận được cho chi tiết kết cấu. G0 (chỉ nối vị trí) thường không chấp nhận được cho bề mặt nhìn thấy.


NURBS Surfaces — Bề mặt trong thực hành

NURBS Surface là phần mở rộng hai chiều của curve. Thay vì một vector tham số u, bề mặt có hai vector tham số uv, tạo thành một lưới CV hình chữ nhật.

Bề mặt NURBS — lưới CV:

● ─── ● ─── ● ─── ● ← hàng CV theo hướng V
│ │ │ │
● ─── ● ─── ● ─── ●
│ │ │ │
● ─── ● ─── ● ─── ●

↕ hướng U

Bề mặt thực sự nằm bên trong lưới này

Các loại bề mặt NURBS phổ biến

Plane: Bề mặt phẳng — đơn giản nhất, Degree 1 theo cả hai hướng.

Revolved Surface (RevSrf): Xoay một profile curve quanh trục. Tạo dome, cylinder, cone, bình hoa. Rất hiệu quả vì bạn chỉ thiết kế profile 2D.

Extruded Surface: Kéo một curve theo một hướng. Tạo tường, dầm, thanh profile.

Loft Surface: Nối một chuỗi curve profile. Cực kỳ linh hoạt cho bề mặt hữu cơ phức tạp trong kiến trúc.

Sweep Surface: Kéo một profile curve dọc theo một rail curve. Dùng cho mái vòm, tay vịn cầu thang, dầm cong.

Network Surface (NetworkSrf): Tạo bề mặt từ hai bộ curves giao nhau. Phù hợp khi bạn đã có sẵn các đường thiết kế quan trọng.

Boundary Surface (EdgeSrf): Tạo bề mặt từ 2–4 đường biên. Đơn giản nhưng có giới hạn về hình dạng.

Singularity — Điểm kỳ dị

Khi một bề mặt NURBS hội tụ về một điểm (như chóp tam giác, đỉnh dome), xuất hiện singularity — điểm mà lưới CV bị collapse về một chỗ. Đây là điểm yếu của NURBS: singularity gây khó khăn cho chia lưới mesh, tính toán GH, và export sang các phần mềm khác.

Cách xử lý singularity trong thực hành

Khi thiết kế dome có đỉnh, cân nhắc dùng Rebuild Surface để phân bố lại CV, hoặc thiết kế "đỉnh bằng" thay vì đỉnh nhọn. Trong Grasshopper, kiểm tra Surface Domain và tránh tính toán tại vùng gần singularity.


Ứng dụng thực tế trong kiến trúc và thiết kế

Thiết kế hình khối công trình

NURBS là công cụ không thể thiếu khi thiết kế những công trình có hình dạng tự do (free-form). Các ví dụ điển hình trong lịch sử kiến trúc:

  • Guggenheim Bilbao (Frank Gehry): Toàn bộ vỏ titanium được mô hình hóa bằng NURBS trong CATIA, sau đó chuyển hóa thành tấm panel gia công CNC.
  • Heydar Aliyev Center (Zaha Hadid): Bề mặt liền mạch chảy từ mặt đất lên mái — không có điểm gãy, hoàn toàn là NURBS surface continuity G2+.
  • Mái nhà hát Opera Sydney: Các "vỏ sò" thực chất là các đoạn của cùng một mặt cầu NURBS, đảm bảo mọi tấm lát đều có thể sản xuất từ cùng khuôn.

Parametric Façade Design

Trong Grasshopper, NURBS surface là đầu vào tiêu chuẩn để:

  1. Chia thành lưới panel (Surface Division, Isotrim)
  2. Tạo logic cửa sổ theo tham số (Surface Parameter)
  3. Tính góc nghiêng mỗi panel để kiểm soát ánh sáng
  4. Export tọa độ từng điểm góc cho nhà máy CNC

Chuyển đổi sang sản xuất

Một trong những ưu điểm lớn nhất của NURBS so với mesh là chính xác tuyệt đối trong gia công. Máy CNC, máy cắt laser, và máy in 3D chuyên nghiệp đều có thể đọc file NURBS gốc (IGES, STEP) mà không cần xấp xỉ hóa. Điều này đảm bảo:

  • Không có sai số do tesselation
  • Mỗi tấm panel có tọa độ chính xác đến 0.001mm
  • Có thể tối ưu layout cắt trực tiếp từ mô hình NURBS

So sánh NURBS với các loại hình học khác

Không có loại hình học nào là tốt nhất trong mọi tình huống. Hiểu điểm mạnh và yếu của mỗi loại giúp bạn chọn đúng công cụ cho đúng bài toán.

NURBS vs Mesh (Lưới đa giác)

Tiêu chíNURBSPolygon Mesh
Biểu diễnCông thức toán học chính xácTập hợp điểm và mặt xấp xỉ
Độ chính xácHoàn hảo, không phụ thuộc zoomPhụ thuộc vào mật độ lưới
Kích thước fileNhỏ hơn nhiều cho hình dạng đơn giảnTăng tuyến tính theo số mặt
Cấu trúc topologyLưới UV có cấu trúc, khó xử lý holeLinh hoạt tùy ý, dễ tạo hole
Render / GamePhải convert sang meshDạng native cho GPU
Gia công CNCNative, không mất độ chính xácCần convert, có sai số
Bề mặt hữu cơ phức tạpKhó (nhiều patch ghép)Dễ hơn với Subdivision
Phần mềm chínhRhino, CATIA, SolidWorks, AutoCADBlender, 3ds Max, Maya, SketchUp

Khi nào dùng Mesh thay NURBS:

  • Thiết kế nhân vật, organic form với topology tự do hoàn toàn
  • Game asset và real-time visualization
  • Phân tích FEM/CFD với lưới tính toán chuyên biệt

NURBS vs Subdivision Surface (SubD)

Subdivision Surface (SubD) là phương pháp tạo bề mặt mượt bằng cách chia nhỏ một cage mesh thô. Rhino 7+ và Blender đều hỗ trợ tốt SubD.

Tiêu chíNURBSSubD
TopologyLưới UV hình chữ nhật, không có n-gonTự do, có thể có đỉnh 3, 5, 6+ cạnh
Chỉnh sửaChỉnh CV, tangent, knot riêng biệtKéo thả cage trực quan, dễ học
ContinuityKiểm soát được G0/G1/G2 chính xácTự động G2 nhưng khó kiểm soát chính xác
Lỗ và topology phức tạpCần multi-patch, phức tạpTự nhiên hơn
Chuyển đổi sang sản xuấtTrực tiếpPhải convert sang NURBS hoặc mesh
Ứng dụng điển hìnhKiến trúc, kỹ thuật, ô tôCharacter design, furniture, shoe design

Lưu ý trong Rhino: Rhino 7+ có thể convert giữa SubD và NURBS hai chiều. Đây là workflow tốt: thiết kế hình khối thô bằng SubD (nhanh, trực quan), rồi convert sang NURBS khi cần xuất gia công.

NURBS vs Bézier Curve

Bézier là "họ hàng đơn giản hơn" của NURBS. Thực ra, một đoạn Bézier là một trường hợp đặc biệt của NURBS với knot uniform và tất cả weight = 1.

Tiêu chíBézierNURBS
Số segmentMột đoạn duy nhấtNhiều đoạn (knot spans)
Số CV tối đaBằng Degree + 1Không giới hạn
Kiểm soát cục bộKhông (mọi CV ảnh hưởng toàn cục)Có (mỗi CV ảnh hưởng trong phạm vi)
Đường tròn chính xácKhông thểCó (nhờ weight)
Ứng dụng phổ biếnVector graphics (Illustrator, SVG, font chữ)3D modeling chuyên nghiệp

NURBS vs Solid / B-rep

Trong thực tế, NURBS và Solid (B-rep) không loại trừ nhau — chúng là hai cấp độ khác nhau của cùng một đối tượng. Một Solid trong Rhino hay SolidWorks là một tập hợp các NURBS surface được nối kín hoàn toàn (watertight). B-rep (Boundary Representation) là cấu trúc dữ liệu bên trên, NURBS là công nghệ biểu diễn bên dưới.

Cấu trúc phân cấp:

Solid (B-rep)
└── Faces (NURBS Surfaces)
└── Edges (NURBS Curves)
└── Vertices (Points)

Những hạn chế của NURBS và cách vượt qua

1. Yêu cầu topology chữ nhật

NURBS surface về bản chất là lưới UV hình chữ nhật — không thể có 3 hoặc 5 cạnh. Khi cần bề mặt phức tạp hơn, phải dùng multi-patch NURBS (nhiều mảnh NURBS ghép lại). Thách thức: đảm bảo continuity tại đường nối giữa các patch.

Giải pháp phổ biến: Thiết kế với SubD trước, rồi convert sang NURBS. Hoặc dùng lệnh MergeFace, MatchSrf trong Rhino để kiểm soát continuity tại đường nối.

2. Singularity tại cực

Như đã đề cập, khi lưới UV hội tụ về một điểm (dome, chóp) xuất hiện singularity. File có thể bị lỗi khi đưa sang phần mềm khác.

Giải pháp: Dùng RebuildUV để chuyển vùng cực thành "đầu bằng" nhỏ. Hoặc thiết kế với SubD rồi convert.

3. Khó chỉnh sửa topology sau khi tạo

Khác với mesh có thể thêm/xóa cạnh tùy ý, NURBS surface bị ràng buộc bởi lưới UV. Muốn thêm "hàng CV" mới, phải dùng InsertKnot — ảnh hưởng đến toàn bộ hàng đó theo hướng U hoặc V.

4. Hiển thị trong game engine và web

WebGL, Unity, Unreal đều chỉ hiểu polygon mesh. Mọi NURBS geometry phải được tesselate (chia thành mesh) trước khi hiển thị real-time. Điều này có nghĩa là NURBS không phù hợp cho real-time visualization trực tiếp — phải qua bước trung gian.


Tóm lược: Khi nào dùng NURBS

Tình huốngLựa chọn phù hợp
Thiết kế hình khối kiến trúc chính xác✅ NURBS
Gia công CNC, laser cut với dung sai nhỏ✅ NURBS
Bề mặt cong tự do cần continuity G2+✅ NURBS
Thiết kế organic form tự do, không cần độ chính xácSubD hoặc Mesh
Real-time game / AR / VRPolygon Mesh
Vector 2D (logo, bản vẽ 2D)Bézier (Illustrator, Inkscape)
Phân tích kết cấu FEMMesh chuyên biệt
Kết hợp hình khối lớn + chỉnh sửa tự doSubD → convert NURBS

Liên kết kiến thức

Chủ đề liên quan