Tôi biết cách lập trình đèn định hướng, đèn điểm và đèn điểm. Đôi khi, mọi người có đèn có hình dạng - giống như thanh, hoặc thậm chí là hình xuyến.
Làm thế nào mà nó hoạt động từ một quan điểm dựa trên tia hoặc rasterization?
Tôi biết cách lập trình đèn định hướng, đèn điểm và đèn điểm. Đôi khi, mọi người có đèn có hình dạng - giống như thanh, hoặc thậm chí là hình xuyến.
Làm thế nào mà nó hoạt động từ một quan điểm dựa trên tia hoặc rasterization?
Câu trả lời:
Trong triển khai ánh sáng hình xuyến (Unity3D), tôi sử dụng cùng một phương pháp thời gian thực được mô tả trong câu trả lời của @ JohnCalsbeek . Chỉ cần đối xử với nó giống như cách bạn đối xử với ánh sáng điểm / điểm thông thường của bạn và tính toán một hướng và khoảng cách duy nhất.
Tôi sử dụng phương trình khoảng cách hình xuyến từ trang web của Inigo Quilez và đây là chức năng tôi đã thực hiện để chuyển hướng đến hình xuyến
float3 torusDirection(float3 p) {
float3 torusRel;
torusRel.xz = normalize(p.xz-_TorusLocation.xz);
torusRel.y = 0;
return -normalize(p-(TorusLocation+torusRel*TorusCenterRadius));
}
Nhìn chung, tôi nghĩ rằng nó hoạt động tốt trừ một vài khu vực nhìn ra nơi các vòng xuyến xung quanh .
Gợi ý cụ thể cũng bị tắt nhưng quan điểm sửa đổi độ nhám của @ JohnCalsbeek có vẻ như cần khắc phục điều đó :).
Thử thách khó khăn nhất đối với tôi với ánh sáng ngay bây giờ là tạo ra một bóng đổ phía trước hỗ trợ các loại đèn khu vực khác nhau và nhiều đèn chiếu sáng. Tôi không biết làm thế nào tôi sẽ làm điều này ngoài việc chỉ có một loạt các thuộc tính đổ bóng cho tất cả các đèn khác nhau. Hiện tại tôi áp dụng ánh sáng dưới dạng vượt qua để nó chỉ hoạt động với các vật thể mờ nhưng tôi sẽ sớm tạo ra một phiên bản chuyển tiếp cho các vật thể trong suốt. Đó là thử thách thực sự tôi nghĩ, nhận được nhiều ánh sáng khu vực trong một shader phía trước.
Và đây là bản demo Shadertoy của một ánh sáng hình xuyến tôi đã thực hiện để kiểm tra của tôi, nó dựa trên bản demo ánh sáng hình dạng BeyondTheStatics.
Trong trình theo dõi đường đi, khi truy tìm tia tới ánh sáng có hình dạng khác với điểm ("ánh sáng khu vực" là thuật ngữ thông thường), bạn thường chọn một điểm ngẫu nhiên trên bề mặt ánh sáng. Khi lấy đủ các mẫu, điều này dẫn đến cả các điểm nổi bật đặc biệt mềm hơn và các bóng tối mềm hơn: ánh sáng sẽ bị phản xạ khỏi bề mặt từ sự phân bố ngẫu nhiên của các hướng đến và các tia chiếu tới một vùng ánh sáng có vật cản theo cách có thể hoặc không cắt ngang vật cản tùy thuộc vào điểm nào trên ánh sáng được lấy mẫu.
Trong thời gian thực, gần đúng với đèn khu vực được sử dụng. Đây Unreal Engine 4 giấy trắng mô tả một số trong những cân nhắc. Một khả năng là phương pháp "điểm đại diện", mỗi pixel sẽ chọn một điểm trong âm lượng của ánh sáng (sáng nhất hoặc gần nhất) và sử dụng như thể đó là ánh sáng điểm. Một tùy chọn khác là sửa đổi độ gồ ghề được đưa vào tính toán đặc trưng dựa trên hình nón gần bằng ánh sáng khu vực (trong bài báo là "Sửa đổi D Specular D").