Khúc xạ thủy tinh


10

Tôi có một tầng hình lục giác vô hạn, được tạo ra bằng cách sắp xếp một lưới điểm trong một cặp đổ bóng tessname:

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

Lưu ý rằng đây là một khung dây phẳng - "bóng" là một thủ thuật chiếu sáng:

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

Bây giờ, tôi muốn làm cho nó có vẻ dày, thủy tinh khúc xạ, nhưng không chắc chắn cách tiến hành.

Điều đầu tiên tôi nghĩ đến là

  1. đặt đồng phục chứa "độ dày" được yêu cầu của các khối
  2. Khi tính toán ánh sáng, hãy sử dụng định luật Snell để tính độ dài đường quang mà một tia sẽ đi qua khối hex, nếu nó thực sự dày như đồng phục "độ dày" nói và tính tổng alpha theo chiều dài đó. Điều đó sẽ mang lại sự minh bạch, nhưng không xử lý những thứ như phản xạ nội bộ / TIR, v.v.

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

Tôi chưa thử điều đó, vì vậy tôi không chắc kết quả hình ảnh sẽ ra sao.

Cuối cùng, đối với cấp độ cụ thể này, tôi đang cố gắng để cái kính hình lục giác đó được sử dụng trong Tron: Legacy trong trận chiến đĩa. ( Xem hình ảnh này để biết ví dụ .)

Gợi ý?


1
Bạn có thể giải thích thêm những gì bạn đang cố gắng để đạt được? Ảnh Tron cho thấy chủ yếu là phản xạ, AFAICT, không phải khúc xạ - bạn thực sự không thể nhìn xuyên qua các tấm sàn trong hầu hết các bức ảnh. Giả sử bạn không chỉ muốn một bề mặt sáng bóng, bạn muốn nhìn gì qua sàn nhà? Có một kết cấu nền con bạn muốn hiển thị? Có toàn bộ khung cảnh dưới sàn nhà (như trong Tron) không? Hay bạn muốn nó giống như kính mờ hơn, nơi bạn không thể nhìn thấy một hình ảnh khác biệt, nhưng có hiệu ứng tán xạ dưới bề mặt?
Nathan Reed

Tán xạ dưới bề mặt, mặc dù tôi không biết đó là cái gì. Làm cho Googling dễ dàng hơn. :)
3Dave

Câu trả lời:


4

Bài viết này trong GPU Gems đi sâu về khúc xạ, có thể cho kết quả khá tốt

(a) Độ trong suốt hoàn toàn (b) Kính khúc xạ

Theo nghĩa cơ bản nhất

Bước đầu tiên của kỹ thuật khúc xạ cơ bản là biến hình học cảnh thành một kết cấu, bỏ qua tất cả các lưới khúc xạ. Kết cấu này có thể được sử dụng để xác định đối tượng nào có thể nhìn thấy đằng sau các vật khúc xạ sẽ được hiển thị trong lần truyền tiếp theo. Chúng tôi biểu thị kết cấu này là S.

Bước thứ hai là kết xuất các lưới khúc xạ, tìm kiếm các giá trị từ kết cấu S với một nhiễu loạn được áp dụng để mô phỏng giao diện khúc xạ. Việc nhiễu loạn có thể đạt được bằng cách sử dụng bản đồ N bình thường, trong đó các thành phần màu đỏ và màu xanh lá cây (XY) bản đồ bình thường được sử dụng và thu nhỏ bởi một giá trị nhỏ để thêm dịch chuyển vào tọa độ kết cấu được chiếu. Cách tiếp cận này rất đơn giản để thực hiện trong một shader:

  1. lấy kết cấu N
  2. sử dụng các thành phần XY được chia tỷ lệ theo một giá trị nhỏ (chẳng hạn như 0,05)
  3. thêm giá trị dịch chuyển này vào tọa độ kết cấu dự kiến ​​cho S

Danh sách sau đây cho thấy một shader thể hiện cách tiếp cận này

half4 main(float2 bumpUV : TEXCOORD0,
  float4 screenPos : TEXCOORD1,
  uniform sampler2D tex0,
  uniform sampler2D tex1,
  uniform float4 vScale) : COLOR
{
  // fetch bump texture, unpack from [0..1] to [-1..1]
  half4 bumpTex=2.0 * tex2D(tex0, bumpUV.xy) - 1.0;

  // displace texture coordinates    
  half2 newUV = (screenPos.xy/screenPos.w) + bumpTex.xy * vScale.xy;

  // fetch refraction map
  return tex2D(tex1, newUV);
}

Các hình ảnh tiếp theo minh họa ba bước này

Ba bước được liệt kê trong shader ở trên

Có nhiều kỹ thuật tiên tiến hơn trong cùng một bài viết có thể đạt được cái nhìn hấp dẫn hơn nhiều


Để có hiệu ứng tương tự trong Unity, bạn có thể muốn xem trang wiki The Refraction Shader


3

Tôi sẽ lấy hình ảnh bạn hiển thị làm tài liệu tham khảo cho cách tôi tưởng tượng hiệu ứng. Thuật toán tôi có thể nghĩ là đơn giản:

  1. Kết xuất môi trường thành một thứ tự kết cấu bản đồ khối để mô phỏng sự phản chiếu của môi trường.
  2. Áp dụng kết cấu bản đồ khối vào một mặt phẳng đại diện cho lớp bên dưới sàn khúc xạ. Đừng làm cho máy bay chưa.
  3. Kết xuất mặt phẳng thành một kết cấu, một kết cấu 2D bình thường.
  4. Truyền kết cấu cho shader khúc xạ được sử dụng để kết xuất sàn khúc xạ.
  5. Bây giờ kết xuất các mắt lưới / sàn khúc xạ với một bóng đổ khúc xạ.

Về shader khúc xạ, inorder để mô phỏng kính bạn có thể làm

  • Sử dụng thuật ngữ fresnel để mô phỏng sự phản xạ và khúc xạ.
  • Sử dụng các thông số / bản đồ bình thường để thực hiện tìm nạp kết cấu.

Tôi chỉ nghĩ về ý tưởng, vì vậy tôi đã không thử nghiệm nó. Tôi chắc chắn rằng nó cần nhiều công việc hơn, Có lẽ tôi sẽ làm một khi tôi đi làm về.


Cách tiếp cận thú vị - tôi sẽ phải hầm cái đó một chút. Cảm ơn các đầu vào.
3Dave
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.