Tôi đang cố gắng tạo hiệu ứng lấp lánh cho trình tạo bóng thời gian thực của mình nhưng tôi không biết làm thế nào.
Đây là một ví dụ , và một ví dụ khác .
Tôi có thể sử dụng kỹ thuật gì để thực hiện điều này?
Tôi đang cố gắng tạo hiệu ứng lấp lánh cho trình tạo bóng thời gian thực của mình nhưng tôi không biết làm thế nào.
Đây là một ví dụ , và một ví dụ khác .
Tôi có thể sử dụng kỹ thuật gì để thực hiện điều này?
Câu trả lời:
Chà, khi được yêu cầu thiết kế bất kỳ shader nào, chúng ta nên bắt đầu bằng cách phá vỡ mọi thứ thành những vấn đề nhỏ hơn. Và cũng giống như lưu ý, hiệu ứng lấp lánh không thực sự làm cho shader trông đẹp, nhưng ánh sáng và hiệu ứng tổng thể, chỉ sử dụng một trong số chúng sẽ không đẹp như vậy.
Trước hết chúng ta hãy nói những gì không phải là một phần trực tiếp của shader:
Thứ hai, hãy phá vỡ shader thực tế thành các hiệu ứng riêng biệt:
Lưu ý rằng các loại vải như vậy có vô số quy tắc, nhưng kỹ thuật được mô tả ở đây gần đúng với mức bình thường đáng kể nhất
Để xấp xỉ quan trọng nhất bình thường, có một cách để làm, là sử dụng kết cấu tọa độ và tiếp tuyến tính toán của lưới, và thay vì tính toán N . L bạn tính 1- (NT).
Giải thích đầy đủ ở đây . Và có lẽ bạn cần phải thực hiện điều đó trong shader mảnh hơn là kỹ thuật đỉnh mà họ nói đến. Các mô hình dị hướng khác cũng có thể được áp dụng.
Bây giờ cho hiệu ứng lấp lánh:
Điều này có thể được thực hiện trong không gian thế giới / không gian kết cấu cục bộ hoặc không gian màn hình dưới dạng một đường chuyền riêng.
Thuật toán tôi có thể nghĩ ra, sử dụng kỹ thuật xử lý hình ảnh (giả sử lưới có các kết cấu kết cấu).
Lưu ý hình ảnh trên chỉ là một ví dụ về bộ lọc tối đa và việc áp dụng nó vào nhiễu sẽ cho sth tương tự như trường sao.
Ví dụ về bộ lọc Gausian áp dụng cho nhiễu tối đa (ed).
Lưu ý, kỹ thuật này có thể cần tối ưu hóa đáng kể cho trình tạo bóng thời gian thực.
Có một bài viết thú vị AMD - Bắt đầu thủ tục .
Có vẻ như lấp lánh khó hơn tôi nghĩ.
Giải pháp Decent: Sử dụng vị trí 3D để lập chỉ mục chức năng nhiễu 3D, thêm vectơ xem, sử dụng chức năng frac để tiếp tục ngẫu nhiên hóa mọi thứ.
Sparkle:
float specBase = saturate(dot(reflect(-normalize(viewVec), normal),
lightDir));
// Perturb a grid pattern with some noise and with the view-vector
// to let the glittering change with view.
float3 fp = frac(0.7 * pos + 9 * Noise3D( pos * 0.04).r + 0.1 * viewVec);
fp *= (1 - fp);
float glitter = saturate(1 - 7 * (fp.x + fp.y + fp.z));
float sparkle = glitter * pow(specBase, 1.5);