Làm thế nào tôi có thể làm cho các hạt phát sáng và chiếu ánh sáng vào môi trường xung quanh nó?


22

Tôi hiện đang cố gắng tạo hiệu ứng đom đóm trên một khu rừng tối. Mức độ có ánh sáng rất thấp và người chơi là một trong số ít nguồn sáng. Để cho người chơi thấy cấp độ tốt hơn, tôi đang cố gắng làm cho những con đom đóm phát sáng xuất hiện ngẫu nhiên trên bản đồ. Một cách là sử dụng một hệ thống hạt. Nhưng tôi không thể làm cho các hạt phát sáng xung quanh. Có cách nào để làm việc này không?


3
Vấn đề thực sự ở đây là "ánh sáng là đắt tiền." Bạn có thể tốt hơn hết là đặt một số đèn điểm cố định làm sáng đủ khu vực, nướng đèn thành ánh sáng, sau đó sử dụng các hạt để giải thích nguồn sáng đến từ đâu, thay vì sử dụng hàng tá đèn động đắt tiền khủng khiếp.
Draco18

@ Draco18s Sẽ không có hàng tá đom đóm. Họ sẽ chỉ xuất hiện trong tầm nhìn của người chơi. Nó là từ trên xuống và như vậy dễ kiểm soát. Và tại bất kỳ thời điểm nào, chỉ nên có ít hơn 10 con đom đóm. Tôi không cho rằng 10 điểm ánh sáng động là đắt?
DarkDestry

Theo mặc định, Unity chỉ cho phép hai đèn động hoạt động chiếu sáng hình học tại một thời điểm (mặc dù nó có thể khác nhau đối với thiết lập 2D). Tất nhiên, bạn có thể tăng điều này, nhưng hãy nhớ rằng ánh sáng +1 là x2 tác động đến các cuộc gọi rút thăm.
Draco18

2
@ Draco18s điều này có thể đúng với đường dẫn hiển thị phía trước, nhưng như đã nêu trong tài liệu "Khi sử dụng Bóng mờ bị trì hoãn, không có giới hạn về số lượng đèn có thể ảnh hưởng đến một đối tượng" - Nhiều đèn nhỏ chỉ ảnh hưởng đến một phần nhỏ của màn hình chính xác là loại đường dẫn kết xuất hoãn sử dụng vượt trội trong việc xử lý hiệu quả. (Với chi phí điển hình của một cuộc gọi rút thăm cho mỗi ánh sáng duy nhất, thay vì số nhân như với kết xuất chuyển tiếp)
DMGregory

Đó là một điểm hay. Tôi quên mất các đường dẫn kết xuất khác nhau hầu hết thời gian.
Draco18

Câu trả lời:


7

Các hạt phát sáng hiện là một tính năng Unity tích hợp trong 5.5.

Đơn giản chỉ cần bật Đèn trong trình kiểm tra hạt, ném tham chiếu đến prefab ánh sáng (cả đèn điểm và đèn điểm đều hoạt động) và thay đổi Tỷ lệ thành 1.

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

Và voilà, các hạt phát ra ánh sáng: ! [nhập mô tả hình ảnh ở đây

Hóa ra, đây là một thiết lập khá tối ưu, chạy ở tốc độ 1500 + khung hình / giây trên giàn của tôi ngay cả với ánh sáng tối đa trong hàng trăm.

Chỉnh sửa: Sau một số quan sát, dường như với tôi rằng các hạt ánh sáng chuyển đổi giữa ánh sáng mảnh và ánh sáng đỉnh (có lẽ là để tối ưu hóa?). Điều này có thể tạo ra một lượng nhỏ các tạo tác trực quan nếu đèn tối đa được đặt quá cao.

Chỉnh sửa 2: Như DMGregory đã chỉ ra, các tạo phẩm là sản phẩm phụ của tối ưu hóa kết xuất phía trước. Ánh sáng hoãn lại giải quyết vấn đề. Đã thêm gif đẹp hơn


1
Đó là tin tốt! :) Câu trả lời này sẽ còn tốt hơn nếu nó bao gồm một số hướng dẫn từng bước về cách thiết lập điều này với các tính năng hệ thống hạt mới.
DMGregory

1
Hành vi chiếu sáng đỉnh bạn đang thấy âm thanh hơi giống một số tối ưu hóa mà Unity áp dụng trong kết xuất phía trước. Bạn có thấy hành vi tương tự khi bạn sử dụng đường dẫn hoãn lại không?
DMGregory

Bạn đúng! Các tạo phẩm không còn hiện diện khi sử dụng đường dẫn kết xuất hoãn lại.
eclmist

31

Đứng lên:

Câu trả lời này đã lỗi thời. Unity hiện hỗ trợ các hạt ánh sáng tự nhiên. Xin vui lòng xem câu trả lời này để biết chi tiết đầy đủ.

Tôi sẽ để lại bài đăng này ở đây cho bất kỳ ai tò mò hoặc sử dụng các phiên bản cũ của Unity hoặc cần kiểm soát thủ công nhiều hơn so với phương thức gốc - chỉ cần lưu ý rằng hỗ trợ gốc có thể hiệu quả và có thể mở rộng hơn nhiều so với phương pháp được trình bày dưới đây.


Tôi không chắc tại sao rất nhiều câu trả lời khẳng định điều này là khó hoặc không thể. Xử lý một vài chục đèn điểm động là khá thông thường đối với đường ống kết xuất hoãn lại hiện đại chạy trên PC.

Đây là một ví dụ nhanh tôi đã nấu lên: Ví dụ về đom đóm với đèn

Tôi sử dụng tập lệnh này để tự động sinh ra đủ ánh sáng cho các hạt tối đa của mình (đảm bảo bạn điều chỉnh cài đặt Hệ thống hạt của mình sao cho mức tối đa hợp lý - mặc định 1000 sẽ không làm cho card đồ họa của bạn rất hài lòng), và sau đó cập nhật chúng để theo dõi hoạt động các hạt:

[RequireComponent(typeof(ParticleSystem))]
public class ParticleLights : MonoBehaviour {

    public Light lightPrefab;

    ParticleSystem _system;
    ParticleSystem.Particle[] _particles;
    Light[] _lights;


    void Start () {
        _system = GetComponent<ParticleSystem>();
        _particles = new ParticleSystem.Particle[_system.maxParticles];

        _lights = new Light[_system.maxParticles];
        for(int i = 0; i < _lights.Length; i++)
        {
            _lights[i] = (Light)Instantiate(lightPrefab);
            _lights[i].transform.parent = transform;
        }
    }

    void Update () {

        int count = _system.GetParticles(_particles);
        for(int i = 0; i < count; i++)
        {
            _lights[i].gameObject.SetActive(true);
            _lights[i].transform.localPosition = _particles[i].position;

            // Looks like the GetCurrentColor function was added in 5.3.
            // You can use other methods in earlier Unity versions.
            _lights[i].color = _particles[i].GetCurrentColor(_system);
        }

        for (int i = count; i < _particles.Length; i++)
        {
            _lights[i].gameObject.SetActive(false);
        }
    }
}

Chỉnh sửa: bạn có thể tạo prefab bằng cách trước tiên tạo một đối tượng trò chơi (trong trường hợp này là Tạo -> Ánh sáng -> Ánh sáng điểm), thiết lập nó với tên / tham số / tập lệnh / con bạn muốn, sau đó kéo nó từ Phân cấp của bạn vào thám hiểm dự án của bạn. Điều này lưu đối tượng dưới dạng một tài sản mà bạn có thể sử dụng lại trên nhiều cảnh & tập lệnh, với mức độ kế thừa. Bạn có thể xóa bản sao trong cảnh của mình và tài sản sẽ vẫn còn trong thư mục Tài sản của bạn để được tham chiếu khi cần.

Đảm bảo lightPrefab có phạm vi tương đối nhỏ và không bị bóng đè, để cung cấp cho bạn khoảng không hiệu suất cao nhất cho mọi thứ diễn ra trong cảnh của bạn. Bạn không cần phải làm cho lightPrefab tự xanh (hoặc màu của đom đóm) - nó sẽ lấy nó từ màu của các hạt.

Bạn có thể thấy rằng bạn có quyền kiểm soát tốt hơn đối với chuyến bay của đom đóm nếu bạn tạo cho mỗi GameObject của riêng mình, với một hình tứ giác và một ánh sáng được gắn với một kịch bản chuyển động / chớp mắt tùy chỉnh, vì việc đi lang thang có sức thuyết phục mang nhiều tính nghệ thuật của hệ thống hạt hơn Tôi biết. ;)


Trên thực tế ... mặc dù tôi đã nói không sử dụng bóng tối cho những con đom đóm, tôi chỉ thử bật nó trong cảnh ví dụ của mình và nó không gây ra vấn đề gì. Cách bóng tối xoay quanh khi những con đom đóm vượt qua các vật thể thực sự rất tuyệt, và có thể thêm vào một bầu không khí ma quái. Số dặm của bạn có thể thay đổi dựa trên mức độ phức tạp của cảnh và phần cứng mục tiêu của bạn, vì vậy hồ sơ để chắc chắn, nhưng đây có thể là một trường hợp tối ưu hóa sớm từ phía tôi. :)
DMGregory

Làm thế nào để bạn tạo ra một prefab ánh sáng?
DarkDestry

Ngoài ra, vì một số lý do, ParticleSystem.Particle đề cập đến hạt kế thừa. Không có phương thức GetCienColor hoặc GetCienSize cho nó.
DarkDestry

@DarkDestry Tôi đã thêm một ghi chú vào câu trả lời về việc tạo prefabs. Đối với các chức năng bị thiếu, đây có thể là sự cố phiên bản - Tôi đang làm việc trong 5.3, trong các phiên bản trước của Unity, bạn có thể thực hiện việc này theo một cách khác. Hãy thảo luận chi tiết thực hiện trong trò chuyện , sử dụng phòng Hamza Hasan vui lòng tạo.
DMGregory

Vì vậy, một prefab nhẹ giống như một prefab bình thường. Đã nhầm lẫn khi nó được đề cập như một prefab ánh sáng.
DarkDestry

3

Nhiều năm trước, trước khi ánh sáng động có giá cả phải chăng, chúng ta chỉ cần sử dụng hiệu ứng hạt có bảng quảng cáo 2D với pha trộn phụ gia. Nó sẽ làm sáng cảnh về phía màu trắng. Bằng cách vẽ nó với độ sâu chính xác của con đom đóm, bạn sẽ có được sự sắp xếp gần như chính xác. Alpha phụ gia không cần sắp xếp khi tự rút tiền so với trộn alpha. Nó sẽ không sáng lên TẤT CẢ cảnh, nhưng nó sẽ làm sáng khu vực xung quanh con đom đóm. Sau đó, bạn có thể lấy một ánh sáng động và chọn một trong những con đom đóm cứ sau vài giây để thực sự thắp sáng cảnh, nếu bạn cần.

Đã có câu hỏi và câu trả lời về hiệu ứng phát sáng Làm thế nào để đạt được ánh sáng như thế này trong Unity cho các trò chơi 2D?


0

Thật không may, tôi chưa có nhiều kinh nghiệm với Unity ở dạng hiện tại (tôi đã chơi đùa với nó nhiều năm trước), vì vậy tôi không biết chính xác bộ tính năng nào bạn phải làm việc với động cơ.

Trong mọi trường hợp, cho dù bạn làm việc với động cơ nào, đèn động là thứ cần tránh bất cứ khi nào bạn có thể. Chúng rất đắt tiền về mặt tính toán và có xu hướng thêm độ phức tạp của cảnh theo cách rất theo cấp số nhân. Tuy nhiên, theo thứ tự trong ngày đối với hầu hết kết xuất 3D, có nhiều cách bạn có thể đạt được hiệu ứng tương tự bằng cách gian lận;

Một cách khả thi để đạt được hiệu ứng tương tự là ánh xạ kết cấu phát sáng trước vào địa hình bên dưới đom đóm của bạn, (giả sử hệ tọa độ Y = lên / xuống. Hệ thống) với các vị trí X và Z điều khiển vị trí phát sáng trên địa hình và bù Y từ địa hình kiểm soát alpha của kết cấu (sáng hơn = gần hơn với địa hình)

Tất nhiên có một số nhược điểm của phương pháp này. Bạn sẽ không tạo bóng khi không sử dụng ánh sáng và bạn sẽ không ảnh hưởng đến bất kỳ hình học nào khác trên thế giới (đạo cụ, tán lá, v.v.)


-2

Sử dụng Lighttại nguồn gốc của lửa và chơi với kích thước của nó trong kịch bản để nó có hiệu lực đốt cháy. Và sử dụng hệ thống hạt của bạn :)


Không có lửa trong cảnh. Tôi có các hạt khan hiếm xuất hiện trong và ngoài sự tồn tại. Không có vị trí cố định cho các hạt cả. Xin vui lòng đọc câu hỏi.
DarkDestry

Vì vậy, thỏa thuận này là gì? thay vào đó, bạn có thể gắn ánh sáng vào hạt prefab của mình tại các vị trí được xác định trước
Hamza Hasan

Câu hỏi là làm thế nào để làm điều này. Tôi đang sử dụng hệ thống hạt của unity. Và tôi không thấy prefab ở đó. Trừ khi bạn yêu cầu tôi chỉ tạo một prefab có ánh sáng và tạo cơ sở dựa trên kịch bản
DarkDestry

Vì vậy, bạn có hạt gameObject trong cảnh. Đính kèm một ánh sáng vào cùng một đối tượng trò chơi và tạo prefab của nó bằng cách kéo trò chơi đó vào Unity File Explorer.
Hamza Hasan

Tôi có một gameObject hệ ​​thống hạt trong cảnh. Không phải là một hạt.
DarkDestry
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.