Làm cách nào tôi có thể ghi lại cảnh quay trò chơi dưới dạng video trong Unity?


8

Tôi đang xây dựng một trình mô phỏng giao thông trong Unity. Tôi cần ghi lại trò chơi của mình dưới dạng video để có thể sử dụng video cho mục đích học máy. Tôi đã sử dụng các yếu tố tương tự nhưng không thấy nó hoạt động với tôi vì nó không nằm trong Unity. Làm thế nào tôi có thể quay video về trò chơi?


1
Bạn có ý nghĩa gì khi không tìm thấy nó "thuyết phục"?
doppelgreener

Tôi muốn một cái gì đó có video trò chơi trong sự thống nhất.
Dg

Tôi không nghĩ có một cách. Tôi sử dụng GIPHY cho việc này, nhưng FRAPS cũng sẽ ổn thôi.
Jesse Williams

Bạn có thể lưu trữ ảnh chụp màn hình từ Unity, nhưng đây chỉ là những ảnh tĩnh. Nó có tác động lớn đến tốc độ khung hình của bạn, vì vậy nó không thực sự phù hợp để làm phim, trừ khi bạn sẵn sàng thực hiện 'kết xuất' (nghĩa là chạy mô phỏng cực kỳ chậm, tạo PNG và sau đó ném chúng lại với nhau một video thông qua Premiere hoặc một trình chỉnh sửa video tương tự)
Steve Harding

Tôi không phải là chuyên gia về học máy, nhưng tôi chỉ tò mò tại sao bạn cần xử lý hình ảnh, nếu bạn có các đối tượng chứa đầy dữ liệu để xử lý?
Mặt trăng thí sinh _Max_

Câu trả lời:


2

Nó sẽ khó khăn.

Bạn sẽ cần tìm phần mềm ghi màn hình với API để có thể kích hoạt nó bằng ứng dụng khách.

Bandicam ( http://www.bandicam.com/ ) dường như có API chụp màn hình cơ bản. Các API nằm trong C / C ++ nhưng trên lý thuyết bạn có thể gọi API C từ ứng dụng C # /. NET.

Người dùng của bạn sẽ cần cài đặt Bandicam và bạn chỉ bị giới hạn ở các nền tảng Windows.

Sẽ thật tuyệt khi kích hoạt ShadowPlay hoặc các hệ thống chụp được nhà cung cấp hỗ trợ khác có API, nhưng hiện tại tôi không biết gì về nó. Bạn có thể nghĩ rằng tính năng Game Capture của Windows 10 có SDK, nhưng tôi không thể thấy bất kỳ tài liệu tham khảo nào.

https://www.bandicam.com/company/sdk/bandi_capture_l Library / help / Ch CHƯƠNG3.html


0

Tôi có một giải pháp đơn giản mà tôi đã sử dụng để tạo video trong câu hỏi này ....

Để ghi lại màn hình Tôi đang sử dụng trình ghi màn hình Iceream ( Không liên kết theo bất kỳ cách nào chỉ là một người dùng hài lòng ) nhập mô tả hình ảnh ở đây

nó cho phép bạn chọn và ghi lại phần trên màn hình, vì vậy nếu bạn dùng thủ công thì điều này có thể làm được


Làm thế nào để bạn kích hoạt nó từ trò chơi Unity? Khách hàng của tôi quan tâm đến cách sắp xếp tương tự - có thể bắt đầu ghi màn hình từ bên trong trò chơi - và thật tuyệt khi có tùy chọn Mac. Nhưng bạn đã không đề cập đến cách nó được thực hiện.
Steve Harding

@SteveHending Chào Steve. Bạn làm thủ công, chọn phần màn hình và sau đó chỉ ghi ... Nếu bạn có bit nơi bạn đã ghi bắt đầu trò chơi, bạn có thể cắt nó sau ...
Matas Vaitkevicius

1
Tôi lấy "nó không nằm trong Unity" có nghĩa là "Nó không thể được kiểm soát", vì FRAPS và nhiều người bạn của nó - bao gồm các công cụ được tích hợp trong Windows và giao hàng với thẻ video của bạn - hoạt động tốt cho các trò chơi Unity. Nó có thể là tôi giải thích sai câu hỏi mặc dù.
Steve Harding

0

Bạn có thể sử dụng API Unity để làm điều này. Không cần cho bất kỳ bên thứ 3. Unity tự kết xuất một khung, tại sao bạn lại cần một cái gì đó để hiển thị lại hoặc lưu trữ kết cấu được hiển thị từ bộ nhớ bên ngoài nó, khi bạn có thể làm điều này trong C #? Phải, không cần phải làm điều này. Nhưng tại sao điều này lại khó khăn như vậy? Tại sao tôi không thể lấy kết cấu này? Tôi thực sự không có câu trả lời đúng cho vấn đề này vì tôi không phải là chuyên gia về GPU. Nhưng theo như tôi biết, mặc dù GPU có bộ nhớ, nhưng nó sẽ xóa mọi thứ từ đó rất thường xuyên, tôi đoán mọi khung hình. (Xin vui lòng nếu bạn hiểu chủ đề này về GPU nhiều hơn tôi, hãy giải thích nó trong các bình luận, tôi rất biết ơn vì điều này).

Diễn đàn Unity này dành riêng cho câu hỏi này: Làm thế nào để truy cập bộ đệm độ sâu được kết xuất đúng cách?

Unity cho phép kết xuất camera theo cách thủ công: Camera Render .

Với một số mã:

Ngoài ra, nếu đây là VR hoặc không, chủ đề này chắc chắn sẽ hữu ích và sẽ tiết kiệm rất nhiều thời gian để tìm kiếm các lượt truy cập hiệu suất: Chụp ảnh thời gian thực trong Unity .

// Setup a camera, texture and render texture
Camera cam = ...;
Texture2D tex = ...;
RenderTexture rt = ...;

// Render to RenderTexture
cam.targetTexture = rt;
cam.Render();

// Read pixels to texture
RenderTexture.active = rt;
tex.ReadPixels(rectReadPicture, 0, 0);

// Read texture to array
Color[] framebuffer = tex.GetPixels();

Đây là mã từ tài liệu Unity về cách lưu trữ kết xuất vào png.

// We should only read the screen buffer after rendering is complete
yield return new WaitForEndOfFrame();

// Create a texture the size of the screen, RGB24 format
int width = Screen.width;
int height = Screen.height;
Texture2D tex = new Texture2D(width, height, TextureFormat.RGB24, false);

// Read screen contents into the texture
tex.ReadPixels(new Rect(0, 0, width, height), 0, 0);
tex.Apply();

// Encode texture into PNG
byte[] bytes = tex.EncodeToPNG();
Object.Destroy(tex);

// For testing purposes, also write to a file in the project folder
File.WriteAllBytes(Application.dataPath + "/../SavedScreen.png", bytes);

Bạn nói rằng bạn có thể làm điều này trong API Unity sau đó bạn nói rằng bạn không biết cách thực hiện. Sau đó, bạn cung cấp các liên kết như một câu trả lời làm cho câu trả lời này (thực tế) là một câu trả lời chỉ liên kết. Và ngay cả khi các liên kết giải thích cách truy cập vào kết cấu bộ đệm, bạn không giải thích quy trình để biến nó thành video hoặc thậm chí làm thế nào để lưu nó.
Charanor

@Charanor Tôi đã viết rằng tôi không hiểu đầy đủ về cách thức hoạt động của GPU. Tôi đã không nói rằng tôi không biết làm thế nào để làm điều đó. Liên kết cuối cùng có một mã rõ ràng về cách thực hiện, tôi chỉ không muốn sao chép nó từ nguồn và cung cấp thông tin đầy đủ. Ngoài ra, nếu bạn không biết cách tạo video từ một loạt các hình ảnh, tôi đoán bạn không cần điều này - bởi vì đây là chủ đề quá rộng để nói về vấn đề này. Chỉ cần truy cập và google nó, bạn không thể định dạng video trong Unity. Nếu bạn đặt câu hỏi như vậy - trước tiên bạn phải thực hiện một số nghiên cứu trước khi mọi người viết cho bạn một giải pháp hoàn chỉnh.
Mặt trăng thí sinh _Max_

@Charanor Và cuối cùng, lưu một hình ảnh bên trong Unity, docs.unity3d.com/ScriptReference/Texture2D.EncodeToPNG.html , bạn đến đây. Tôi mất 5 giây để mở một tab mới và google nó. OP đang học máy, tôi không nghĩ anh ấy sẽ xử lý định dạng video, nhưng các khung của video đó - điều này làm cho nó bớt khó khăn hơn vì anh ấy sẽ không cần phải chia video thành hình ảnh.
Mặt trăng thí sinh _Max_

Tôi vẫn sẽ đề nghị thêm nội dung có liên quan của các liên kết của bạn vào câu trả lời của bạn kể từ bây giờ nếu các liên kết chết câu trả lời của bạn không trả lời câu hỏi (do đó tại sao nó chỉ là một câu trả lời liên kết).
Charanor

@Charanor Ở đây bạn đi, thêm mã :) Bạn đã thực hiện một điểm tốt, cảm ơn bạn đã trả lời.
Mặt trăng thí sinh _Max_
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.