Như bạn đã phỏng đoán, transform()
hàm sẽ biến đổi các điểm từ không gian phối hợp này sang không gian phối hợp khác. (Cũng có vtransform()
và ntransform()
để chuyển đổi các vectơ chỉ hướng và vectơ bình thường, tương ứng.) Đối số chuỗi đặt tên cho không gian tọa độ để chuyển đổi thành.
Các Hướng dẫn Shading Renderman có điều này để nói về nó:
Khi bắt đầu thực hiện shader, tất cả các biến điểm, vectơ, bình thường và ma trận được thể hiện trong hệ tọa độ "hiện tại". Chính xác thì hệ tọa độ nào là "hiện tại" phụ thuộc vào việc thực hiện. Thực tế là "hiện tại" là "máy ảnh" cho PRMan *, nhưng bạn không bao giờ nên tin vào hành vi này - hoàn toàn có khả năng các trình kết xuất tương thích RenderMan khác (bao gồm các trình kết xuất trong tương lai từ Pixar) có thể sử dụng một số không gian khác (như "thế giới") là không gian "hiện tại".
Nó tiếp tục đưa ra một trường hợp như thế này làm ví dụ. Hầu hết các tính toán ánh sáng nên được thực hiện trong không gian máy ảnh, nhưng việc đánh giá chức năng nhiễu phải nằm trong hệ thống phối hợp của đối tượng, bởi vì bạn muốn tiếng ồn giữ nguyên khi đối tượng di chuyển trong không gian thế giới.
Khi triển khai C #, bạn cũng cần chuyển đổi điểm được tô bóng từ không gian camera sang hệ thống phối hợp của đối tượng. Có lẽ bạn đã thực hiện điều này trước khi tính toán tọa độ kết cấu. Nếu không, bạn sẽ cần nhân với ma trận biến đổi của đối tượng. Hãy nhớ rằng việc sử dụng duy nhất điểm chuyển đổi này là làm đầu vào (như hạt giống) cho bộ tạo nhiễu Perlin. Nó đặt miền mà tiếng ồn thay đổi: không gian thế giới tọa độ.
Trong RSL, noise()
hàm có thể trả về bất kỳ loại nào bạn thích: a float
, a color
, a point
hoặc a vector
. Khi bạn thêm nó vào một float
( u
hoặc v
) khác, bạn sẽ nhận được một float
mã này. Thực sự, hai noise()
cuộc gọi, được thêm vào s
và t
, đang hành động để tạo ra một vectơ nhiễu 2D duy nhất. Trong mã của riêng bạn, nếu bạn đang sử dụng vectơ 2D để lưu trữ tọa độ kết cấu của mình, bạn có thể sử dụng một hàm nhiễu duy nhất trả về vectơ 2D, để có được hiệu ứng tương tự trong một dòng mã.
Nếu bạn quan tâm đến việc tạo ra một bộ tạo tiếng ồn tốt, Shadertoy có rất nhiều bộ khử nhiễu có các biến thể khác nhau của nhiễu Perlin với các tính chất khác nhau (đẳng hướng hoặc không, độ mịn và băng thông có thể định cấu hình) và đáng để tìm cảm hứng cũng như gợi ý thực hiện .