Triển khai hiệu ứng sticker foil
(4rknova.com)- Đây là mã nguồn shader triển khai hiệu ứng sticker foil, mô phỏng chân thực độ phản chiếu và lấp lánh trên bề mặt
- Có thể tinh chỉnh chi tiết nhiều đặc tính như độ kim loại, độ nhám, phản xạ ánh sắc cầu vồng
- Điểm cốt lõi là tái hiện hiệu ứng vi hạt (flake) trên bề mặt foil và màu ánh sắc cầu vồng thay đổi theo góc nhìn
- Ứng dụng nhiều kỹ thuật đồ họa dựa trên vật lý như lấy mẫu environment map, hiệu ứng Fresnel, bóng đổ AO và alpha cutoff
- Đây là một triển khai shader nâng cao có thể dùng cho rendering sticker foil chất lượng cao trong môi trường 2D/3D thực tế
Tổng quan
Nội dung này là mã GLSL shader để triển khai hiệu ứng thị giác lấp lánh như sticker foil. Mục tiêu là tạo ra chất cảm hình ảnh chất lượng cao bằng cách kết hợp xử lý độ kim loại, ánh sắc cầu vồng, hiệu ứng vi hạt bề mặt và phản xạ môi trường. Shader tạo hiệu ứng foil chân thực bằng cách tận dụng texture 2D, environment map và nhiều tham số điều chỉnh khác nhau.
Các biến và hằng số chính
- Có thể điều chỉnh hiệu ứng bằng nhiều biến uniform
- Ví dụ:
uFlakeSize(kích thước flake),uRoughness(độ nhám),uMetalness(độ kim loại),uIridescence(ánh sắc cầu vồng), v.v.
- Ví dụ:
- Hỗ trợ texture, environment map và thông tin hệ tọa độ thế giới
Cấu trúc hàm chính
Hàm hash
- Dùng để tạo giá trị ngẫu nhiên cần cho hiệu ứng vi hạt (flake)
Chuyển đổi tọa độ environment map (dirToEquirectUv), lấy mẫu environment map (sampleEnvRough)
- Hỗ trợ lấy mẫu theo hướng từ environment map
- Áp dụng mip level phù hợp theo độ nhám (
lod)
Hiệu ứng ánh sắc cầu vồng (iridescenceColor)
- Tạo màu động theo góc nhìn và độ dày bề mặt
- Màu sắc thay đổi theo góc quan sát giống như bề mặt foil thật
Độ chói (luminance)
- Tính thông tin độ sáng của màu để phản ánh vào các bước hậu xử lý
Logic chính của shader
Alpha cutoff và xử lý mặt trước/mặt sau
- Quyết định việc pixel có được giữ lại hay không bằng giá trị alpha của texture base
- Điều chỉnh cường độ AO, xử lý bong tróc (
peeled) và màu sắc tùy theo mặt trước/mặt sau
Xử lý phản xạ, flake, ánh sắc cầu vồng và độ kim loại
- Tính normal bề mặt, vector nhìn, vector phản xạ và phản xạ môi trường
- Áp dụng hash theo vị trí và offset góc ngẫu nhiên cho hiệu ứng flake
- Có thể kiểm soát chi tiết độ sáng, masking, boost của flake
- Dùng
perturbedNormalđể phản ánh độ biến dạng bề mặt của flake - Trộn flake và màu xung quanh cùng với màu ánh sắc cầu vồng
Kết hợp environment map và tính màu cuối cùng
- Thay đổi động độ nhám theo cường độ flake
- Tăng tính chân thực bằng masking kim loại/normal/phản xạ và tính toán Fresnel
- Trộn các thành phần diffuse (khuếch tán) và spec (phản xạ) để tạo màu cuối cùng
- Xuất màu cuối cùng cùng với alpha của base
Hàm ý
Shader này phù hợp để tái hiện chân thực các hiệu ứng thị giác phức tạp đặc trưng của vật liệu foil như phản xạ mạnh, vi hạt và ánh sắc cầu vồng. Nhờ nhiều tham số khác nhau, có thể tinh chỉnh hiệu ứng rất chính xác, cho phép tùy biến linh hoạt và rendering sticker foil có độ nổi bật cao. Nó có ưu thế ứng dụng lớn trong 3D, web 2D, game, UI tương tác và nhiều lĩnh vực khác.
1 bình luận
Ý kiến Hacker News
Trước đây khi phát triển game di động, tôi từng thêm hiệu ứng “độ bóng” thay đổi theo độ nghiêng của điện thoại, như thể đó là một vật thể 3D thật, lên những tấm thẻ trông rất ngầu. Gần đây thấy iOS hỗ trợ sẵn hiệu ứng sticker kiểu này nên cảm thấy khá thú vị
Một trang marketplace cho thẻ Magic đang áp dụng hiệu ứng CSS đơn giản cho thẻ foil. Tuy nhiên, tôi luôn trăn trở về cách tái hiện chân thực hơn các hiệu ứng foil đa dạng có trên thẻ Magic thật, sao cho phù hợp với UX CRUD của Svelte mà không làm giảm hiệu năng
Kỹ thuật shader thực sự rất hấp dẫn. Trên website Shadertoy, bạn có thể tự mình thử nghiệm nhiều loại shader khác nhau
Tim Oliver từng có một bài thuyết trình rất hay về trải nghiệm tạo hiệu ứng foil holographic được áp dụng cho “golden ticket” của Threads. Có thể xem video đó tại đây
Tôi thấy hiệu ứng này thực sự rất đẹp và ấn tượng về mặt thị giác, nhưng thật ra bản thân hiệu ứng foil lấp lánh lại không phải gu của tôi. Nó cũng được dùng trên sticker hay thẻ, nhưng tôi nghĩ sẽ đẹp hơn nếu thay vào đó là điểm nhấn ánh kim mềm mại. Có vẻ chỉ mình tôi nghĩ vậy, nhưng nhìn vào mức độ phổ biến của hiệu ứng này thì chắc đây vẫn là sở thích của số ít
Hiệu ứng này thật sự rất tuyệt. Nó làm tôi nhớ đến shader lưới nhiễu xạ mà Alan Zucconi tạo ra để render CD. Có thể xem nội dung liên quan tại đây
Kết quả tạo ra còn tuyệt hơn mong đợi. Quá trình chỉnh các giá trị thiết lập và quan sát hình ảnh phản chiếu của cả căn phòng thật sự rất thú vị
Trên iOS có hiệu ứng sticker “shiny” phản ứng khi bạn nghiêng điện thoại. Lần đầu nhìn thấy tôi đã thực sự trầm trồ
Hơi lạc đề một chút, nhưng đọc bài này khiến tôi nghĩ rằng sau này AI cũng sẽ học được cả cách tạo ra những hiệu ứng như thế này. Mặt khác, tôi cũng thấy có phần nhẹ nhõm vì AI có thể trở thành cỗ máy bookmark tối thượng, đến mức không còn cần phải gom bookmark nữa. Nhưng đồng thời cũng có chút tiếc nuối và chua chát vì những bài viết hay như thế này có lẽ sẽ không được AI ghi nhận đúng mức
Tôi thực sự vui vì được thấy những bài viết thú vị và bất ngờ đúng kiểu như thế này