Cần tư vấn cho công cụ đồ họa dựa trên 3D BSP [đã đóng]


8

Tôi đã tự mã hóa trình xem OpenGL BSP cho định dạng trò chơi cũ. Nó rất giống với định dạng tệp Quake 3. Bởi vì sở thích của tôi là phát triển các công cụ đồ họa, tôi muốn được phát triển trong khi xem xét sử dụng công nghệ hiện tại. Vì vậy, tôi chuyển sang bạn, các chuyên gia về chủ đề này để định hướng những gì cần tập trung vào. Tôi muốn điều này càng nhanh càng tốt và xem xét các định dạng tệp cũ là rất đơn giản và có ít đa giác, tôi nghĩ rằng nó có thể thực hiện được. Đây là câu hỏi của tôi:

  1. Chiếu sáng a. Liệu nó có ý nghĩa đối với tôi để học ánh sáng đỉnh hay thay vào đó tôi chỉ nên thực hiện chiếu sáng theo pixel? b. Tôi biết OpenGL có giới hạn 8 ánh sáng. Tôi thực sự chỉ nên sử dụng một trong những thứ đó cho ánh sáng xung quanh và máy tính còn lại thông qua các shader? Nếu không, tôi phải làm sao?

  2. Sắp xếp / Culling a. Thuật toán được sử dụng phổ biến nhất nhanh nhất để sắp xếp các bề mặt để kết xuất là gì. Sự phức tạp không thực sự là một vấn đề. Tôi muốn tìm hiểu những gì hiện đang được sử dụng và những cách để thực sự chỉ hiển thị những thứ tôi có thể nhìn thấy. Tôi đã thấy một số thuật toán được mô tả như thuật toán của họa sĩ và đang tự hỏi điều gì có ý nghĩa nhất đối với hình học dựa trên BSP. b. Nếu tôi có kết cấu với mặt nạ alpha, tôi đã nói rằng sắp xếp có một số loại liên quan đến quá trình này. Làm cách nào để cho phép chúng hiển thị chính xác trong không gian 3d?

  3. Đường ống đồ họa a. Tôi có nên gửi dữ liệu hình học của mình qua VBO không? Đây có phải là tiêu chuẩn được sử dụng ngày nay? b. Nếu tôi có một số "vùng", có thể là 200-300, tôi có nên tìm cách tốt hơn để gửi chúng tới GPU mà không gửi 200-300 khối. Tôi có nên kết hợp chúng thành một và giữ một tài liệu tham khảo liên kết với nhau.

Bất kỳ lời khuyên nào khác cho kết xuất dựa trên BSP và những thứ thuộc về bản chất đó?

Ngoài ra, nếu tôi nói điều gì đó không đúng, xin vui lòng sửa cho tôi. Tôi là người thà được sửa chữa và hơi xấu hổ hơn là không biết gì và không biết gì.

Cảm ơn bạn đã dành thời gian. Tôi thực sự đánh giá cao nó.


Bạn có kế hoạch đưa tất cả các hình tam giác của cảnh vào BSP, cũng là những hình động như nhân vật hoạt hình hoặc vật thể chuyển động không? Một BSP không tốt lắm khi nói đến các đối tượng động.
Maik

Không có thời gian để nhận xét đầy đủ vào lúc này, nhưng hãy xem icculus.org/twilight/darkplaces/technotes.html và đừng ngần ngại nhảy vào #darkplaces trên irc.anynet.org và hỏi LordHavoc / những câu hỏi khác của bạn .
user_123abc

Câu trả lời:


1

Nếu bạn - như bạn nói - quan tâm đến công nghệ hiện tại :

1) Ánh sáng: Ánh sáng theo pixel, chắc chắn. Nếu bạn muốn xem kết xuất hiện tại, bạn sẽ xem xét cách viết các đỉnh và pixel. Đơn giản như thế. Chúng cung cấp sự linh hoạt gần như không giới hạn và không khó sử dụng hơn nhiều so với đường ống chức năng cố định, nếu bạn bắt đầu tìm hiểu chúng đúng cách. Giới hạn ánh sáng 8 của OpenGL chỉ áp dụng cho các thiết lập đường ống chức năng cố định kiểu cũ. Đừng đi theo con đường đó, tìm hiểu OpenGL Core và quên đi tất cả những thứ glBegin / glEnd ngày.

2) Sắp xếp / Culling: Để bắt đầu: chỉ sắp xếp nếu bạn cần minh bạch. Chỉ các đối tượng loại bỏ bên ngoài chế độ xem.

3) Nếu bạn đang sử dụng OpenGL, hãy sử dụng VBO và VAO.

-

Không được yêu cầu: nếu bạn đang tạo trình xem cho định dạng BSP kiểu cũ (tôi nghi ngờ điều gì đó từ công cụ Valve / ID ould?), Bạn có thể thoát khỏi việc vẽ toàn bộ cấp độ mà không cần bất kỳ loại tối ưu hóa nào (loại bỏ / bsp ) hoàn toàn và vẫn nhận được tốc độ khung hình đầy đủ trên phần cứng hiện đại;)

Mẹo OpenGL: Nhận phiên bản OpenGL Superible 5. Điều này sẽ dạy cho bạn cách thực hiện OpenGL hiện đại và sẽ không làm lu mờ tâm trí của bạn với những thứ mà sau này bạn phát hiện ra đã lỗi thời.


-3

1.a Chiếu sáng theo đỉnh dễ dàng hơn sau đó chiếu sáng theo pixel (chiếu sáng theo đỉnh được tích hợp vào OpenGL, chiếu sáng perpixel cần có bộ đổ bóng tùy chỉnh).

1.b Nếu bạn có tám đèn, hãy sử dụng chúng! Tuy nhiên, bạn sẽ phải tính toán đèn nào có thể nhìn thấy.

3.a Sử dụng VBOS. Không bao giờ sử dụng glBegin / glEnd (trừ khi bạn sử dụng danh sách hiển thị, nhưng trong tình huống của bạn, VBO là giải pháp tốt hơn)

3.b Bạn không nên lo lắng về hiệu suất trong khi chương trình vẫn đang được phát triển. Đặc biệt với phần cứng ngày nay. Vì vậy, gửi 200-300 chunk của bạn.

Tôi không biết bản đồ BSP đủ tốt để giúp bạn với các câu hỏi khác của bạn.


3
-1 cho 3.b. Tôi ghét câu thần chú "đừng lo lắng về hiệu suất" được áp dụng không chính xác cho mọi thứ. Nó có vị trí của nó, vì không dành 50% thời gian phát triển để làm cho thứ gì đó chạy nhanh hơn 2%. Nhưng khi thiết kế các hệ thống lớn hơn, thật tốt khi có một kế hoạch hiệu quả. Dữ liệu được gửi tới GPU trong 200-300 khối có thể sẽ khiến CPU và GPU hoạt động mạnh hơn không cần thiết nếu tất cả được gửi dưới dạng một khối.
Tấn côngHobo

@AttackingHobo +1
Jonathan Connell
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.