Làm cách nào để tạo hiệu ứng thị sai 2,5d?


8

Tôi có một nền tảng tốt về đồ họa và lập trình 3D, nhưng tôi chưa quen với việc phát triển trò chơi. Tôi hiện đang khám phá những khả năng khác nhau và tôi thực sự muốn tạo ra một game RPG. Tôi đã suy nghĩ về chế độ xem isometric 2D cổ điển, nhưng tôi thực sự thích cách Diablo 2 trông và cảm giác khi chơi.

Câu hỏi của tôi là - làm thế nào tôi có thể đạt được hiệu ứng thị sai của Diablo 2 ? Tất cả mọi thứ trông như được vẽ bằng đèn nướng và bóng tối và trông tuyệt vời, nhưng khi bạn di chuyển xung quanh bạn nhận thấy một số quan điểm .

Ví dụ: giả sử tôi đã vẽ một hội trường lớn với các cột trong Photoshop với phối cảnh chính tả (phong cách nghệ thuật pixel cổ điển, chỉ là các đường song song). Làm thế nào tôi có thể tạo hiệu ứng thị sai cho cảnh này khi nhân vật di chuyển xung quanh? Nếu tôi sử dụng các họa tiết đối diện với máy ảnh cho mọi thứ thì nó có thể trông ổn ở khoảng cách xa, nhưng nó sẽ thực sự giả khi một nhân vật đến gần một cột (hình trụ) chẳng hạn.

Bất kỳ đề xuất? Làm thế nào mà Blizzard tạo ra hiệu ứng thị sai trong Diablo 2?

Xem ảnh chụp màn hình này: http://guidesmedia.ign.com/guides/10629/images/act2tombs.jpg


Đó là máy ảnh kiểu RTS. google.com/#q=rts+game+camera
LiquidFeline

1
Tôi đã không hỏi về máy ảnh, đó là máy ảnh phối cảnh ở một góc nhất định so với mặt đất, đó là điều hiển nhiên. Câu hỏi của tôi là về môi trường và cách phối cảnh hoạt động.
Nikolay Dyankov

1
Không phải là một bản sao, AoE không có hiệu ứng thị sai. Hãy dành thời gian của bạn để đọc toàn bộ câu hỏi của tôi một lần nữa.
Nikolay Dyankov

1
Làm ơn đừng dán mũi vào câu hỏi này nếu bạn không có câu trả lời. Bạn rõ ràng không hiểu câu hỏi vì vậy hãy ngừng chỉnh sửa nó!
Nikolay Dyankov

2
Ai là kẻ ngốc đã hạ bệ điều này? Một số người trên trang này thực sự không có manh mối! Chỉ có ai đó chưa bao giờ chơi Diablo II mới có thể hạ cấp, tôi cho rằng!
Kỹ sư

Câu trả lời:


5

Đây là một câu trả lời dài, nhưng thực ra tiền đề cơ bản của chia-camera-z rất đơn giản: Càng xa thứ gì đó, bạn càng xuất hiện. Ngoài ra, khoảng cách nhỏ hơn giữa hai điều xuất hiện.

Vị trí (Không bắt buộc phải đọc nếu bạn đang sử dụng Unity!)

Đầu tiên, bạn cần kết xuất các vị trí / điểm sử dụng phối cảnh chính xác.

Vị trí nằm trên một mặt phẳng. Bạn muốn một cái gì đó giống như hình ảnh bên phải ... hãy xem xét các góc của gạch như các điểm / vị trí mẫu.nhập mô tả hình ảnh ở đây

Đây là cách bạn tiếp cận việc chuyển đổi điểm:

  • Hệ thống tọa độ của bạn như sau: tích cực zchạy vào màn hình, trong khi xchạy từ trái sang phải và ychạy xuống. Camera z thế giới z. Đó là lối tắt giúp việc này dễ dàng hơn nhiều so với viết một công cụ 3D đầy đủ. Nhược điểm? Máy ảnh không thể thay đổi hướng (mặc dù nó có thể thay đổi vị trí).
  • Lưu trữ vị trí 3D ban đầu của máy ảnh của bạn. Đặt nó phần nào trở lại (trừ z) từ nguồn gốc thế giới.
  • Lưu trữ một bộ sưu tập các điểm 3D trên mặt phẳng xz (cung cấp cho chúng y=0). Cố gắng tập trung chúng trên khắp thế giới x, trong đó , (0,0,0)từ tiêu cực nđến tích cực n. Điều này là để tập trung chúng vào khung nhìn, khi kết xuất bắt đầu.
  • Xem xét điểm gốc của điểm / điểm ảnh giảm dần là trung tâm của màn hình.
  • Quyết định khoảng cách từ máy ảnh có 1 đơn vị không gian thế giới = 1 pixel. Điều này có nghĩa là nếu bạn di chuyển máy ảnh chỉ 1 đơn vị không gian thế giới, bất kỳ đối tượng nào cách xa 10 đơn vị sẽ chỉ dịch chuyển 1 pixel - khá xa! Lưu trữ khoảng cách này là một hằng số K.
  • Bây giờ, đối với mọi điểm, kết xuất tại một vị trí bằng công thức sau: screenPosition(x,y) = screenOrigin + (worldPosition(x,y) - cameraPosition(x,y)) / ((worldPosition(z) - cameraPosition(z)) * K)... như bạn có thể thấy, chúng tôi đang căn cứ vào vị trí kết xuất trên zkhoảng cách giữa điểm hiện tại và máy ảnh.

  • Chơi với vị trí z của máy ảnh cho đến khi bạn thấy các điểm được hiển thị. Nhưng những gì bạn sẽ thấy là tất cả các điểm sẽ hiển thị trên đường trung tâm của màn hình. Vì vậy, chúng ta cần phải khắc phục điều đó. Hãy thử K=1so với K=10để thấy sự khác biệt.

  • Bây giờ bạn có thể di chuyển camera vào yđể xem camera của bạn đi phía trên và bên dưới mặt phẳng các điểm như thế nào (tức là các điểm sẽ hiển thị, phối cảnh chính xác, bên dưới hoặc bên trên đường giữa của màn hình, khi bạn di chuyển camera lên và xuống ).

Đây là những hướng dẫn rất thô. Có một số chi tiết thực hiện sẽ tùy thuộc vào bạn. Bước đầu tiên chỉ là để có được một cái gì đó hiển thị, sau đó sửa đổi từ đó. Một chi tiết gây chú ý là nếu bạn muốn máy ảnh trông giống như nhìn xuống mặt đất, thì bạn cần phải chuyển nguồn gốc kết xuất của mình lên trên, gần với đỉnh của khung nhìn. Một chi tiết khác là khoảng cách giữa máy ảnh và điểm của bạn có thể cần bao gồm tỷ lệ trig ... Tôi nghĩ rằng việc sử dụng tancung cấp phối cảnh thực tế hơn. Đừng nhớ rõ về điều này, nhưng bạn sẽ nhanh chóng thấy nếu phối cảnh trông lạ và có thể điều chỉnh phù hợp. Tôi không thể cụ thể hơn mà không viết lại một mẫu.

Per-billboard cong vênh và tỉ lệ (bắt buộc)

Bây giờ bạn có thể thấy phối cảnh giữa các vị trí điểm của mình và có thể thêm, xóa hoặc di chuyển các vị trí (như với các ký tự), bạn cũng cần áp dụng phối cảnh cho các họa tiết riêng lẻ sẽ được bắt nguồn từ các vị trí đó.

Trong D2, tôi luôn thấy đó là một chức năng dọc đơn giản được áp dụng nhiều hơn cho các bảng quảng cáo ở phía dưới màn hình, hơn là ở phía trên và cũng như khi bạn đi xa hơn từ đường giữa chạy xuống màn hình.

Có thể có một số tỷ lệ dọc được áp dụng cho các bảng quảng cáo, ví dụ. cây trở nên ngắn hơn so với tỷ lệ dự kiến ​​của chúng, gần phía dưới màn hình (để làm cho nó xuất hiện như thể máy ảnh đang nhìn xuống cây - tôi thấy cây của Tristram là cách tốt nhất để khám phá điều này một cách an toàn, trở lại trong ngày ;) ).

Những gì tôi sẽ làm là:

  1. Giải quyết chức năng mở rộng cơ bản dựa trên khoảng cách từ camera đến mặt đất tại các điểm khác nhau. Vì vậy, bạn có tỷ lệ tương tự cho mỗi đường quét.
  2. Chỉ sau khi tôi thực hiện điều đó, tôi mới nhìn vào sợi dọc bên - đầu tiên dựa trên khoảng cách từ đường giữa chạy xuống màn hình.
  3. Cuối cùng tôi sẽ điều tra làm thế nào mà sợi dọc bên bị ảnh hưởng bởi khoảng cách xuống màn hình (và tôi có cảm giác rằng một tỷ lệ trig đơn giản sẽ là trung tâm của điều này).

Ốp lát phối cảnh chính xác (Không bắt buộc phải đọc nếu bạn đang sử dụng Unity!)

Ở trên hy vọng sẽ cung cấp cho bạn vị trí chính xác, cong vênh "đứng lên" (tức là các đối tượng ngồi vuông góc với mặt phẳng mặt đất, chẳng hạn như nhân vật, cây cối, nhà cửa).

Tuy nhiên, bạn cũng cần xem xét làm thế nào để gạch đất biến dạng chính xác và liền mạch. Và tôi nghĩ rằng bạn sẽ thấy đó là phần, đặc biệt, yêu cầu GPU trên D2. Tôi nhớ rằng trên các hệ thống không có GPU, tùy chọn phối cảnh đã bị tắt. Lý do cho điều này gần như chắc chắn là GPU có thể chiếm bề mặt kết cấu và áp dụng hiệu chỉnh phối cảnh cho nó rất nhanh, không có bất kỳ trục trặc nào giữa các ô và không lo ngại về việc thực hiện các phép biến đổi không liên quan trong mã ứng dụng, liên quan đến một số phép toán ma trận và có thể hơi tốn kém:

nhập mô tả hình ảnh ở đây

Tôi có một vài gợi ý để bạn giải quyết vấn đề này:

  • (Unity) Sử dụng Camera Unity để cung cấp kết xuất mặt phẳng phẳng, có kết cấu, sau đó xử lý các biến dạng của bảng quảng cáo một cách riêng biệt dựa trên các vị trí không gian màn hình.
  • Thực hiện logic này (hoặc thậm chí tất cả logic kết xuất) trong trình tạo bóng GPU.
  • Đừng sử dụng gạch đất. Thay vào đó, chỉ cần sử dụng các họa tiết điểm - giống như chính các ký tự - trên mặt phẳng có màu đồng nhất (ví dụ: màu xanh lá cây cho cỏ) để cung cấp chi tiết cho mặt phẳng đó trông không bị xỉn. Điều này sẽ làm tăng chi phí kết xuất của bạn, nhưng nó chắc chắn là cách dễ nhất để giải quyết vấn đề này.

Đáng buồn thay, điều duy nhất mà tôi hiểu là "tỉ lệ dọc". Có lẽ tôi nên bám vào isometric 2D bây giờ.
Nikolay Dyankov

Ok, hãy để tôi đơn giản hóa câu hỏi của tôi, làm thế nào bạn có thể làm cho hình trụ 2d được vẽ 3d? Một cái gì đó được vẽ như thế này - media.web.britannica.com/eb-media/49/63049-004-C560D293.gif
Nikolay Dyankov

Không có quan điểm về những điều đó. Bạn muốn thảo luận trong trò chuyện?
Kỹ sư

Chắc chắn, xin vui lòng bắt đầu trò chuyện, tôi không biết làm thế nào :)
Nikolay Dyankov

^ đầu trang ^
Kỹ sư
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.