Thật vậy, đó là tất cả những gì bạn cần cho sự phóng xạ. Có hai công thức khác nhau (nhưng bằng nhau). Đầu tiên là "tỏa" hoặc bắn ánh sáng từ mỗi miếng vá (trong trường hợp của bạn có lẽ là một khuôn mặt), và thứ hai là "thu thập" hoặc nhận ánh sáng vào mỗi miếng vá. Nếu bạn lặp đi lặp lại điều này đủ lần, bạn sẽ nhận được sự phóng khoáng.
Bước đầu tiên là tìm ra ánh sáng bắt nguồn từ đâu vì trong cả hai phương pháp đều phải có nguồn sáng. Nếu bạn định thực hiện phương pháp thu thập, tôi phải cảnh báo bạn rằng nó không xử lý ánh sáng điểm rất tốt. Bạn phải gieo hạt với ánh sáng (tính riêng nó) hoặc bạn nhận được kết quả kỳ lạ. Trong phương pháp bức xạ, bạn phát ra từ các đèn điểm như bình thường nhưng bỏ qua chúng như các máy thu từ các bản vá khác.
Bạn có thể dừng sau bất kỳ số lần thoát (hoặc lặp) nào, nhưng bạn càng làm nhiều, giải pháp càng tốt. Bạn có một thời gian dễ dàng để tạo bản vá vì bạn có thể coi mỗi bên của hình khối của mình là một bản vá. Nếu bạn muốn một cái gì đó chi tiết hơn, bạn có thể chia nhỏ những khuôn mặt đó thậm chí xa hơn.
Trong một ví dụ bức xạ, điều này có thể được sử dụng làm cơ sở cho vòng lặp của bạn:
while(!done) {
foreach Patch a {
a.shootRays(n);
foreach ray r {
Patch b = r.firstIntersectingPatch();
float modifier = 1 / ((distance(a,b)^2)
b.incidentLight += (a.exidentLight / n) * modifier;
}
}
foreach Patch a {
float modifier = a.absorption;
a.exidentLight = (a.incidentLight * modifier) + a.emission;
a.incidentLight = 0;
}
done = goodEnough() ? true : false;
}
Đối với phương thức thu thập, bạn sẽ có vòng lặp đầu tiên hơi khác:
foreach Patch a {
a.shootRays(n);
foreach ray r {
Patch b = r.firstIntersectingPatch();
float modifier = 1 / ((distance(a,b)^2)
a.incidentLight += b.exidentLight * modifier;
}
a.incidentLight /= n;
}
Công cụ sửa đổi đầu tiên được sử dụng cho mỗi lần sửa đổi ánh sáng tới. Việc sử dụng phổ biến nhất sẽ là rơi từ xa như tôi đã làm ở trên. Công cụ sửa đổi thứ hai là để sửa đổi toàn cầu ánh sáng tới như hấp thụ vật liệu. Biến a.emission sẽ là 0 cho hầu hết các bản vá.
Chỉ những nguồn là nguồn sáng (hoặc bị ảnh hưởng trực tiếp bởi nguồn sáng điểm nếu bạn đang sử dụng phương pháp thu thập như đã nêu ở trên) mới có giá trị phát xạ khác 0.
Hàm goodEnough () có thể có nhiều thứ. Nó có thể chỉ là đếm số lần lặp hoặc có thể nhìn vào tổng lượng ánh sáng trong cảnh hoặc có thể là một số thử nghiệm khác mà bạn nghĩ ra. Phần này thực sự tùy thuộc vào bạn và những gì bạn nghĩ có vẻ đủ tốt nhưng vẫn hoàn thành trong một khoảng thời gian hợp lý.
Bạn càng chụp nhiều tia, giải pháp của bạn càng chính xác nhưng quá trình càng chậm. Cũng vậy với số lượng các bản vá và số lần lặp qua vòng lặp. Làm thế nào bạn lưu trữ giá trị ánh sáng cuối cùng là tùy thuộc vào bạn. Nó có thể ở dạng kết cấu hoặc được lưu trữ dưới dạng giá trị trong các hình khối của bạn, nhưng tôi không nghĩ rằng điều này có thể thực hiện được trong thời gian thực với một số lượng lớn các bản vá.