Hiệu ứng màn hình của cảnh 3D, tính từ độ sâu của lần vẽ 3D: che khuất môi trường (SSAO), phản chiếu (SSR), mờ chuyển động, tia nắng và lóa ống kính. Tiếp...
#include <njin_post3d.h>
Các thuộc tính Public | |
Che khuất môi trường (SSAO) | |
Góc tường, khe giữa hai vật và chân vật trên sàn tối đi, như ánh sáng nền khó lọt vào. Tính từ độ sâu nên mọi hình đục đều có, kể cả model của game. | |
| f32 | ssao = 0.0f |
| Độ đậm, 0..1. 0 là tắt. | |
| f32 | ssao_radius = 0.6f |
| Tầm xét quanh mỗi điểm, đơn vị 3D. Cỡ của khe được tối. | |
| i32 | ssao_samples = 12 |
| Số mẫu mỗi pixel, 4..32. Nhiều thì mịn hơn, tốn hơn. | |
| bool | ssao_half = true |
| Tính ở nửa độ phân giải rồi phóng lên theo độ sâu: rẻ gấp bốn. | |
Phản chiếu (SSR) | |
Bề mặt có material3d::reflect lớn hơn 0 (sàn bóng, kim loại, vũng nước) phản chiếu những gì đang thấy trên màn hình, tìm bằng cách dò tia trên ảnh độ sâu. Thứ ngoài màn hình hay bị che không phản chiếu được: chỗ đó mờ dần về màu sương (light3d::fog_color, tức màu chân trời khi có draw_sky3d()). | |
| f32 | ssr = 0.0f |
| Độ mạnh, 0..1, nhân với reflect của mỗi bề mặt. 0 là tắt. | |
| f32 | ssr_distance = 20.0f |
| Tia dài nhất, đơn vị 3D. | |
| i32 | ssr_steps = 48 |
| Số bước dò mỗi tia, 8..128. | |
| f32 | ssr_thickness = 0.5f |
| Một bề mặt được coi là dày bấy nhiêu khi tia đi qua phía sau nó. | |
| f32 | ssr_sky = 1.0f |
| Tia không trúng gì thì phản chiếu bấy nhiêu phần màu sương, 0..1. | |
Mờ chuyển động | |
Ảnh nhòe theo hướng mỗi pixel trượt trên màn hình giữa hai frame: khi camera di chuyển hay quay, và khi một vật tự chạy (mesh và model vẽ bằng các hàm 3D, có xương thì theo cả tư thế; xem draw3d_motion_id()). Vật nhòe lan ra cả nền sát mép nó. Camera đứng yên và vật đứng yên thì không nhòe. | |
| f32 | motion_blur = 0.0f |
| Phần chuyển động của một frame được nhòe, 0..1 (0.5 như máy quay phim). 0 là tắt. | |
| i32 | motion_blur_samples = 8 |
| Số mẫu dọc vệt nhòe, 2..32. | |
Tia nắng | |
Tia sáng tỏa từ mặt trời qua khe giữa các vật, khi mặt trời ở trong hoặc gần khung hình. Mặt trời là hướng của light3d::direction (draw_sky3d() đặt nó theo giờ trong ngày); chỗ trời là chỗ không có hình 3D nào. | |
| f32 | shafts = 0.0f |
| Độ sáng, 0..2. 0 là tắt. | |
| f32 | shafts_length = 0.8f |
| Tia dài bao nhiêu phần đường từ mỗi điểm tới mặt trời, 0..1. | |
| rgba | shafts_color {1.0f, 0.95f, 0.85f, 1.0f} |
| Màu nhân với màu nắng. | |
Lóa ống kính | |
Quầng và các đốm sáng dọc đường từ mặt trời qua tâm màn hình, như ánh sáng dội trong ống kính. Mờ dần khi mặt trời bị vật che hay ra khỏi khung hình. | |
| f32 | flare = 0.0f |
| Độ sáng, 0..2. 0 là tắt. | |
| f32 | flare_halo = 0.5f |
| Độ sáng của vòng quầng quanh tâm, nhân với flare. | |
Khử răng cưa theo thời gian (TAA) | |
Mỗi frame, hình chiếu 3D bị dịch đi một phần nhỏ của pixel (mỗi frame một chỗ khác), rồi ảnh được trộn với ảnh của các frame trước, đưa về đúng chỗ theo độ sâu và chuyển động của camera: cạnh xiên hết răng cưa, cạnh mảnh hết nhấp nháy. Chỉ lần vẽ 3D đầu tiên vào thế giới của mỗi frame được khử; 2D vẽ sau end_3d() không bị đụng tới. Mesh và model (có xương thì theo cả tư thế) có vận tốc riêng, nên mép của vật đang chạy cũng được khử (xem draw3d_motion_id()). Hình SDF, draw_instanced3d() và địa hình, cỏ, nước chỉ theo chuyển động của camera: chỗ ảnh cũ không còn khớp (độ sâu khác hẳn, màu nằm ngoài màu xung quanh) thì ảnh cũ bị bỏ, nên không để lại vệt, nhưng mép của chúng khi tự chạy còn răng cưa. | |
| bool | taa = false |
| Bật TAA. | |
| f32 | taa_sharpen = 0.25f |
| Làm nét lại ảnh sau khi trộn, 0..1. 0 là không làm nét. | |
Hiệu ứng màn hình của cảnh 3D, tính từ độ sâu của lần vẽ 3D: che khuất môi trường (SSAO), phản chiếu (SSR), mờ chuyển động, tia nắng và lóa ống kính.
Mọi hiệu ứng tắt ở giá trị mặc định: post3d{} vẽ y như khi không có nó. Đặt bằng post3d_set(), sửa được mỗi frame. Chỉ áp cho lần vẽ 3D vào thế giới (begin_3d() không có render texture), không áp cho lần vẽ vào render texture. Thứ tự trong end_3d(): sau các hình đục là decal, SSAO, SSR; rồi kính, nước và hạt 3D; rồi tia nắng, lóa ống kính và mờ chuyển động. post_fx (njin_post.h) và shader riêng của game chạy sau cùng, trên cả ảnh.