(sim) Viết shader cho Sphere ở Vegas
(whenistheweekend.com)- Trang The Sphere cho thấy cách tính màu trên bề mặt khối cầu bằng 5 ví dụ và các đoạn shader GLSL
- Đầu vào của shader gồm
time,vUv,vNormal, trong đó thời gian và tọa độ UV là trung tâm của sự thay đổi màu sắc main()đưavec4(...)vàogl_FragColorđể tính màu cuối cùng của từng pixel- Giá trị RGB được tạo dựa trên
cos(time + vUv.xyx + vec3(0., 2., 4.)), thể hiện sự thay đổi theo thời gian vNormalđã được khai báo nhưng không được dùng trong đoạn mã được cung cấp, nên hiện không ảnh hưởng đến việc tính màu
Cấu trúc trang The Sphere
- Tiêu đề là The Sphere
- Phần nội dung có đánh dấu ví dụ từ
example 1đếnexample 5 - Tiếp theo là đoạn mã shader có vẻ được viết bằng GLSL
Luồng mã shader GLSL
- Có ba biến đầu vào là
time,vUv,vNormaltimelàuniform floatvUvlàvarying vec2vNormallàvarying vec3
- Hàm
main()thiết lậpgl_FragColor - Màu được tính theo dạng
0.5 + 0.5 * cos(...) - Đầu vào của
cos()đồng thời gồm giá trị thời gian,vUv.xyx,vec3(0., 2., 4.) - Giá trị alpha được cố định là
1.
1 bình luận
Ý kiến trên Hacker News
Đã làm cho hiệu ứng Matrix chạy được
Tôi đã thử chỉnh UV để phần trên của hình cầu hiện ra rồi bỏ cuộc, nhưng các uniform của three.js là projectionMatrix và modelViewMatrix chỉ cần khai báo ở đầu GLSL là có thể tham chiếu được
Đã tạo một lát gạch Penrose tĩnh: https://gist.github.com/vjeranc/265db912d4004c7c0b0f16ae5fda...
Vì hình cầu không vô hạn nên dùng lát gạch không tuần hoàn không có ý nghĩa thực tiễn, nhưng nhìn vẫn đẹp
Tôi vẫn chưa biết liệu có một bộ gạch tương tự, hoặc một viên gạch đơn, có thể lát một hình nón vô hạn hay không
Vẫn còn những câu hỏi thú vị, nhưng chưa đủ rõ phép chiếu nào là có ý nghĩa nên khó đào sâu thêm
Hơi lạc đề một chút, nhưng điều hấp dẫn là The Sphere thực sự là một dự án kỹ thuật lớn đến mức nào
Bao gồm mọi thứ từ chính kết cấu công trình, đồng bộ hàng nghìn tấm LED bên trong và bên ngoài hình cầu, làm mát trong cái nóng Las Vegas, cho tới giữ cho 18.000 ghế bên trong đủ mát và thông gió tốt
Ngay cả nhiều tòa nhà văn phòng bình thường cũng không thông gió đúng cách
Tôi đã thử tạo một smiley.frag đơn giản: https://gist.github.com/nickbarth/4ec5147bd1288fd2bcfc4c5b46...
Dự án rất hay
Nếu mỗi đoạn code có URL riêng thì sẽ dễ chia sẻ hơn. Nhúng code vào trong URL cũng có vẻ ổn
Tôi đã tạo một shader mặt cười lớn
Đây là mã GLSL dùng
sdRingđể tạo miệng, tận dụng đối xứng trái-phải để xử lý hai mắt cùng lúc, rồi xuất ra màu vàngLần đầu thử nghịch shader và tôi đã làm một quả dưa hấu xoay
Tôi hiểu đại khái cách xử lý tuple RGB,
fract()trông giống phép lấy phần dư, rồi bình phương và cộng các giá trị đó để tạo những dải mềm, nhưng vẫn chưa rõ chính xác shader hoạt động thế nào,vUvlà gì, vàgl_FragColorđược gán vào đâuSau đó nó chia tam giác thành các mảnh, tức pixel, và chạy fragment shader cho từng mảnh
Ở đây đầu vào là uniform
time, có cùng giá trị cho mọi mảnh, vàvUv, được xuất ra từ vertex rồi nội suy tuyến tính bên trong tam giác;vUvtương ứng với tọa độ pixel trên hình cầugl_FragColorlà đầu ra màu RGBA sẽ được áp dụng cho mảnh đóVới shader trong game thông thường hoặc Google Earth thì còn có thêm texturing và ánh sáng; mô hình thực thi của GPU trông như đang lập trình từng pixel một, nhưng thực ra là SIMT, nên NVIDIA xử lý đồng thời 32 pixel, AMD xử lý 64 pixel
Có thể xem các câu lệnh điều kiện phần lớn được chuyển thành phép toán có điều kiện chạy cả hai nhánh
Có lẽ bạn cũng sẽ thích https://www.shadertoy.com/
Các shader ở https://www.glslsandbox.com cũng đáng xem
Tuy nhiên ở đó những người thiếu chín chắn thường đăng shader NSFW, và có vẻ quản trị viên không kiểm duyệt quá kỹ, nên cần chú ý
Tò mò không biết độ phức tạp Kolmogorov của “nội dung GLSL NSFW” là cỡ nào
https://www.glslsandbox.com/e#108133.0
NSFW: https://www.glslsandbox.com/e#108230.3
Trong chú thích code còn để lại các prompt kiểu bảo ChatGPT làm cơ thể béo hơn, thêm các đường cuộn ở nền, đổi màu, và thêm một số bộ phận cơ thể nhất định
Rất hay
Nhìn vào giải pháp mà ai đó đã đóng góp cho dự án isocity của tôi, nó cho phép chia sẻ thành phố đã tạo bằng URL
Có vẻ có thể triển khai một cách tương tự: https://github.com/victorqribeiro/isocity/commit/c6588171e37...
The Sphere có vẻ sẽ là một địa điểm tuyệt vời để tổ chức demo party
https://en.wikipedia.org/wiki/Demoscene#Parties