5 điểm bởi GN⁺ 2024-07-29 | 1 bình luận | Chia sẻ qua WhatsApp
  • Tổng quan dự án

    • Trong vài năm qua, tác giả đã làm việc với các cảnh và màn chơi 3D chạy trong trình duyệt
    • Ban đầu bắt đầu như các bản demo riêng lẻ, nhưng dần phát triển thành những dự án giống như game có liên kết với nhau
    • Sử dụng các kỹ thuật thủ tục và tạo sinh để triển khai một số thành phần cụ thể
  • Shaders + Textures

    • Phần lớn texture được thiết kế liền mạch để không lộ hoa văn ngay cả trên các vùng lớn
    • Tạo shader tùy biến trong Three.JS để cung cấp thêm tính năng
  • Triplanar Mapping

    • Có thể áp dụng texture lên mesh mà không cần UV map, rất hữu ích cho địa hình được tạo thủ tục
    • Có thể triển khai đơn giản và áp dụng cho nhiều loại mesh khác nhau
    • Dùng hàm pow() để điều chỉnh trọng số nhằm cải thiện chất lượng và tối ưu hiệu năng
  • Hex Tiling

    • Thuật toán che giấu sự lặp lại của các texture liền mạch
    • Được port thành thư viện độc lập có thể tích hợp dễ dàng vào các dự án Three.JS
    • Cần UV map và có overhead hiệu năng lớn
  • Depth Pre-Pass

    • Ghi lại độ sâu của pixel bằng cách render cảnh hai lần để cải thiện hiệu năng
    • Có thể cải thiện hiệu năng hơn 30% trong các cảnh có nhiều overdraw
  • AI-Powered PBR Texture Synthesis

    • Nâng chất lượng cảnh bằng cách sử dụng texture do AI tạo ra
    • Dùng DeepBump và Materialize để tạo các bản đồ PBR
  • Volumetric Fog/Clouds

    • Phát triển shader để thêm mây hoặc sương mù vào cảnh
    • Sử dụng tra cứu nhiễu LoD để bổ sung nhiều tính năng khác nhau
  • Meshes + Geometry

    • Nghiên cứu các kỹ thuật tạo và biến đổi mesh trong runtime
    • Chủ yếu tạo thủ tục các yếu tố trang trí hoặc hậu cảnh
  • LoD Terrain

    • Tạo địa hình bằng hàm nhiễu và điều chỉnh độ phân giải động theo khoảng cách tới camera
  • Procedural Mesh Processing + Manipulation Pipeline

    • Xây dựng pipeline để phân chia tinh hơn và biến đổi mesh low-poly theo cách thủ tục
    • Việc xử lý normal đòi hỏi rất nhiều công sức
  • Future Work

    • Dự định dùng Constructive Solid Geometry(CSG) để hợp nhất hoặc cắt mesh
    • Mục tiêu là port sang Rust để hiểu sâu hơn

Tóm tắt của GN⁺

  • Bài viết này giới thiệu nhiều kỹ thuật và công cụ hữu ích cho phát triển game thủ tục
  • Các kỹ thuật texture như Triplanar Mapping và Hex Tiling giúp cải thiện đồng thời hiệu năng và chất lượng
  • Việc tạo texture bằng AI và shader Volumetric Fog/Clouds làm tăng tính chân thực của cảnh
  • Các hướng phát triển tương lai như Constructive Solid Geometry có tiềm năng lớn cho biến đổi mesh
  • Các dự án có chức năng tương tự gồm có ProBuilder của Unity và Houdini

1 bình luận

 
GN⁺ 2024-07-29
Bình luận trên Hacker News
  • Từng có kinh nghiệm thử sức với tạo sinh thủ tục trước đây

    • Đặc biệt đã thử để tạo ra những cái cây trông thật đẹp
    • Cảm thấy còn thiếu một cách dễ dàng để nối hình học lại với nhau
    • Tạo ra hai hình trụ thì dễ, nhưng nối chúng lại với nhau thì rất khó
    • Về lý thuyết, CSG có thể lấp khoảng trống này, nhưng lại khó vì phải mô hình hóa ở dạng 3D
    • Đã cố viết một routine để nối hai loop lại với nhau, nhưng nó không hoạt động tốt
    • Sau này muốn làm một trò chơi nơi hệ thống tạo sinh thủ tục mô-đun tự vận hành một cách tự phát
  • Tạo địa hình tốt không hề đơn giản

    • Khó cả ở quy mô thế giới lẫn ở tầm mắt người chơi
    • Cách tiếp cận đơn giản thường tạo ra height map gồ ghề, gần như không giống thực tế
    • Dwarf Fortress bắt đầu từ phép dịch chuyển trung điểm cơ bản rồi thêm rất nhiều tùy biến
  • Đây là một bài viết tuyệt vời về các kỹ thuật thủ tục trên web

  • Có trải nghiệm lẫn lộn với việc dùng depth pre-pass

    • Vài lần thử trước đây không thấy cải thiện hiệu năng đáng kể trên GPU desktop tầm trung đến cao cấp
    • Không chắc lý do, nhưng có thể là nhờ early Z rejection đã tiết kiệm các lần gọi pixel shader
    • Thường render mesh đục từ trước ra sau
    • Nói công bằng thì các thử nghiệm của tôi diễn ra trong bối cảnh ứng dụng CAD/CAM chứ không phải game
    • Các cảnh có rất ít texture và hình học polygon cực cao, khác với môi trường game thông thường
  • Là một nghệ sĩ 3D, đây là một bài viết rất thú vị

    • Bài viết hay về chủ đề này thực sự rất hiếm
    • Tôi dự định sẽ thử Three.js