Một màu đỉnh là gì?


31

Câu hỏi của tôi là những gì được viết trong tiêu đề. Thuật ngữ "màu đỉnh" này xuất hiện rất nhiều. Tôi đang có thời gian khó khăn để hiểu điều này.

Ví dụ:

Không phải là một điểm đơn giản đỉnh trên không gian 3D? Nếu vậy, làm thế nào một điểm có thể có một màu? Hay "màu" này có nghĩa gì khác?

Có một nút "Màu Vertex" trong trình chỉnh sửa vật liệu của động cơ không thực.

Ai đó có thể làm sáng tỏ câu hỏi của tôi? Tôi không thể tìm thấy bất cứ điều gì hữu ích khi tôi googled "màu đỉnh là gì" nhưng tài liệu quá kỹ thuật đối với tôi.


2
Trong hình học một đỉnh chỉ là một điểm trong không gian. Nhưng đối với kết xuất 3D, bạn muốn mọi thứ trông thật đẹp, điều đó có thể có nghĩa là đính kèm thêm thông tin vào từng đỉnh, như màu sắc, hoặc tọa độ kết cấu hoặc trọng lượng xương để bạn có thể làm động lưới dễ dàng hơn hoặc sử dụng hướng bình thường trong chiếu sáng tính toán.
dùng253751

3
Tôi nghĩ rằng một phần lớn của sự nhầm lẫn của bạn là do sự nhầm lẫn thường xuyên của các thuật ngữ đỉnh vertex và một vị trí khác trong đồ họa 3D / đồ họa. Về mặt toán học, câu lệnh của bạn không phải là một điểm đơn giản trên đỉnh của không gian 3D sao? Chính xác, nhưng trong lĩnh vực đồ họa và đồ họa trò chơi, không, một vị trí là một điểm đơn giản trong không gian 3D; và một đỉnh (lưới) là một phần dữ liệu hầu như luôn có một vị trí, nhưng cũng có thể có tọa độ bình thường, tiếp tuyến, kết cấu, màu sắc và / hoặc bất kỳ phần dữ liệu nào khác . Một đỉnh lưới thực sự chỉ là một đoạn dữ liệu được xử lý ở giai đoạn đỉnh của kết xuất.
Slipp D. Thompson

Câu trả lời:


29

Màu sắc của Vertex không phù hợp khi bạn có lưới 3d có kết cấu hoàn chỉnh. Nhưng nó trở nên thú vị khi bạn có một lưới không có kết cấu nhưng có màu. Trong trường hợp đó, bạn chỉ định một màu cho mỗi đỉnh. Sau đó, shader sẽ tô màu từng pixel của một đa giác bằng cách nội suy giữa các màu của ba đỉnh.

Màu sắc của Vertex đôi khi cũng có thể thú vị khi kết hợp với họa tiết. Khi bạn muốn sử dụng thuật toán tạo bóng như Gouraud Shading , bạn chỉ cần tính cường độ ánh sáng trên mỗi đỉnh, gán màu sáng cho đỉnh là màu đỉnh và khi bạn kết xuất họa tiết, bạn nhân giá trị màu của từng pixel kết cấu với Các màu nội suy. Điều này cho phép bạn tính toán các nguồn sáng trong trình tạo bóng đỉnh thay vì trình tạo bóng pixel. Điều này thường nhanh hơn nhiều, bởi vì trình tạo bóng đỉnh thường được thực hiện ít thường xuyên hơn.


2
btw, màu đỉnh được sử dụng trong một số trò chơi cũ không có bất kỳ tia sét / bóng động nào. Ví dụ Richard Burns Rally từ năm 2004 đang sử dụng màu đỉnh để tạo kết cấu trông khác nhau và áp dụng bóng.
martin

The Witness là một trò chơi gần đây sử dụng rộng rãi các màu đỉnh và ánh sáng, nhưng không có nhiều họa tiết.
dùng253751

@Philipp "vì trình tạo bóng đỉnh thường được thực hiện ít thường xuyên hơn" Tại sao? Không phải là phần đổ bóng đỉnh của đường dẫn kết xuất và do đó thực hiện từng khung? Tại sao ít thường xuyên hơn? Không phải "màu" của đỉnh cũng phải được tính toán cho mọi khung hình, giống như khi nó ở trong pixel shader?
Nikos

1
@Nikos Một shader đỉnh được gọi một lần trên mỗi đỉnh. Một shader pixel sau đó được gọi một lần trên mỗi pixel. Một đa giác có 3 đỉnh thường tạo ra nhiều hơn 3 pixel trên màn hình (nếu trò chơi của bạn kết thúc việc tính toán nhiều đa giác có kích thước nhỏ hơn 3 pixel, bạn có thể muốn xem xét những gì bạn có thể làm về việc loại bỏ và LOD).
Phi

25

Về lý thuyết, Vertex Color cho phép tô màu một mô hình mà không phải bận tâm đến họa tiết. Điều này khá phổ biến trong CAD.

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Trong thực tế, đó chỉ là một khe cắm nữa mà bạn có thể sử dụng để đẩy dữ liệu vào đỉnh, mà sau đó bạn sử dụng trong trình tạo bóng đỉnh để làm những thứ điên rồ .

"Không phải là một điểm đơn giản đỉnh trên không gian 3D sao?"

Đó là những gì tôi từng nghĩ, khi tôi mới bắt đầu với 3D. Tôi học nhanh rằng tôi đã sai .

Bạn có thể nghĩ về một đỉnh như một đốm dữ liệu tạo nên một góc của một hình tam giác mà bạn muốn vẽ trên màn hình (và cả phần "góc" cũng không phải là phần "tam giác", "vẽ" hay "màn hình" luôn luôn đúng ). Vị trí là một khía cạnh - khía cạnh của blob dữ liệu mà chúng tôi gọi là Vertex.

Có rất nhiều thứ bạn có thể làm bằng cách đính kèm dữ liệu bổ sung vào đỉnh. Ví dụ nổi tiếng nhất là bạn có thể thêm tọa độ uv để vẽ họa tiết trên hình tam giác đó. Bạn (thường) không thể quyết định phần nào của họa tiết sẽ vẽ trên hình tam giác nếu bạn chỉ có một điểm - bạn cũng cần tọa độ kết cấu.

Các ví dụ điển hình khác về những gì trong blob đó là quy tắc và tiếp tuyến. Điều quan trọng là tất cả chúng đều là tùy chọn, bao gồm cả vị trí. Vertex Color chỉ là một trong những đầu vào tùy chọn mà bạn có thể sử dụng hoặc lạm dụng để tạo ra một hình ảnh đẹp trên màn hình.


2
".. như một đốm dữ liệu tạo nên cạnh của một hình tam giác" thậm chí điều đó không nhất thiết. Vertexes có thể được hiển thị như là điểm tốt.
Kromster nói ủng hộ Monica

3
Đối với một số ví dụ tuyệt vời về hiệu ứng đổ bóng bạn có thể đạt được bằng cách sử dụng màu đỉnh, tôi khuyên bạn nên kiểm tra bài nói GDC của Natalie Burke từ năm ngoái, "Hoạt hình với toán học" (video hiện chỉ dành cho thành viên, nhưng các slide này miễn phí tại đây ) . Cô ấy cho thấy có bao nhiêu hình ảnh động trong thiết bị, tóc và vải nhân vật của Destiny, và thậm chí cả các phần của kẻ thù và môi trường của họ đã đạt được bằng cách sử dụng các shader đỉnh, được định hình và điều khiển bằng các kênh màu đỉnh.
DMGregory

5
Tôi tranh luận rằng những màu đó không phải là màu đỉnh, mà là thuộc tính đỉnh được hiển thị dưới dạng màu để dễ nhận biết hơn.
Kromster nói ủng hộ Monica

Có một số cách sử dụng tương tự các công cụ tạo bóng đỉnh trong bài nói chuyện này về FortNite , mặc dù nếu tôi nhớ lại chính xác, tôi nghĩ rằng họ chủ yếu sử dụng các kênh UV của các đỉnh thay vì các kênh màu.
DMGregory

3
Nói một cách chính xác từ quan điểm dựa trên hình học / toán học, một đỉnh chỉ là một điểm trong không gian. 'Màu đỉnh' là một thuộc tính được áp dụng cho đỉnh theo 'ý tưởng' của một đỉnh được sử dụng bởi GPU. Nó giống như một vòng tròn có màu hay không. 'Ý tưởng' hình học / toán học của một vòng tròn không có màu nhưng phần mềm kết xuất 'ý tưởng' của một vòng tròn liên kết một màu với vòng tròn. Do đó, đối số của @ Kromster đúng hơn về mặt kỹ thuật.
Pharap

8

Vertice có thể có màu sắc, đó là một tài sản giống như bình thường của nó.

Trong môi trường 3d, một hình tam giác được tô màu dựa trên thông tin màu của các đỉnh của chúng. Các mảnh gần nhất với đỉnh A có được màu của nó, đóng lại với đỉnh B lấy colornof B và màu sẽ nội suy giữa 2.

Nó hoạt động tương tự như chiếu sáng trên mỗi đỉnh

Đó là một cách dễ dàng để thêm màu sắc vào mô hình mà không cần sử dụng họa tiết.


+1 để đưa ra một ví dụ (hy vọng) quen thuộc của một thuộc tính đỉnh tương tự khác
AC

Vấn đề với màu sắc và quy tắc đỉnh là chúng giả sử đỉnh là một phần của lưới (xấp xỉ bề mặt cong). Nếu bạn muốn các cạnh sắc nét hoặc các mặt có màu khác nhau (chẳng hạn như trên một khối lập phương), bạn cần các đỉnh riêng biệt cho mỗi mặt, điều này làm tăng đáng kể việc sử dụng bộ nhớ (và làm chậm kết xuất).
Ami

@aml Bạn có thể sử dụng "toán tử" phẳng trong glsl để xuất ra làm cho bóng trông phẳng. Nó không hoàn thành giống nhau, nhưng nó hoạt động.
Bálint

thuộc tính nội suy khác: tọa độ kết cấu và bộ đệm z! chúng ta có bộ tạo bóng đỉnh tính toán một số dữ liệu cho mỗi 3 đỉnh của tam giác, chúng được nội suy khi vẽ hình tam giác trên màn hình (hoặc trong một số bộ đệm) và bộ đổ bóng pixel được gọi với giá trị nội suy cho mỗi pixel được vẽ
người dùng1952009

@aml Tất nhiên x2 không phải là nút cổ chai. Và các shader hình học được tạo ra cho điều đó, tôi muốn nói (ví dụ: chuyển đổi một kết cấu chiều sâu thành hình tam giác )
user1952009

2

Đã có câu trả lời chắc chắn ở đây - Tôi chỉ muốn hòa nhập với một cách phổ biến hơn bạn sẽ thấy các màu đỉnh được sử dụng:

Thay đổi màu đối tượng (hoặc các thuộc tính khác) trong một lệnh gọi / đợt.

Bạn sẽ thấy điều này được sử dụng trong việc kết xuất các hệ thống hạt, văn bản và các họa tiết theo lô (thường được phân loại).

Hãy tưởng tượng bạn có một bộ phát hạt tạo ra các hạt có màu bắt đầu ngẫu nhiên hoặc mờ dần về 0 alpha trong suốt vòng đời của các hạt. Nếu chúng ta sử dụng đồng phục shader để gửi dữ liệu màu này, chúng ta cần vẽ từng hạt có màu khác nhau trong lệnh gọi riêng của nó, làm cho hệ thống hạt đắt hơn nhiều. Thay vào đó, chúng ta có thể nướng các màu này vào dữ liệu đỉnh cho các hạt và kết xuất toàn bộ lô lại với nhau trong một cuộc gọi.

Unity dường như sử dụng kỹ thuật này để biến đổi màu hạt, cũng như tô màu các ký tự riêng lẻ trong TextMesh hoặc Sprites được hiển thị cùng nhau trong một lô.

Tôi tin rằng bạn có thể làm một cái gì đó tương tự với sự thay đổi hình học, nhưng tôi không biết hai so sánh về hiệu suất như thế nào. Có thể ngày nay việc thực hiện kiểu tinh chỉnh này thông qua các màu đỉnh là phần lớn hơn để hỗ trợ phần cứng OpenGL 3.1 / DX9 như một số thiết bị di động, thay vì cách tốt nhất cho PC hiện đại. Tôi hoan nghênh ý kiến ​​từ những người đã thực hiện điều chỉnh hiệu suất nhiều hơn với các đợt & cố gắng để giúp làm rõ liệu các kỹ thuật này có thay thế màu đỉnh cho mục đích này hay không. :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.