Vẽ các hành tinh quay rất chậm


8

Tôi muốn vẽ đồ họa rất lớn (~ 500 px) của các hành tinh đang quay chậm. Những đồ họa này là để gây ấn tượng. Cách tốt nhất để làm điều này là gì? Tôi không có kinh nghiệm với bất kỳ công cụ 3D cụ thể nào và tôi thậm chí không chắc trò chơi này sẽ chạy trên nền tảng nào, vì vậy:

  • Tôi có thể kết xuất trước mỗi khung hình, nhưng ở 500px và thời gian quay là 10 giây, đó là một lượng dữ liệu lố bịch trên mỗi hành tinh.
  • Tôi có thể sử dụng một công cụ 3D và ánh xạ kết cấu của hành tinh lên một lưới tiếp cận một hình cầu, nhưng ở 500px, tôi sợ số lượng đa giác sẽ phải rất lớn để làm cho nó trông đẹp.
  • Tôi có thể viết một loại công cụ 3D tùy chỉnh mà không làm gì một cách hiệu quả hình cầu có kết cấu, bằng cách chuyển đổi tọa độ x / y của từng pixel xem thành không gian tọa độ của kết cấu của hình cầu - nhưng điều này có liên quan và không thể hưởng lợi từ tăng tốc đồ họa.
  • Một cái gì khác tôi không nghĩ đến?

Đây là một ví dụ GIF hoạt hình về những gì tôi muốn nói. (Với 100x100 px và 60 khung hình, nó đã khá lớn, xin lỗi.) Hãy tưởng tượng điều này nhiều, lớn hơn nhiều, quay chậm hơn nhiều và hoạt hình mượt mà hơn:

văn bản thay thế

Nhưng nếu đây là 500x500 px và 10 x 25 = 250 khung hình, chúng ta sẽ nói về hàng trăm MB dữ liệu, vì vậy phương pháp đơn giản này không hiệu quả.


Điều này là không thể trả lời nếu bạn không biết nền tảng mục tiêu của bạn là gì.
Tấn

1
Chà, nếu có kích thước 500px, thì đó không phải là iPhone 4G / Android tương đương, đó là điều duy nhất tôi mong muốn gặp rắc rối với kết xuất đơn giản như vậy.

8
Hmm, tôi nghĩ rằng câu trả lời có thể chỉ đơn giản là "Zarkonnen, bạn không biết GPU ngày nay mạnh đến mức nào". : P
Zarkonnen

1
Đây dường như không phải là một lượng lớn dữ liệu.
Vịt Cộng sản

Câu trả lời:



4

Vì bạn đang nhìn vào quả cầu với một camera không đổi, bạn có thể thực hiện kết xuất chất lượng cao cực kỳ nhanh chóng với một bảng tra cứu được tính toán trước đơn giản.

Là bước xác định trước, với bất kỳ phương pháp nào bạn thích (thường là với đa giác hoặc raytracing), bạn kết xuất một hình cầu ánh xạ kết cấu vào bộ đệm offsceen, nhưng thay vì tính toán màu sắc dựa trên kết cấu, bạn chỉ lưu trữ tọa độ u / v.

Sau đó, khi kết xuất hành tinh thực tế, bạn hiển thị một hình vuông đơn giản và với mỗi pixel bạn lấy các tọa độ u / v thực tế từ bảng tra cứu và màu pixel từ kết cấu hành tinh bằng các tọa độ u / v đó. Để xoay quả cầu bạn chỉ cần bù tọa độ u với góc xoay.

Kỹ thuật này rất phổ biến trong demoscene, ví dụ với các hiệu ứng đường hầm được ánh xạ kết cấu, nhưng tiếc là tôi không thể tìm thấy bất kỳ hướng dẫn tốt nào về nó.


0

Nếu bạn đang làm điều này trong cài đặt 2D, hãy xem câu hỏi trước đây ...

Ảo ảnh 3D về kết cấu hành tinh 2D

Khái niệm tương tự sẽ hoạt động tốt với một hình ảnh lớn và bằng cách di chuyển linh hoạt kết cấu địa hình trên một lớp bên dưới "lỗ hổng" trong không gian.

Đọc liên kết trên để biết ý của tôi là gì


3
Tôi thực sự không thích phương pháp đó, bởi vì nó trông giống hệt như nó. Một kết cấu phẳng được di chuyển mà không bị biến dạng khi nó quay.
Tấn

0

Nếu bạn nén hoạt ảnh kết quả bằng một codec video hiện đại, nó sẽ không đặc biệt lớn và không ở đâu gần "vài trăm MB dữ liệu" cũng không phải là lố bịch ...

Nhưng như đã nêu, tất cả phụ thuộc vào nền tảng mục tiêu của bạn là gì và như mọi người khác đã nói; chỉ cần hiển thị một hình cầu 3D trơn tru thực sự sẽ bao gồm một lượng đa giác không đáng kể và rất ít lưu trữ dữ liệu (kết cấu là tất cả và thậm chí ở độ phân giải thực sự cao, nén jpeg tiêu chuẩn sẽ không làm giảm nó).

Tất cả cũng phụ thuộc một chút vào mức độ kén chọn của bạn - nếu bạn theo dõi các chi tiết kết cấu và hình ảnh cuộn theo phần tư ngang với các bản demo hiện đại và không chỉ các trò chơi hiện đại với tất cả nội suy và bí danh của chúng các vấn đề ngay cả ở FSAA 8x - sau đó nó có thể tham gia gần như vô tận để đạt được (và cũng cần một chút mánh khóe nghệ thuật) ^^


1
-1 - "nén jpeg tiêu chuẩn" không tồn tại cho kết cấu và đoạn thứ ba của bạn không thực sự có ý nghĩa. "Cuộn pixel quý" có thể đạt được thông qua bộ lọc tiêu chuẩn trong OpenGL / Direct3D và AA sẽ không đáng kể cho một cảnh như vậy.

Thật. Để bảo vệ tôi, khi câu hỏi nêu "lượng dữ liệu lố bịch trên mỗi hành tinh" cho một giải pháp hoạt hình - tôi đã nghĩ đến việc lưu trữ dữ liệu, không phải thông lượng dữ liệu. Đoạn cuối chủ yếu là một nhận xét hỏi thanh được đặt cao như thế nào. Tôi chưa bao giờ thấy AA là tầm thường, ngay cả những giải pháp kết xuất ngoại tuyến khắt khe nhất cho phim thực hiện hàng trăm lần theo cách kỳ lạ cũng có một số bí danh ngay khi mọi thứ bắt đầu chuyển động, đặc biệt là trên màn hình máy tính mật độ thấp - nhưng hầu hết mọi người không cho rằng kén chọn, khó tính.
Oskar Duveborn

0

Nếu bạn gặp vấn đề với hiệu suất theo cách truyền thống này (kết cấu và ánh xạ bình thường trên hình cầu đa giác cao), như nhiều người đã đề cập không phải là vấn đề ở độ phân giải đó:

"Raytrace" nó với một shader mảnh. Nếu máy ảnh của bạn được cố định, tất cả những gì bạn cần là một đầu vào float đồng nhất cho shader mảnh của bạn (cho góc quay) và shader có thể đảm nhiệm việc tính toán tọa độ kết cấu. Các vectơ ánh sáng thậm chí có thể giống nhau từng khung hình. Đối với khử răng cưa, bạn cũng có thể có được một hình cầu hoàn hảo với một chút khéo léo (nếu pixel nằm trên ranh giới hình cầu, hãy tính phạm vi bảo hiểm của nó)

Điều này có bạn chỉ gửi 4 đỉnh qua đường ống và không yêu cầu bạn phải phân bổ bộ đệm khung đa năng khổng lồ để chống lại răng cưa.

Với chi phí phải đưa ra một số thuật toán xây dựng theo đơn đặt hà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.