Hẳn mọi người đã biết camera an ninh hoạt động như thế nào, nó quay lại bằng camera sau đó truyền hình ảnh lên các phương tiện khác như web hay app.
Trong bài viết này, mình cũng sẽ hướng dẫn các bạn làm tương tự, bằng cách dùng Render Target, hoạt động như một camera độc lập, render hình ảnh trong game và sau đó chiếu lên một material.
Bắt đầu nào!
Render Target là gì ?
Render Target, hay tên đầy đủ là Render Target 2D, là một component trong Unreal có chức năng như một camera, nhưng có thể được dùng để truyền hình ảnh thu được cho những mục đích sử dụng khác nhau. Để tạo một RenderTarget, ta chuột phải Content Browser -> Materials & Textures và chọn Render Target:
Hãy đặt tên là CCTV_RenderTarget.
Ở vùng khoanh đỏ ta có 2 thông số là Size X và Size Y tượng chưng cho kích thước mà RenderTarget sẽ thu lại, số càng cao, chất lượng thu được càng rõ, và kích thước càng lớn (tương tự như video 1080p hay 720p).
Trong ví dụ này, ta sẽ để là 1024×1024.
Thiết lập CCTV actor
Tiếp theo ta cần 3 thứ
- Material chứa ảnh render từ CCTV_RenderTarget
- Một actor đóng vai trò là CCTV
- Một widget để hiển thị lên màn hình người chơi
Ta sẽ đi từng bước một. Trước tiên hãy tạo một material trống, đặt tên là M_CCTVRender.
Mở material lên, ta cần làm đầu tiên là chuyển Material Domain sang User Interface và Blend Mode sang Masked
Sau đó, ta sẽ tạo một Texture Sample, với Texture chính là tấm CCTV_RenderTarget. Thiết lập như dưới:
Lưu ý: các bạn có thể kiếm 1-x bằng cách tìm kiếm keyword “1-x” hoặc “one minus”.
1-x là thuật toán để invert lại một layer, trong trường hợp này là Alpha của CCTV_RenderTarget.
Sau đó chỉ việc apply và save.
Tiếp theo đó, ta cần một actor đóng vai trò là CCTV. Hãy tạo một actor và đặt tên là BP_CCTV. Mở actor lên để edit, và thêm một component mới mang tên SceneCaptureComponent2D.
Click vào component ta vừa tạo, ở phía tab Details, có thể thấy các thuộc tính của nó rất giống với một camera, với cái thông số như là Field of View, Projection Type cũng như là Post Process Effects.
Nếu muốn các hiệu ứng đặc biệt khi render, ta có thể tùy chỉnh các thuộc tính đó. Trong ví dụ này, hãy chỉ quan tâm phần sau:
Ở phần Texture Target, ta chọn CCTV_RenderTarget đã tạo trên.
Một số thuộc tính bạn có thể muốn quan tâm như là:
- Capture Every Frame : tắt đi, nó sẽ chỉ render 1 lần khi mới khởi tạo, nếu muốn render tiếp, bạn phải gọi hàm Capture Scene từ Scene Capture Component.
- Capture on Movement : tắt đi, nó sẽ render liên tục, còn không nó chỉ render khi thấy có di chuyển hay thay đổi trong scene.
- Primitive Render Mode : phương thức render, bạn có thể chọn render chỉ nhưng object trong list, render toàn scene hoặc render các thành phần định sẵn.
Như vậy đã xong actor CCTV. Bạn có thể thả vào level và đặt ở một ví trí mà bạn muốn camera sẽ thu lại cảnh.
Và cuối cùng là widget để hiển thị hình ảnh từ CCTV. Hãy tạo một widget blueprint và đặt là WBP_CCTV.
Thiết lập cho widget một tấm Image, với texture là M_CCTVRender ta đã tạo trên:
Như vậy là xong, bước cuối cùng là tạo cái widget và thêm vào viewport để hiển thị. Mình sẽ tạo widget trong class BP_MyPC đã tạo từ trước.
Comments