Cách vẽ lên mô hình 3d

Sep 17 2020

Tôi đã tìm kiếm chủ đề này rất lâu và về cơ bản không tìm thấy thông tin nào về nó.

Nếu chúng ta có một mô hình 3d với bố cục uv. Kỹ thuật cơ bản để vẽ tranh 3d trên mô hình bằng cọ vẽ là gì? Một nét vẽ bao gồm dữ liệu / hình ảnh pixel cọ vẽ được sắp xếp liên tiếp. Vậy chúng ta có chiếu từng hình ảnh cọ riêng lẻ lên bề mặt của vật thể không? (Mặc dù trong thực tế để làm điều này, chúng tôi sẽ chiếu đối tượng lên không gian ảnh). Tôi đã quản lý để chiếu các kết cấu lên các đối tượng trước đây. Và việc chiếu từng hình ảnh bàn chải riêng lẻ chắc chắn có vẻ khả thi, nhưng tôi không chắc liệu nó có thực tế từ quan điểm hiệu suất hay không và liệu có kỹ thuật nào tốt hơn không.

Trả lời

1 wychmaster Sep 18 2020 at 15:18

Tôi không thể cung cấp cho bạn cách tiếp cận "tốt hơn" ở đây, nhưng tôi nghĩ rằng cách tiếp cận

chiếu từng hình ảnh bàn chải riêng lẻ lên bề mặt của đối tượng

không thực sự là một vấn đề về hiệu suất nếu bạn triển khai điều đó bằng GPU. Đặc biệt là trong môi trường biên tập viên, nơi không có nhiều thứ diễn ra so với một trò chơi máy tính. Về cơ bản, tất cả những gì bạn muốn làm là kết xuất một hình ảnh duy nhất trên mỗi khung hình trên một tập hợp các kết cấu giới hạn. Tôi có thể cung cấp cho bạn bản nháp về cách tôi sẽ tiếp cận chủ đề nếu tôi cần tính năng này. Tuy nhiên, vì tôi chưa tự thực hiện nên có thể có một số phức tạp và vấn đề mà tôi chưa nghĩ đến, vì vậy hãy cho tôi biết trong phần nhận xét nếu có điều gì đó không hoạt động như mong đợi.

  1. Tìm các bề mặt bị ảnh hưởng

    • Sử dụng các góc của kết cấu bàn chải của bạn và tạo ra một hình chiếu bàn chải giảm thất vọng
    • Kiểm tra tất cả các đối tượng so với nó và tìm các bề mặt gần nhất -> Nếu bạn đã sử dụng một số loại chọn lọc cho cảnh của mình, hãy sử dụng lại danh sách đối tượng đã được chọn lọc, vì bàn chải chỉ có thể "nhìn thấy" những gì máy ảnh nhìn thấy
    • Xác định các bề mặt con / hình tam giác bị ảnh hưởng bởi bút vẽ
  2. Thu thập tất cả các kết cấu bị ảnh hưởng. Bạn nên biết đối với từng bề mặt bị ảnh hưởng, kết cấu của nó. Một cách tối ưu, toàn bộ vật thể của bạn chỉ có một kết cấu UV duy nhất.

  3. Tạo một chương trình đổ bóng để hiển thị kết cấu của bạn.

    • hãy cẩn thận, trình đổ bóng đỉnh phải tính toán tọa độ UV chuẩn hóa và chuyển chúng xuống đường ống làm vị trí đỉnh, vì chúng là vị trí trong kết cấu của bạn. Kiểm tra thông tin bổ sung nào bạn cần để chuyển xuống đường dẫn.
    • Trong trình đổ bóng phân mảnh, ghi đè từng pixel nằm dưới bàn chải. Bạn có thể cần phải sử dụng pha trộn ở đây cho các bàn chải không phải hình chữ nhật.
    • Vị trí bàn chải hơi khó một chút. Bạn cần nó trong không gian UV kết cấu trong bộ đổ bóng phân mảnh và tôi không chắc liệu bạn có thể tính toán nó trong bộ đổ bóng đỉnh hay không. Vì vậy, bạn có thể cần làm điều đó trong bộ đổ bóng phân mảnh hoặc cách khác trong bộ đổ bóng hình học. Vấn đề tôi thấy là góc mà hình chiếu của bàn chải chạm vào bề mặt không thể được tính toán trong bộ đổ bóng đỉnh và cần phải xác định khu vực được bao phủ. Trình đổ bóng hình học có đủ thông tin để tính toán góc và diện tích được bao phủ. Trong trình đổ bóng phân mảnh, bạn cũng không thể tính toán góc, nhưng ở đó bạn có thể chỉ cần kiểm tra xem nó có nằm ở đâu trong bức ảnh chiếu bàn chải hay không.
  4. Bây giờ chỉ cần kết xuất các kết cấu của bạn.

    • Kết cấu bàn chải của bạn
    • Đối với mỗi kết cấu bị ảnh hưởng
      • Liên kết kết cấu dưới dạng mục tiêu kết xuất
      • Hiển thị tất cả các đối tượng bị ảnh hưởng và cho phép GPU phân loại pixel nào cần được ghi đè.
  5. (Tùy chọn) Nếu bạn muốn lưu các sửa đổi của mình, bạn cần đọc lại các kết cấu từ GPU và lưu nó.

Vì công việc chính được thực hiện bởi GPU, nó sẽ khá nhanh. Tuy nhiên, tôi có thể thấy một số vấn đề với cách tiếp cận được mô tả khi bàn chải chạm vào nhiều đối tượng / kết cấu chồng chéo một phần. Phân loại pixel nào của cọ ảnh hưởng đến kết cấu / đối tượng nào có thể trở nên lộn xộn. Có thể có một số thủ thuật stencil / đệm sâu mà người ta có thể áp dụng, nhưng tôi nghĩ đây là một chủ đề cho một câu hỏi khác.

1 Thomas Sep 18 2020 at 15:13

Miễn là không có pixel nào trên kết cấu được sử dụng hai lần, bạn có thể kết xuất hình học và hiển thị tọa độ uv (tọa độ kết cấu). Thông thường chúng là sự kết hợp của màu đỏ và xanh lá cây (2d). Khi sử dụng brush, bạn chỉ cần đọc tọa độ uv mà bạn đã nhấn và tô màu kết cấu tại vị trí (uv) theo màu mong muốn.

Gợi ý: sơn lên kết cấu thứ hai, vì vậy bạn sẽ không phá hủy màu kết cấu ban đầu.

Hạn chế: Đôi khi độ phân giải kết cấu của các hình tam giác khác nhau trong một hình học khác nhau. Vì vậy, ở một số mặt, nó sẽ trông đẹp và trên những mặt khác, nó sẽ được tạo pixel.

Như đã nói trước đây, nếu lưới (hình học) sử dụng cùng một phần của một kết cấu hai lần (hai mặt nhắm vào cùng một tọa độ kết cấu) và bạn vẽ trên một trong số chúng, thì mặt kia cũng sẽ được vẽ.

the1bird Sep 17 2020 at 07:19

Bạn có thể làm điều đó theo nhiều cách khác nhau.

Nhưng cách hợp lý nhất đối với tôi là có những điểm được lấy mẫu dọc theo đường dẫn, sau đó các đường cong splines / benzier được sử dụng để làm cho nó mịn (các điểm cộng thêm có thể được nội suy), sau đó nó được chiếu và lưu trên kết cấu. Vì vậy, không có "mọi" điểm phải được lấy mẫu.