Hạch toán sóng khi thực hiện phản xạ phẳng


13

Tôi đã nghiên cứu các ví dụ của Nvidia từ SDK, đặc biệt là dự án Island11 và tôi đã tìm thấy điều gì đó tò mò về một đoạn mã HLSL điều chỉnh các phản xạ lên xuống tùy thuộc vào trạng thái của độ cao của sóng.

Đương nhiên, sau khi kiểm tra đoạn mã ngắn gọn:

// calculating correction that shifts reflection up/down according to water wave Y position
float4 projected_waveheight = mul(float4(input.positionWS.x,input.positionWS.y,input.positionWS.z,1),g_ModelViewProjectionMatrix);
float waveheight_correction=-0.5*projected_waveheight.y/projected_waveheight.w;
projected_waveheight = mul(float4(input.positionWS.x,-0.8,input.positionWS.z,1),g_ModelViewProjectionMatrix);
waveheight_correction+=0.5*projected_waveheight.y/projected_waveheight.w;
reflection_disturbance.y=max(-0.15,waveheight_correction+reflection_disturbance.y);

Dự đoán đầu tiên của tôi là nó bù cho sự phản xạ phẳng khi nó chịu nhiễu loạn dọc (sóng), chuyển hình học phản xạ đến một điểm không có gì và nước chỉ được hiển thị như thể không có gì ở đó hoặc chỉ có bầu trời:

nhập mô tả hình ảnh ở đây

Bây giờ, đó là bầu trời phản chiếu nơi chúng ta sẽ thấy sự phản chiếu màu xanh lá cây / xám / vàng của địa hình nằm dọc theo đường cơ sở của nước. Vấn đề của tôi bây giờ là tôi không thể xác định chính xác logic đằng sau nó là gì. Chiếu vị trí không gian thế giới thực của một điểm của hình học sóng / nước và sau đó nhân với -.5f, chỉ để thực hiện một phép chiếu khác của cùng một điểm, lần này với tọa độ y của nó thay đổi thành -0,8 (tại sao -0,8?).

Manh mối trong mã dường như chỉ ra rằng nó đã được bắt nguồn từ bản dùng thử và lỗi vì có sự dư thừa. Ví dụ: tác giả lấy một nửa âm của tọa độ y được chiếu (sau khi chia w):

float waveheight_correction=-0.5*projected_waveheight.y/projected_waveheight.w;

Và sau đó làm tương tự cho điểm thứ hai (chỉ tích cực, để có sự khác biệt của một số loại, tôi đoán) và kết hợp chúng:

waveheight_correction+=0.5*projected_waveheight.y/projected_waveheight.w;

Bằng cách loại bỏ chia cho 2, tôi thấy không có sự khác biệt trong cải tiến chất lượng (nếu ai đó quan tâm để sửa lỗi cho tôi, xin vui lòng làm). Mấu chốt của nó dường như là sự khác biệt trong y dự kiến, tại sao vậy? Sự dư thừa này và sự lựa chọn dường như tùy ý của -.8f và -0.15f khiến tôi kết luận rằng đây có thể là sự kết hợp của công việc phỏng đoán / đoán. Có một nền tảng logic cho điều này hay nó chỉ là một hack tuyệt vọng?

Dưới đây là một cường điệu của vấn đề ban đầu mà đoạn mã sửa, quan sát ở mức độ điều chỉnh thấp nhất. Hy vọng, nó có thể châm ngòi cho một ý tưởng tôi đang thiếu. -.8f có thể là chiều cao tham chiếu để từ đó suy ra mức độ xáo trộn tọa độ kết cấu lấy mẫu hình học phản xạ phẳng và -.15f có thể là giới hạn dưới, một biện pháp bảo mật.

nhập mô tả hình ảnh ở đây

Câu trả lời:


1

Kỹ thuật này nhất định phải có vật phẩm này và đó là lý do tại sao hầu hết thời gian khi nó được sử dụng, chúng tôi áp dụng dịch chuyển dọc vào tra cứu để làm như thế nào nếu mặt phẳng phản xạ thực tế cao hơn nửa mét so với vị trí thực của nó. Vâng, nó có nhược điểm là không có sự phản chiếu hoàn toàn phù hợp, nhưng nó thích hợp hơn với các lỗ hổng.


2
Bạn có thể giải thích nhiều hơn?
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.