Vẽ bảng quảng cáo mà không bị biến dạng?


8

Tôi sử dụng cách tiếp cận tiêu chuẩn để lập bảng quảng cáo trong Unity, nhưng không lý tưởng:

transform.LookAt(camera)

Vấn đề là điều này đưa ra sự biến dạng về phía các cạnh của khung nhìn, đặc biệt là khi trường góc nhìn ngày càng lớn. Điều này không giống như bảng quảng cáo hoàn hảo mà bạn nhìn thấy trong ví dụ. Doom khi nhìn thấy kẻ thù từ mọi góc độ và không phân biệt vị trí của chúng trong không gian màn hình.

Rõ ràng, có nhiều cách để làm mờ hình ảnh trực tiếp vào khung nhìn, tập trung xung quanh một đỉnh duy nhất, nhưng tôi không nóng về các shader.

Có ai có bất kỳ mẫu nào của phương pháp này (GLSL nếu có thể) hoặc bất kỳ đề xuất nào về lý do tại sao nó không được thực hiện theo cách này (so với phương pháp chuyển đổi quad đã nói ở trên) không?

EDIT: Tôi đã bối rối, cảm ơn vì những người đứng đầu. Tất nhiên, Làm cho các quads nhìn vào camera không khiến chúng song song với mặt phẳng khung nhìn - đó là điều tôi cần.

Câu trả lời:


4

Tôi đang bối rối bởi câu hỏi của bạn bởi vì trong một dự báo triển vọng tiêu chuẩn, vẽ một đường song song với mặt phẳng billboard xem nào không giới thiệu méo. Nó tương đương với việc làm mờ hình ảnh vào khung nhìn với một tỷ lệ, trong đó tỷ lệ phụ thuộc vào độ sâu (khoảng cách vuông góc với mặt phẳng khung nhìn).

"Biến dạng" bạn đang thấy có thể xảy ra nếu hệ thống thực sự định hướng các hạt đối diện với máy ảnh hơn là mặt phẳng xem; gây ra xiên gần các cạnh màn hình. Hoặc, bạn có thể thấy rằng tỷ lệ của sprite thay đổi khi bạn xoay camera, vì khi khoảng cách được đo với mặt phẳng khung nhìn thay vì camera, sprite sẽ "gần hơn" và do đó lớn hơn khi nó rời khỏi màn hình.


1
@NickWiggill Tôi không quen thuộc với Unity, nhưng nếu bạn muốn có các góc đối diện với mặt phẳng khung nhìn thay vì đối diện với máy ảnh, về cơ bản, bạn đặt ma trận xoay của bốn góc bằng với ma trận xoay của máy ảnh. Bạn có thể cần thêm một góc quay 180 độ trong đó tùy thuộc vào cách các quads được xây dựng.
Nathan Reed

1

Tôi tin rằng bạn có thể đặt ma trận 3x3 hàng đầu (nói theo chuyên ngành) thành danh tính để thực hiện việc này. Tôi không thấy bất kỳ lý do nào khiến bạn không thể làm điều này trong trình tạo bóng, nhưng bạn có thể làm nhiều việc hơn theo cách đó. Bạn sẽ mất quy mô (trong ma trận biến dạng của bạn) theo cách này.

Chỉnh sửa: bài viết này hữu ích cho tôi cho bảng quảng cáo và mạo danh:

http://www.flipcode.com/archives/Billboarding-Excerpt_From_iReal-Time_Renderingi_2E.shtml

Tôi không biết điều này thông thường như thế nào, nhưng tôi gọi nó là "mạo danh" khi quan điểm được duy trì và "bảng quảng cáo" khi nó không.


Tôi nhận ra một cái gì đó. Tôi đang sử dụng Unity iOS / Android và một số thiết bị cũ hơn là OpenGL ES 1.1 - do đó, đường ống cố định. Vì vậy, để làm điều đó mà không cần shader là chìa khóa ở đây. Làm thế nào tôi có thể làm điều này mà không làm điều đó trong shader?
Kỹ sư

1
Đó có lẽ là cách rẻ hơn để làm điều đó. Trong mã của tôi, tôi có một lá cờ trên các họa tiết của mình để ra lệnh cho bảng quảng cáo hoặc mạo danh trước khi thực hiện các cuộc gọi rút thăm. Khi gặp trường hợp này, tôi chỉ cần lấy ma trận hiện tại, đặt 3x3 phía trên thành danh tính, sau đó cập nhật ma trận hiện tại.
thịt

À ... đánh giá cao chi tiết bổ sung nhưng vì tôi không có quyền truy cập vào các cuộc gọi GL (Unity trừu tượng hóa điều đó), tôi nghĩ rằng tôi khá khó chịu với phương pháp này.
Kỹ sư

Bạn không thể có được hoặc thiết lập ma trận hiện tại? Tôi chưa bao giờ sử dụng sự thống nhất ... Nếu không, có thể thử tìm kiếm "
unboard
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.