5 điểm bởi GN⁺ 2025-09-02 | 1 bình luận | Chia sẻ qua WhatsApp
  • Đâ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.
  • 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

 
GN⁺ 2025-09-02
Ý 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ị

    • Tôi cũng tò mò về reflection map nên đã tìm thử. Hóa ra căn phòng đó là Jedlinka Palace ở Ba Lan. Ảnh texture thực tế có thể xem tại đây
  • 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

    • Có lẽ vẫn nên tiếp tục lưu bookmark. Chỉ riêng Google Search hiện nay cũng đã khiến rất nhiều thông tin bị lãng quên, và trong thời đại AI thì còn nhiều thông tin hơn nữa có thể dễ dàng biến mất
    • Cuối cùng thì AI cũng sẽ viết ra cả những bài như thế này, rồi AI lại tiếp tục học từ AI. Nghĩ đến đó tôi thấy có khi những lập trình viên hay chuyên gia có cảm quan nghệ thuật sẽ biến mất, và chỉ còn lại những công việc bình thường kiểu ghép nối các giải pháp kinh doanh do máy tính tự động tạo ra
  • 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