Một số cách để kết cấu bản đồ một địa hình là gì?


10

Tôi đang làm việc với XNA trên Trò chơi 3D và tôi đang cố gắng có một môi trường phù hợp và tốt đẹp. Tôi thực sự đã làm theo một hướng dẫn để tạo một địa hình từ sơ đồ chiều cao. Để kết cấu nó, tôi chỉ cần áp dụng một kết cấu cỏ trên nó và gạch nó một số lần.

Nhưng những gì tôi muốn làm là có một kết cấu thực sự thực tế, nhưng cũng tự động tạo ra nó (ví dụ nếu tôi muốn sử dụng tiếng ồn Perlin để tạo địa hình và sau đó kết cấu nó).

Tôi đã tìm hiểu về đa kết cấu, tải tệp bản đồ với các màu khác nhau cho các kết cấu khác nhau, nhưng tôi không nghĩ rằng điều này thực sự hiệu quả, ví dụ như đối với các vách đá hoặc các khu vực rất dốc, nó sẽ tạo ra kết cấu xấu khi nhìn từ hàng đầu. (Ngoài ra, tôi không biết làm thế nào tôi sẽ vẽ những con đường hoặc con đường đất bằng thứ đó.)

Tôi đang tìm kiếm một giải pháp hiệu quả cho việc lập bản đồ kết cấu theo địa hình thực tế.


1
Vấn đề lập bản đồ của bạn không hề nhỏ. Nó không thể được trả lời đúng trong một vài đoạn. Tôi khuyên bạn nên xem bản đồ hài hòa và những gì được giải thích trong bài viết này: cs.ubc.ca/~sheffa/ con / TOG02.pdf
teodron

Câu trả lời:


2

Tôi đoán bạn không quan tâm đến các bản đồ pha trộn hoặc kết cấu kết cấu (vì nó độc lập với ánh xạ UV của bạn). Vì bạn đặc biệt yêu cầu giảm thiểu biến dạng do ánh xạ gây ra, bạn có thể tham khảo phần 1.5 của bài viết GPU Gems này:

https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch01.html

Điều này có thể làm việc ngay cả trên địa hình được tạo theo thủ tục. Khái niệm này còn được gọi là "kết cấu ba lớp" .

EDAT LATER: Tôi đã thử nghiệm kỹ thuật này trong trình kết xuất địa hình của riêng tôi bằng cách sử dụng không có tia cực tím được tính toán trước cho ánh xạ. Tất cả những gì bạn phải làm là tính toán 3 bộ UV cho 3 mặt phẳng chiếu khác nhau (XY, YZ và ZX). Điều này có thể đạt được bằng cách sử dụng các đoạn shader đỉnh và đoạn đơn giản:

VShader:

float tileSize = 2.0;
vec4 worldPos = ( gl_Vertex);//So we obtain the world position

TexCoordX = (worldPos.zy/tileSize);//here are our texture coordinates...
TexCoordY = (worldPos.xz/tileSize);
TexCoordZ = (worldPos.xy/tileSize);
normal =  gl_Normal;
wNormal = normal;

FShader:

vec3 n = wNormal;
n*=n;
vec2 tcX = fract(TexCoordX);
vec2 tcY = fract(TexCoordY);
vec2 tcZ = fract(TexCoordZ);

vec4 grassCol = texture2D(grassTexture,tcX)*n.x+
                texture2D(grassTexture,tcY)*n.y+
                texture2D(grassTexture,tcZ)*n.z;

3

Bạn có thể định nghĩa một tập hợp các kết cấu (cỏ, bụi bẩn, đá) và sử dụng chúng. Giả sử sử dụng ba lớp này (đá ở dưới cùng, bụi bẩn ở trên cùng và trên cùng), bạn có thể xác định ba kênh alpha để xác định mức độ hiển thị của mỗi kết cấu. Bắt đầu với một bản đồ tiếng ồn đơn giản cho các kênh alpha của bạn và có thể tính đến độ dốc của địa hình. Độ dốc càng nhiều, đá sẽ càng tỏa sáng. Đây là một kỹ thuật gọi là 'Hoạ tiết họa tiết' theo như tôi nhớ. Dưới đây là một số liên kết để giúp bạn bắt đầu. Hoạ tiết kết cấu nâng cao (gamasutra)

TextureSplatted (charlesbloom, cái tôi đã sử dụng để bắt đầu với chủ đề này)

Bạn sẽ có thể nhận được kết quả tìm kiếm tốt khá nhanh chóng, chủ đề rất bổ ích

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.