Câu hỏi ngay lập tức là: trong HLSL, làm cách nào tôi có thể định hướng một bề mặt bình thường được tạo ra trong không gian UV để tôi có thể áp dụng nó lên mặt khối?
Dự án tổng thể là tôi đang cố gắng xây dựng một máy phát hành tinh theo thủ tục. Tôi đang sử dụng một khối lập phương chiếu tới một hình cầu trong đó mỗi mặt là một hình tứ giác. Dự án trung gian là tôi muốn tạo một bản đồ bình thường cho địa hình. Tôi nghĩ rằng cách tốt nhất để tôi làm điều này (và hiểu những gì tôi đang làm) là tạo ra các quy tắc cho phiên bản khối trước, sau đó thực hiện các phép biến đổi để đưa các quy tắc đó vào hình cầu.
Lý tưởng nhất là phương pháp sẽ không liên quan đến mã phân nhánh dựa trên khuôn mặt mà tôi đang làm việc (nghĩa là, nếu chúng ta ở phía trên cùng của khối, thì U = X và V = Y). Nói cách khác, điều tôi hy vọng là một số phép thuật toán học như "Ồ, chỉ cần nhân chéo địa hình bình thường bằng sản phẩm chấm của mặt khối bình thường và blah blah blah".
20/9/10 ETA:
Tôi biết làm thế nào để tính toán thông thường cho một bề mặt phẳng. Vấn đề tiếp theo của tôi là hai lần:
- Làm cách nào để xoay bản đồ bình thường để nó được định hướng chính xác trên mỗi mặt của khối lập phương?
- Làm thế nào để tôi làm cong bản đồ bình thường phẳng để nó bao bọc hình cầu?
Tôi đã tìm thấy một giải pháp sử dụng ma trận Jacobian, nhưng tôi không thể làm cho nó hoạt động được. Ngay cả khi tất cả các quy tắc đều hướng thẳng lên (tức là một mặt phẳng), mã HLSL liên quan đến Jacobian hoàn toàn làm rối ánh sáng - vì vậy nó khiến tôi không tin tưởng vào việc thực hiện giải pháp của mình.