Tạo tác bản đồ bóng


16

Tôi muốn thử thêm bóng vào trò chơi XNA 3D. Tôi đã thiết lập một số môi trường thử nghiệm với một đèn và một camera. Tuy nhiên, tôi đang chạy vào các hiện vật với cách tiếp cận của tôi.

Tôi đang sử dụng mã shader từ http://pastebin.com/zXi0hmsU để hiển thị kết quả cuối cùng và http://pastebin.com/rY4Gcj9N để tạo bản đồ bóng. Mã này khá đơn giản và liên quan đến việc sản xuất sơ đồ độ sâu từ góc nhìn sáng, sau đó chiếu nó vào không gian máy ảnh và kiểm tra các chỗ ẩn.

Tuy nhiên, từ hầu hết các góc độ tôi đang nhận được kết quả khá xấu xínhư trong ảnh chụp màn hình này

Khung cảnh bao gồm một số hình khối đơn giản (được xây dựng bằng tay, hướng ra ngoài, mặt sau bị loại bỏ), một ánh sáng (bản đồ bóng hiển thị ở góc trên cùng bên trái - trông ổn) và một camera.

RenderTarget của tôi cho các bản đồ bóng được khởi tạo bởi

int shadowMapSize = 512;
RenderTarget2D shadowMap = new RenderTarget2D(GraphicsDevice, shadowMapSize,
    shadowMapSize, true, GraphicsDevice.PresentationParameters.BackBufferFormat,
    DepthFormat.Depth24Stencil8);
GraphicsDevice.SetRenderTarget(shadowMap);
GraphicsDevice.Clear(Color.White);
GraphicsDevice.DepthStencilState = DepthStencilState.Default;

Sau đó, CreateShadowMaphiệu ứng được áp dụng, tiếp theo là hiệu ứng LambertWithShadows. Cuối cùng, bản đồ bóng được vẽ bằng cách sử dụng a SpriteBatch.

Phần còn lại của mã bao gồm chỉ đơn giản là cung cấp các giá trị chính xác cho các shader. Nếu cần thiết, tôi có thể cung cấp nó tốt.

Câu trả lời:


19

Đây là vấn đề điển hình được gọi là mụn bản đồ bóng . Nó được gây ra do pixel được chiếu của bản đồ bóng (độ sâu) lớn hơn pixel trên màn hình (eq. Không thể biểu thị độ sâu chính xác).

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

Có rất nhiều giải pháp cho việc này. Đầu tiên dễ dàng nhất là thiên vị (tôi thấy nó trong mã của bạn, vì vậy đó không phải là vấn đề). Và giải pháp dễ dàng thứ hai là bản đồ bóng ở độ phân giải lớn hơn, nó thực sự hơn bình thường khi có bóng tối ở độ phân giải 2048x2048 trên hw hiện tại. (EDIT: điều đó không đúng, tôi đã viết rằng khi tôi đang làm việc dựng phim. Trong quá trình phát triển trò chơi, bạn muốn giữ cho bản đồ bóng của mình nhỏ nhất có thể)

Một số tài nguyên để nghiên cứu các kỹ thuật tiên tiến hơn.


biên tập:


Tôi có thêm một số tài liệu về chủ đề này trong công việc, nếu bạn quan tâm tôi cũng sẽ chia sẻ nó.
Notabene

Vấn đề chính với độ phân giải lớn là trong trò chơi cuối, tôi có khoảng 3-4 đèn không bị ảnh hưởng => Tôi sẽ phải sử dụng bản đồ bóng khối ở đó, dẫn đến 24 bóng. Nếu bạn có thêm tài liệu, tôi thực sự sẽ đánh giá cao nỗ lực của bạn trong việc chia sẻ nó với tôi :-)
Etan

Tôi quan tâm ít nhất nếu điều đó có vấn đề :)
James

1
@Etan. Vâng, đèn định hướng omni là nỗi đau thực sự nếu nói về bóng tối. (tôi biết vài thứ về nó :) gamedev.stackexchange.com/questions/6203/ tàng ). Cố gắng sử dụng bản đồ paraboloid kép. Hoặc nếu bạn thích hình khối, hãy cố gắng tiết kiệm một số không gian bằng cách loại bỏ giao lộ bực bội-camera_frustum cho mỗi khuôn mặt / kết xuất. Bạn chắc chắn sẽ không cần bóng cho mọi hướng mọi lúc (đặc biệt là ở bên ngoài)
Notabene

1
@Etan @James Tôi đã thêm một số thứ cho bạn. Cả hai đều đáng đọc nếu bạn quan tâm đến chủ đề này.
Notabene
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.