Làm cách nào để tô màu các phần nhất định của mô hình - như các trò chơi RTS có các màu nhóm đó?


16

Tôi đang cần triển khai một thứ mà chúng ta thấy trong các trò chơi RTS: màu sắc của đội. Về cơ bản, tôi đang tìm kiếm một cách để tô màu các phần nhất định của một mô hình. Làm thế nào tôi đạt được điều này? Tôi không biết bắt đầu từ đâu. Tôi có cần thực hiện một số điều chỉnh cho mô hình 3d trước không?

Câu trả lời:


18

Cách tôi sẽ làm điều này dựa trên các bản đồ kết cấu bạn đang áp dụng cho các đơn vị. Đối với hầu hết mọi thứ, bạn sẽ có một số khu vực cần được pha màu và một số khu vực thì không. Vì vậy, ví dụ, bạn có thể có một chiếc xe tăng bình thường nhưng bạn chỉ muốn thay đổi màu sắc của một số cờ.

Nếu bạn vẽ kết cấu như thể các vùng màu là thang độ xám, thì bạn có thể sử dụng kênh alpha để chỉ định vùng nào cần được tô màu.

Vì vậy, trong shader của bạn, bạn có thể đi (cho cách đơn giản nhất):

float3 finalColor;
if (colorFromTex.a > 0)
 finalColor = colorFromTex.rgb;
else
 finalColor = colorFromTex.rgb*myTintColor.rgb;

Điều đó không tối ưu mặc dù bạn sẽ có một quá trình chuyển đổi khó khăn và có một nhánh trong trình tạo bóng của bạn. Thay vào đó, tốt hơn là đi:

float3 finalColor = lerp(colorFromTex.rgb, 
    colorFromTex.rgb*myTintColor.rgb, colorFromTex.a);

Bạn có biết làm thế nào để đưa trình tạo bóng DirectX vào các mô hình 3d trong 3ds Max không? Khi tôi cố gắng thiết lập một vật liệu với một loại trình đổ bóng và đặt trình đổ bóng thành Thay thế màu sắc và xuất mô hình, kết quả là Error 1 Missing asset "C:\Users\Kai\AppData\Local\Temp\fbx.shader.temp.1064.2756\ReplaceColor.fx". Tôi không hiểu làm thế nào tôi có thể làm cho đúng.
rFactor

Có phải đó là khi bạn tải nó? Có vẻ kỳ lạ là đường dẫn trong FBX sẽ trỏ đến một thư mục tạm thời. Tập tin đó có tồn tại không? Tôi không quen lắm với việc xuất FBX từ 3ds Max nhưng có lẽ bạn cần chỉnh sửa các tệp (hoặc đặt tùy chọn) để làm cho các đường dẫn tương đối.
Lucas

Kỹ thuật tốt, nhưng nếu bạn đang sử dụng kênh alpha để biểu thị "độ bền", đừng quên đặt lại thành phần alpha trong FinalColor của bạn.
charstar

3

Một kỹ thuật là có hai bộ họa tiết cho mỗi mô hình - một màu đỏ, màu xanh khác. Sau đó tùy thuộc vào đội nào mà nhân vật được chỉ định cho bạn áp dụng tập kết cấu đó.

Rõ ràng điều này chỉ hoạt động nếu bạn chỉ có hai đội. Trong khi bạn có thể thoát khỏi nó hơn hai, nó bắt đầu không hiệu quả.

Một cách khác là pha trộn hai kết cấu - thứ nhất là kết cấu cơ bản cho mô hình, thứ hai là lớp phủ màu mà bạn có thể tạo khi chạy.

Cách thứ ba có thể là thay đổi màu của mô hình cơ sở và không có họa tiết (hoặc kết cấu trong suốt một phần) so với các phần của mô hình mà bạn muốn hiển thị màu của đội.


2

Dành một kênh alpha kết cấu cho màu nhóm làm cho kết cấu DXT lớn hơn gấp 2 lần, vì vậy tôi thà sử dụng phím màu để tính màu nhóm. Chỉ định một màu (ví dụ: xanh lá cây, xanh dương, đỏ tươi) là "màu dành riêng" trong kết cấu của bạn.

Khi động cơ khởi động, tạo một ma trận cho mỗi màu nhóm xoay "màu dành riêng" lên màu của đội. Ngay trước khi vẽ một đối tượng nhóm, đặt ma trận này là hằng số đổ bóng pixel.

Trong trình đổ bóng pixel, chuyển đổi màu pixel theo ma trận màu của đội. Lerp màu pixel chưa được dịch với màu pixel được chuyển đổi, theo tỷ lệ tương ứng với góc độ của pixel với sắc độ "màu dành riêng".

Điều này sẽ tiêu tốn của bạn một số hướng dẫn ALU và trig trong trình đổ bóng pixel, nhưng rẻ hơn rất nhiều so với việc làm đầy bộ đệm kết cấu của bạn với kết cấu lớn gấp 2 lần.

Bạn cũng có khả năng có nhiều phím màu (ví dụ như màu đỏ tươi và màu lục lam được ánh xạ lên màu của nhóm chính và phụ) mà không dành một kênh kết cấu cho mỗi màu.


1

Kỹ thuật của tôi sẽ là: Có 2 họa tiết: một họa tiết chính, một họa tiết thứ hai phủ lên phần chính nhưng chỉ có những phần bạn muốn được tô màu. Thay đổi màu của kết cấu thứ hai như bạn muốn.

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.