Bộ lọc xói mòn nhanh và tuyệt đẹp
Data Science·Hacker News·0 lượt xem

Bộ lọc xói mòn nhanh và tuyệt đẹp

Fast and Gorgeous Erosion Filter

AI Summary

Bài viết này giới thiệu một bộ lọc erosion (xói mòn) nhanh và đẹp mắt cho việc tạo địa hình theo quy trình (procedural terrain generation). Thay vì mô phỏng giọt nước truyền thống, kỹ thuật này sử dụng một hàm noise đặc biệt để tạo ra các khe núi và sống núi chân thực một cách hiệu quả. Nó thân thiện với GPU và có thể áp dụng như một bộ lọc hậu kỳ (post-process filter) lên các heightmap sẵn có, cho phép tạo địa hình theo từng khối (chunked generation) và tránh được các mô phỏng tốn kém. Các nhà phát triển có thể tận dụng phương pháp này để tạo ra các địa hình chi tiết, quy mô lớn mà không gặp phải các vấn đề về hiệu năng (performance bottlenecks).

Bài đăng trên blog này và video đi kèm đều giải thích một kỹ thuật xói mòn mà tôi đã thực hiện trong tám tháng qua. Video có nhiều hình ảnh động phức tạp và tập trung hơn vào quá trình...

Bài đăng trên blog này và video đi kèm đều giải thích kỹ thuật xói mòn mà tôi đã thực hiện trong 8 tháng qua. Video có nhiều hình ảnh động phức tạp và tập trung hơn vào quá trình khám phá, cải tiến và phát triển kỹ thuật của tôi, trong khi bài đăng này có thêm một chút chi tiết triển khai ở lần lặp cuối cùng. Tôi khuyên bạn nên xem video trước nhưng không bắt buộc. Bạn cũng có thể chuyển thẳng đến các liên kết ở cuối.

Trong thực tế, lượng mưa trên núi có xu hướng hội tụ thành dòng nước và sông, tạo nên những rãnh nước ở sườn núi. Những rãnh này có thể hình thành các kiểu phân nhánh khi các dòng nước nhỏ hòa vào các dòng lớn hơn. Và các rãnh thường va vào nhau, để lại những đường gờ sắc nhọn ngăn cách chúng.

Nhưng khi tạo cảnh quan ảo, việc mô phỏng vô số giọt nước diễn ra chậm. Nó cũng không phù hợp lắm để tạo theo khối, điều đó có nghĩa là nó không thực tế khi sử dụng khi tạo cảnh quan quá lớn để tạo tất cả cùng một lúc.

Điều này có nghĩa là các kỹ thuật được săn đón có thể tạo ra vẻ ngoài của sự xói mòn mà không cần phải xử lý việc mô phỏng quá trình đó. Bài đăng này nói về một kỹ thuật như vậy.

Ảnh chụp màn hình của Advanced Terrain Erosion Filter Shadertoy by me.

It’s essentially a special kind of noise which produces gorgeous branching gullies and ridges, while still allowing every point to be evaluated in isolation, which means it’s fast, GPU-friendly, and trivial to generate in chunks.

Hơn nữa, thay vì xác định toàn bộ cảnh quan, nó có thể được áp dụng trên bất kỳ hàm độ cao nào, về cơ bản là áp dụng xói mòn ở trên cùng như một bộ lọc.

Nền

Có một trang web tên là Shadertoy, nơi mọi người tạo và chia sẻ các shader độc lập. Trình đổ bóng là một chương trình chạy trên GPU, có thể được sử dụng để xác định bề mặt ảo sẽ trông như thế nào hoặc để tạo ra nhiều hiệu ứng khác hay thậm chí là toàn bộ cảnh.

Vào năm 2018, một người dùng có tên Clay John (Bluesky) đã đăng một Shadertoy có tên là Tiếng ồn địa hình bị xói mòn. Anh ấy đã viết:

Trình đổ bóng này là kết quả của một thời gian dài mơ ước về một hàm nhiễu trông giống như địa hình bị xói mòn, hoàn chỉnh với cấu trúc phân nhánh, có thể chạy trong một trình đổ bóng pixel đơn lẻ. Tôi muốn tránh bất cứ điều gì mô phỏng vì khi đó bạn không thể dễ dàng tạo ra những địa hình vô tận.

Giấc mơ đó nghe có vẻ quen thuộc nhưng Clay John đã thực sự biến nó thành hiện thực. Shadertoy của anh ấy là phiên bản gốc của kỹ thuật này. Ngả mũ trước anh ấy.

Sau đó, vào năm 2023, một người dùng tên là fewes, hay còn gọi là Felix Westin (trang web), đã đăng một Shadertoy được xây dựng trên nền tảng của Clay John. Phiên bản của Fewes đã điều chỉnh một chút cách thức hoạt động của hiệu ứng xói mòn và trình bày nó theo cách bóng bẩy hơn nhiều.

Ảnh chụp màn hình của Tiếng ồn xói mòn địa hình Shadertoy của Felix Westin (Ít).

Trong năm 2025 đến 2026, tôi đã triển khai các phiên bản kỹ thuật của riêng mình. Đầu tiên tôi tạo một phiên bản giải quyết một số thiếu sót của kỹ thuật ban đầu và có nhiều thông số trực quan hơn. Cuối cùng, tôi đã phát triển một phiên bản hoạt động theo cách hoàn toàn khác, tạo ra các rãnh và đường gờ sắc nét hơn và có nhiều thông số biểu cảm hơn. Nhưng trước khi tìm hiểu những điểm khác biệt, hãy bắt đầu với những kiến thức cơ bản về kỹ thuật ban đầu.

Ý tưởng cơ bản

Chúng ta bắt đầu với hàm độ cao trong đó chúng ta biết không chỉ độ cao tại mỗi điểm mà còn cả độ dốc, nghĩa là hướng và độ dốc của đoạn đường đi lên dốc nhất. Nước chảy theo hướng ngược lại, vì vậy bạn có thể coi gradient âm tại mỗi điểm như một mũi tên chỉ hướng nước sẽ chảy xuống sườn dốc.

Độ dốc tại mỗi điểm của bề mặt địa hình giống như một mũi tên chỉ hướng nước sẽ chảy xuống sườn dốc.

Hãy bắt đầu đơn giản, với một bề mặt nghiêng, trong đó độ dốc giống nhau ở mọi nơi.

Chúng tôi sử dụng dải màu để thêm các sọc chạy dọc theo hướng này. Các sọc tạo ra các rãnh và rặng xen kẽ, có thể được tạo ra do nước làm xói mòn địa hình.

Một bề mặt nghiêng với các rãnh được tạo từ các sọc theo độ dốc.

Các cạnh của các rãnh và đường gờ này có độ chuyển màu riêng, được thêm vào bản gốc để tạo ra các độ chuyển màu kết hợp mới.

Sau đó, chúng ta có thể lặp lại toàn bộ điều đó ở quy mô nhỏ hơn: Thêm các sọc nhỏ hơn chạy dọc theo các sườn dốc mới. Chúng tạo thành những rãnh và rặng núi mới, phân nhánh một cách tự nhiên theo một góc so với những rãnh và rặng núi đầu tiên.

Theo quy ước, mỗi lần lặp lại được gọi là một quãng tám. Thêm vài quãng tám nữa là xong phải không?

Một bề mặt nghiêng với nhiều quãng tám của rãnh, mỗi rãnh có tính đến độ dốc thay đổi so với các rãnh trước đó.

Ngoại trừ – nó không hoàn toàn đơn giản như tôi vừa nói.

Nếu chúng ta áp dụng phép xói mòn cho hàm độ cao ban đầu, trong đó độ dốc không giống nhau ở mọi nơi, thì chúng ta sẽ có một mớ hỗn độn. Ngay cả khi chúng tôi hiển thị nó chỉ với một quãng tám, nó vẫn chứa đầy những rãnh hỗn loạn thường không thẳng hàng với các sườn dốc. Chuyện gì đang xảy ra vậy?

Khi xoay mẫu sọc để khớp với độ dốc thay đổi, sẽ tạo ra các sọc hỗn loạn.

Tạo sọc

Để xoay mẫu sọc, chúng ta phải chọn một số điểm xoay để xoay nó.

Xoay mẫu sọc yêu cầu chọn một điểm xoay để xoay mẫu sọc đó.

Vấn đề là việc xoay quanh điểm xoay này sẽ tạo ra sự biến dạng ngày càng lớn ở đầu ra khi chúng ta càng ở xa điểm xoay. Điều này là do những thay đổi trong góc xoay không chỉ thay đổi hướng của các sọc tại một điểm nhất định mà còn làm thay đổi sọc nào nằm dưới điểm đó.

Phương pháp được sử dụng trong quá trình triển khai xói mòn là chia mẫu thành các ô mà mỗi ô có điểm xoay riêng cho các sọc. Nếu bạn tưởng tượng một lưới hình vuông, sẽ có một ô trên mỗi ô vuông, với trục xoay được đặt ngẫu nhiên bên trong hình vuông, tương tự như Tiếng ồn Worley đơn giản.

Chúng tôi vẫn gặp một chút biến dạng nhưng không quá tệ vì điểm xoay không bao giờ ở quá xa. Ít nhất là miễn là độ dốc của hàm chiều cao không thay đổi quá mạnh trong một ô.

Mẫu sọc được chia thành các ô và mỗi ô có điểm xoay riêng để xoay các sọc của nó.
Các sọc của các ô lân cận được trộn lẫn với nhau để tránh sự gián đoạn giữa các ô.

Để đảm bảo kết quả mượt mà mà không bị gián đoạn, chúng tôi trộn các sọc của các ô lân cận. Các sọc về cơ bản là các sóng hình sin được ép đùn, cụ thể là sóng cosine cho độ lệch độ cao và sóng hình sin cho đạo hàm (độ dốc).

Độ lệch chiều cao rãnh theo sóng cosin và độ dốc theo sóng hình sin.

Lý do khiến các đường sọc kết hợp rất đẹp với nhau ngay cả khi không thẳng hàng là vì nếu bạn kết hợp hai sóng hình sin không thẳng hàng, bạn sẽ chỉ nhận được một sóng hình sin mới có biên độ nhỏ hơn.

Việc trộn có thể biến các sọc không thẳng hàng từ các ô khác nhau thành một sọc dài liên tục.

Kích thước tế bào có ảnh hưởng lớn. Nếu chúng tôi chọn kích thước ô lớn so với chiều rộng của sọc, chúng tôi sẽ gặp phải các vấn đề về biến dạng đáng kể, giống như khi chúng tôi sử dụng một điểm xoay duy nhất. Nếu chúng ta chọn kích thước ô nhỏ thì hầu như không có chỗ cho bất kỳ sọc nào và thay vào đó chúng ta sẽ nhận được một loại nhiễu hạt.

Nếu chúng ta làm cho kích thước ô thậm chí còn nhỏ hơn so với độ dày của sọc thì mẫu sẽ bắt đầu có màu trắng. Hay nói về gờ và rãnh thì toàn là gờ và không có rãnh. Điều này là do mỗi ô sử dụng một mẫu sọc có sọc trắng ở giữa.

Bảo quản đỉnh

Khi tôi nói về các đỉnh và thung lũng, tôi đang đề cập đến cực đại và cực tiểu cục bộ của hàm độ cao ban đầu, trong khi khi tôi nói về các đường gờ và rãnh, tôi đang đề cập đến cực đại và cực tiểu cục bộ của các sọc rãnh được áp dụng trong mỗi quãng tám của bộ lọc xói mòn.

Giờ đây, chúng ta có thể tạo các sọc thẳng hàng với bất kỳ độ dốc nào, chúng ta có thể áp dụng hiệu ứng xói mòn cho hàm chiều cao mà không bị biến dạng hỗn loạn.

Tuy nhiên, mặc dù bây giờ chúng ta đã có những rãnh nước đẹp ở sườn núi, nhưng các đỉnh núi trông có vẻ không ổn. Chúng gần như không giống đỉnh núi chút nào.

Tại các đỉnh và thung lũng của hàm độ cao ban đầu, nơi độ dốc thay đổi đột ngột, hiệu ứng xói mòn tạo ra các nếp gấp lộn xộn.

Đó là vì các đỉnh có thể nằm ở bất kỳ vị trí nào trong mẫu sọc của chúng tôi và chúng được nâng lên hoặc hạ xuống tùy ý dựa trên điều đó. Hơn nữa, sẽ có vấn đề xảy ra khi độ dốc bề mặt gần bằng 0, điều này xảy ra ở các đỉnh và thung lũng. Khi độ dốc bằng 0, độ dốc không có hướng xác định nên hướng của độ dốc thay đổi đột ngột xung quanh các điểm đó, tạo ra các họa tiết sọc hỗn loạn ở khu vực xung quanh.

Có hai cách chúng ta có thể giải quyết vấn đề này và cả hai đều dựa trên độ dốc của sườn dốc. Có một phương pháp ban đầu được Clay John và fewes sử dụng mà tôi gọi là phương pháp tần số, và có một phương pháp khác mà tôi nghĩ ra, gọi là phương pháp làm mờ.

Phương pháp tiếp cận tần số

Phương pháp ban đầu được Clay John và fewes sử dụng là làm cho tần số sọc tỷ lệ thuận với độ dốc nên các sọc càng dày thì địa hình càng bằng phẳng.

Tại các đỉnh và thung lũng, nơi có độ dốc bằng 0, các sọc trở nên dày vô tận. Và bởi vì mỗi ô có một sọc trắng ở giữa, điều này có nghĩa là các đỉnh núi và thung lũng, nơi có độ dốc bằng 0, luôn nằm trên phần của họa tiết sọc tương ứng với sườn núi chứ không bao giờ là rãnh nước.

Điều này có tác dụng rất tốt đối với các đỉnh núi, nhưng tôi phát hiện ra rằng thật không may, nó lại khiến các thung lũng có phần lồi lên ở phía dưới vì chúng cũng nằm trên các "rặng núi" theo kiểu sọc. Điều này không thể nhìn thấy được trên Shadertoys của họ, vì chúng đã làm mờ đi sự xói mòn ở độ cao thấp hơn. Và cách giải quyết này rất tuyệt nếu bạn muốn có những thung lũng bằng phẳng.

Tuy nhiên, nếu bạn áp dụng sự xói mòn với cường độ như nhau ở mọi nơi, các chỗ phình ra ở các thung lũng sẽ xuất hiện và điều đó có nghĩa là bạn không thể có được các thung lũng hình chữ V sắc nét.

Phương pháp tần số sẽ tạo ra các chỗ phình ra ở đáy thung lũng nếu nó được áp dụng hết công suất ở mọi nơi.

Bạn có thể tìm thấy Shadertoy của tôi tại đây dựa trên cách tiếp cận tần suất. Nó tương tự như của fewes nhưng được cấu trúc lại để có các thông số trực quan hơn.

Phương pháp làm mờ

Tôi đã nghĩ ra một cách tiếp cận khác, đó là giữ cho độ rộng của các sọc nhất quán và thay vào đó làm mờ dần các sọc có độ dốc gần bằng 0. Nếu chúng ta mờ dần về phía "màu trắng" – giá trị tối đa của quãng tám rãnh – chúng ta sẽ có được hiệu ứng tương tự như với cách tiếp cận tần số, hình dạng của các đỉnh được giữ nguyên nhưng có những chỗ phình ra ở đáy thung lũng.

Bây giờ, thay vào đó, nếu chúng ta mờ dần về phía "màu đen" – giá trị tối thiểu của quãng tám rãnh – thì chúng ta sẽ không có bất kỳ chỗ phình nào ở các vùng trũng mà thay vào đó chúng ta sẽ có một nếp gấp ở các đỉnh. Nhưng nếu chúng ta giảm dần về giá trị chuyển từ màu đen ở thung lũng núi sang màu trắng ở các đỉnh núi, chúng ta có thể có được các đỉnh và thung lũng sắc nét cùng một lúc.

Phương pháp làm mờ có thể tạo ra các đỉnh và thung lũng đẹp mắt cùng một lúc.

Trong quá trình triển khai của mình, tôi cho phép người dùng tùy ý cung cấp giá trị fade target này làm tham số đầu vào cho hàm xói mòn, chẳng hạn như dựa trên độ cao.

Đối với giá trị độ cao h tại thời điểm hiện tại, nó có thể trông như thế này nếu phạm vi độ cao dự kiến đi từ thung lũngAlt đến đỉnhAlt:

float inverse_lerp(float a, float b, float v) {
    return (v - a) / (b - a);
}
// Chuyển đổi độ cao thành giá trị trong khoảng từ -1 đến 1. float fadeTarget = inverse_lerp(valleyAlt, PeakAlt, h) * 2.0 - 1.0;

Phương pháp làm mờ có một vấn đề khác cần được xử lý cẩn thận. Ban đầu nó dường như tạo ra những nếp gấp có thể nhìn thấy được – còn gọi là sự gián đoạn – gây ra bởi sự thay đổi đột ngột về hướng gradient xung quanh các đỉnh và thung lũng. Nhưng sau đó tôi phát hiện ra rằng vấn đề này có thể được giải quyết bằng cách sử dụng chức năng tạo hình thích hợp trên độ dốc.

Ngay từ đầu, tôi đã nâng độ dốc của con dốc lên lũy thừa 0,5, tương đương với việc lấy căn bậc hai của độ dốc. Điều này áp dụng xói mòn đồng đều hơn so với khi chúng ta sử dụng độ dốc trực tiếp. Thật không may, nó tạo ra sự gián đoạn rõ rệt ở các đỉnh và thung lũng. Điều này là do đường cong căn bậc hai bắt đầu theo chiều dọc, do đó khi độ dốc tăng từ 0 đến độ nghiêng nhỏ nhất, độ xói mòn ngay lập tức tăng mạnh.

Nhưng chúng ta có thể sử dụng nhiều chức năng khác để định hình sự xói mòn. Cách cuối cùng tôi sử dụng là lật đường cong theo chiều dọc bằng cách trừ nó đi một, sau đó nâng nó lên lũy thừa hai, rồi lật ngược lại kết quả.

float easy_out(float t) {
    // Lật bằng cách trừ đi một.
    // Hàm bão hòa kẹp giữa 0 và 1.
    float v = 1,0 - bão hòa(t);
    // Nâng lên lũy thừa hai và lật ngược lại.
    trả về 1,0 - v * v;
}

Cái này có hình dạng hơi giống với căn bậc hai – trên thực tế, nó được phản chiếu xung quanh đường chéo – nhưng đường cong bắt đầu vừa phải hơn nhiều. Điều này hầu như loại bỏ sự xuất hiện của sự gián đoạn, đặc biệt là khi chúng ta xếp lớp nhiều quãng tám của rãnh.

Với sự điều chỉnh này, phương pháp làm mờ dần hoạt động giống như phương pháp tần số. Và không giống như phương pháp tần số, nó hoạt động tốt khi áp dụng lực xói mòn ở mọi nơi, có thể được sử dụng để tạo ra các thung lũng sắc nét hình chữ V nếu muốn.

Cuộc tìm kiếm những con mòng biển sắc nét, phân nhánh

Sự xói mòn mà chúng ta gặp phải cho đến nay trông có vẻ ổn, nhưng những rãnh và rặng núi lớn hơn bị mất đi một chút ở những rãnh nhỏ hơn. Tôi thích nếu các rãnh ở tất cả các vảy có thể có đường gờ và nếp gấp sắc nét hơn, đồng thời thể hiện rõ hơn kiểu phân nhánh.

Để giải quyết vấn đề này, tôi đã thực hiện rất nhiều thử nghiệm và phát triển ba kỹ thuật song hành với nhau. Tôi gọi chúng là các rãnh mờ xếp chồng, rãnh chuẩn hóa và rãnh thẳng và tôi sẽ xem xét từng rãnh trong các phần tiếp theo.

Trong các kỹ thuật được phát triển cho đến nay, các đường gờ của rãnh lớn hơn phần nào bị vỡ và mất đi ở các rãnh nhỏ hơn.
Bằng cách sử dụng các kỹ thuật mà tôi gọi là làm mờ xếp chồng, rãnh chuẩn hóa và rãnh thẳng, đường gờ của rãnh lớn hơn vẫn sắc nét và không bị gián đoạn, đồng thời mô hình phân nhánh của rãnh có kích thước khác nhau trở nên rõ ràng hơn.

Làm mờ xếp chồng

Chúng tôi đã khắc phục sự cố về độ sắc nét trước đó. Các đỉnh núi và thung lũng trông không sắc nét cho đến khi chúng tôi bắt đầu mờ dần theo màu đen hoặc trắng đối với các thung lũng và đỉnh núi tương ứng. Và hóa ra chúng ta có thể làm điều gì đó tương tự cho các rãnh và rặng núi.

Trước tiên hãy thiết lập một số thuật ngữ.

Tôi đang gọi giá trị mà chúng ta giảm dần theo hướng mục tiêu giảm dần và giá trị này thường được biểu thị bằng một biến đi từ -1 ở mức thấp nhất đến 1 ở mức cao nhất.

Sau đó là mức độ chúng ta đang mờ dần về phía mục tiêu mờ dần. Chúng tôi đang thực hiện mức trung bình có trọng số (còn được gọi là lerp hoặc kết hợp) của rãnh và mục tiêu mờ dần, có thể là rãnh 100% ở sườn dốc, mục tiêu mờ 100% ở địa hình bằng phẳng hoặc kết hợp cả hai, tùy thuộc vào độ dốc. Chúng ta có thể coi đây là một mặt nạ được áp dụng cho mục tiêu mờ dần, trước khi phủ nó lên trên các rãnh.

Khi chúng ta đang nói về phương pháp làm mờ, mục tiêu làm mờ và mặt nạ đã dựa trên hàm chiều cao ban đầu và độ dốc của nó. Nhưng cũng giống như chúng ta không muốn có những rãnh nhỏ ngay trên đỉnh núi hoặc thung lũng, chúng ta cũng không muốn có những rãnh nhỏ hơn ngay trên các rặng núi hoặc các nếp gấp của những rãnh lớn hơn. Chúng ta có thể đạt được điều này nếu kết thúc mỗi quãng tám bằng cách cập nhật mục tiêu mặt nạ và độ mờ cũng thành màu đen và trắng ở các nếp gấp và đường gờ của quãng tám đó.

Biểu đồ luồng về mức độ ảnh hưởng của mục tiêu mờ dầnmặt nạ đến từng quãng tám của rãnh nước.

Sơ đồ trên có vẻ khó hiểu nhưng đây là ý chính:

  • Các rãnh thô 1 quãng tám bị mờ dần về phía mục tiêu mờ dần đầu vào dựa trên mặt nạ đầu vào để tạo ra các rãnh mờ 1 quãng tám. Bạn có thể coi nó như mục tiêu mờ dần có mặt nạ được "phủ" lên trên các rãnh thô quãng tám 1. Cho đến nay không có gì mới.
  • Sau đó, các rãnh giảm dần quãng tám 1 được sử dụng làm mục tiêu giảm dần mới cho quãng tám tiếp theo. Mặt nạ cũng được cập nhật: Từ các rãnh thô 1 quãng tám, phần đóng góp của mặt nạ được tạo ra có độ mờ ở các nếp gấp và đường gờ, nơi độ dốc bằng 0. Mặt nạ hiện có được xếp chồng lên trên phần đóng góp của mặt nạ mới để tạo ra mặt nạ kết hợp mới sau quãng tám 1.
  • Các bước tương tự được lặp lại cho mỗi quãng tám mới. Các rãnh thô 2 quãng tám bị mờ dần về phía mục tiêu mờ dần mới dựa trên mặt nạ kết hợp mới để tạo ra các rãnh mờ 2 quãng tám. Chúng được sử dụng làm mục tiêu làm mờ mới và mặt nạ được cập nhật với phần đóng góp mới dựa trên rãnh thô 2 quãng tám. Và vân vân.

Theo nghĩa rộng, mỗi quãng tám mới sẽ tạo thêm nhiều gờ và nếp gấp trên bề mặt địa hình, điều này ngày càng hạn chế diện tích bề mặt mà các rãnh tiếp theo có thể tác động lên bề mặt.

Những đóng góp về mặt nạ mới được kết hợp với mặt nạ kết hợp hiện có như thế nào? Hãy để tôi bắt đầu bằng cách nói rằng trong sơ đồ trên, dễ dàng nhất để khái niệm mặt nạ được áp dụng cho mục tiêu làm mờ, nhưng trong mã, nó thực sự là một mặt nạ được áp dụng cho các rãnh, vì vậy 0 có nghĩa là tất cả mục tiêu làm mờ và 1 có nghĩa là tất cả các rãnh. Ở dạng này, phần đóng góp của mặt nạ mới có thể được nhân lên trên mặt nạ kết hợp để tạo ra mặt nạ kết hợp mới.

Ngoài ra, chúng ta có thể triển khai một biện pháp kiểm soát hữu ích tại đây. Bằng cách nâng nghịch đảo của combi-mask (có nghĩa là phần bù của nó) lên một số lũy thừa trước khi nhân nó với phần đóng góp mới, chúng ta có thể kiểm soát mức độ chi tiết của sự xói mòn. Giá trị thấp hơn sẽ hạn chế tác động của các rãnh tần số cao hơn đến các sườn dốc hơn.

float pow_inv(float t, float power) {
    // Lật, nâng lên mức mạnh và lật lại.
    // Hàm bão hòa kẹp giữa 0 và 1.
    trả về 1,0 - pow(1,0 - bão hòa(t), công suất);
}
combiMask = pow_inv(combiMask, chi tiết) * newMask;
Từ trái sang phải, tham số chi tiết đã được đặt lần lượt là 0,7, 1,5 và 3,0.

Rãnh bình thường hóa

Một yếu tố cản trở các đường gờ và nếp gấp sắc nét hơn là độ lớn không nhất quán của các rãnh, gây ra bởi sự nội suy của các sọc có thể được căn chỉnh tốt hoặc không.

Tại một thời điểm, tôi nhận ra rằng vì chúng ta nội suy song song cả sóng cosin và sóng sin, nên chúng ta có thể coi mỗi cặp cosine/sine là một điểm trên một vòng tròn đơn vị và giá trị được nội suy cũng là một điểm trên một vòng tròn. Điểm vòng tròn được nội suy có thể đã co lại thành bán kính nhỏ hơn một, nhưng việc bình thường hóa nó trở lại một là chuyện nhỏ. Và điều này có nghĩa là cả sóng cosine và sóng sin nội suy đều có độ lớn không đổi bằng 1.

Bây giờ, trong hàm sọc nội suy thực tế mà chúng ta đã sử dụng cho đến thời điểm này, các sin được nhân với một vectơ trực giao với độ dốc địa hình để tính độ dốc của độ dốc. Nhưng vì vectơ này giống nhau đối với tất cả các mẫu đóng góp, nên phép nhân có thể bị hoãn lại và áp dụng cho kết quả được nội suy thay vì cho từng mẫu đóng góp, để chúng ta có thể tự do thực hiện việc chuẩn hóa trước.

Khi áp dụng tính năng chuẩn hóa đơn giản, một số thành phần lạ xuất hiện ở nơi các đường gờ và nếp gấp nối với nhau và tạo thành các vòng lặp. Giả sử, điều này xảy ra tại những điểm mà các sóng nội suy triệt tiêu hoàn toàn; điều gì đó dường như không thể tránh khỏi xảy ra đều đặn. Trên địa hình, điều này biểu hiện dưới dạng những chỗ lồi lõm (và lỗ hổng) có gai nhọn.

Tuy nhiên, có thể tránh được hiện tượng lặp lại nếu chúng ta chỉ chuẩn hóa độ dài trên một ngưỡng nhất định. Để tránh sự gián đoạn giữa các rãnh đã chuẩn hóa và không chuẩn hóa, chúng ta có thể sử dụng phương pháp sau:

  • Tỷ lệ độ dài theo hệ số k lớn hơn một.
  • Kẹp độ dài kết quả thành một.

Tôi đã sử dụng hệ số k là 2, sao cho độ dài lớn hơn 0,5 sẽ được chuẩn hóa. Điều này tạo ra sự cân bằng tốt với nhiều rãnh có độ lớn nhất quán và không có hiện vật lặp đi lặp lại.

Các rãnh không được chuẩn hóa sẽ có độ lớn không nhất quán.
Việc chuẩn hóa hoàn toàn tất cả các rãnh sẽ tạo ra các phần nhô ra có gai nhọn.
Chỉ bình thường hóa các rãnh có cường độ 0,5 hoặc lớn hơn sẽ mang lại sự cân bằng tốt.

Phong cách chuẩn hóa một phần mà tôi đã chọn tạo ra sự gián đoạn bậc hai (thay đổi đột ngột về độ dốc) ở một số nơi, nhưng vì nó không đáng chú ý khi sử dụng nhiều quãng tám nên tôi không bận tâm đến cách tiếp cận phức tạp hơn.

Tôi nhận thấy rằng khả năng tạo ra tiếng ồn định hướng còn hữu ích cho nhiều mục đích khác ngoài xói mòn, vì vậy tôi đã phát hành chức năng tiếng ồn có tên Tiếng ồn Phacelle mà tôi đã viết ở đây.

Rãnh thẳng

Khi các đường gờ và nếp nhăn trở nên sắc nét hơn, một vấn đề khác lại xuất hiện. Các đường gờ và nếp gấp nhỏ hơn thường chạy dọc theo các đường gờ lớn hơn một khoảng ngắn trước khi phân nhánh.

Ở đây, những hạn chế của việc lập mô hình rãnh hình sin được thể hiện rõ ràng. Bạn thấy đấy, về phía các rãnh, độ dốc địa hình bị nó tác động mạnh, hướng sang một bên so với các rặng núi. Nhưng ở phía dưới và phía trên các rãnh, chúng hầu như không ảnh hưởng gì đến độ dốc địa hình. Vì vậy, tại những điểm đó, các rãnh nhỏ hơn sẽ chạy song song với các rãnh lớn hơn.

Độ dốc địa hình không bị ảnh hưởng bởi các rãnh trên đỉnh hoặc ở đáy các nếp gấp.

Vì hiệu ứng diễn ra từ từ nên các rãnh nhỏ hơn có xu hướng cong lại ở phần cuối thay vì phân nhánh rõ ràng từ các rãnh lớn hơn. Hình ảnh trực quan của các đường gờ và nếp gấp chỉ với hai quãng tám rãnh cho thấy sự khác biệt rõ ràng.

Hiệu ứng của rãnh không thẳng tinh tế hơn trên bề mặt địa hình thực tế. Nhưng khi so sánh cẩn thận các hình ảnh bên dưới, bạn có thể thấy rằng hình ảnh đầu tiên, không có rãnh thẳng, có nhiều đường gờ với các rãnh nhỏ ở trên, ít trường hợp rãnh phân nhánh ở các góc sạch thay vì cong và kết cấu tổng thể có cảm giác dai và nhão hơn một chút.

Địa hình bị xói mòn không có kỹ thuật rãnh thẳng.
Địa hình bị xói mòn bằng kỹ thuật rãnh thẳng.

Tôi đã khắc phục vấn đề về rãnh không thẳng bằng cách giả mạo các độ dốc nhất quán khi tính toán độ dốc được sử dụng cho các hướng của mẫu sọc rãnh.

Chúng ta có thể giả sử rằng độ dốc của rãnh là không đổi từ trên xuống dưới, như thể rãnh là sóng tam giác đùn thay vì sóng hình sin. Độ dốc giả được thực hiện bằng cách sử dụng dấu hiệu của sóng hình sin điều khiển độ dốc của rãnh, thay vì sử dụng trực tiếp giá trị của nó. Nghĩa là, nếu sin âm, chúng ta sử dụng giá trị -1 và nếu không thì giá trị là 1.

Đạo hàm của các rãnh tuân theo dấu hiệu của sóng hình sin, như thể các rãnh thẳng từ trên xuống chứ không phải cong.

Tôi cũng đã thử làm cho các rãnh thực sự là các sóng tam giác đùn, nhưng do sự tương tác phức tạp trong cách kết hợp các quãng tám khác nhau nên kết quả cuối cùng trông tệ hơn.

Một khía cạnh của kỹ thuật xói mòn tổng thể mà tôi chưa trình bày rõ ràng là nó không chỉ đưa ra độ cao của địa hình bị xói mòn mà còn cả các dẫn xuất phân tích. Tuy nhiên, những dẫn xuất đó không bao giờ chính xác lắm, dù là trong cách triển khai của Clay John và fewes hay của chính tôi. Chúng được sử dụng nội bộ để tính toán hướng rãnh, nhưng đạo hàm đầu ra thực tế chưa bao giờ được sử dụng cho bất kỳ mục đích nào.

Nhưng ngay cả khi không chính xác, chúng vẫn có thể hữu ích, vì vậy tôi không muốn xóa hỗ trợ cho chúng. (Tôi thực sự đã bắt đầu sử dụng chúng để tính toán độ che phủ của cây.)

Với phương pháp giảm dần, mặt nạ cũng được sử dụng trên các đạo hàm của mỗi quãng tám. Chúng bị mờ dần về phía độ dốc bằng 0 thay vì giá trị mục tiêu mờ dần, giá trị này chỉ liên quan đến độ cao. Nhưng làm mờ đạo hàm về 0 tại các đường gờ và nếp gấp làm suy yếu kỹ thuật rãnh thẳng.

Vì vậy, tôi bắt đầu tính đạo hàm song song theo hai cách khác nhau. Đạo hàm đầu ra được lưu trữ như một phần của biến HeightAndSlope trong khi phiên bản bên trong được lưu trữ trong biến gullySlope. Và trong khi cái trước mờ dần về 0 theo mặt nạ thì cái sau thì không.

Độ dốc rãnh nước giả có nghĩa là các rãnh thẳng mới được tạo ra dựa trên nó có sự gián đoạn ở các nếp gấp và đường gờ của các sườn dốc giả, vì các đường sọc đi theo các hướng khác nhau đối đầu nhau. Điều này có thể được nhìn thấy trong phần các rãnh thô 2 quãng tám của sơ đồ trước đó.

Nhưng những điểm gián đoạn này đã biến mất hoàn toàn trong các rãnh mờ được sử dụng để bù chiều cao đầu ra (và đạo hàm đầu ra), vì vậy chúng không phải là vấn đề.

Những điểm gián đoạn của rãnh thô sẽ mờ đi khi kết hợp với mặt nạ kết hợp.

Vẫn còn một vấn đề với độ dốc. Đối với các rãnh, chúng ta có thể coi chúng là sóng tam giác và tính toán độ dốc của các sóng giả tam giác đó theo tần số và cường độ, nhưng không như vậy với độ dốc của độ cao đầu vào mà chúng ta có thể giả định rất ít.

Nếu chúng ta sử dụng độ dốc đầu vào không thay đổi thì quãng tám rãnh ban đầu sẽ có tác động lớn không cân xứng ở gần các đỉnh và đáy, nơi độ cao đầu vào thường được làm tròn và do đó có ít hoặc không có đóng góp vào độ dốc. Nhưng ở địa hình đầu ra bị xói mòn, các đỉnh và thung lũng thường nhọn, có độ dốc lớn như những nơi khác.

Tôi đã thử nghiệm nhiều giải pháp khác nhau cho vấn đề này, nhưng cuối cùng, điều mang lại kết quả tốt nhất là chỉ giả vờ rằng độ cao đầu vào có độ dốc cụ thể ở mọi nơi. Độ dốc giả định này có thể được điều chỉnh để phù hợp phần nào với độ dốc điển hình mà địa hình bị xói mòn có.

Thật là mỉa mai khi công việc ban đầu của tôi về kỹ thuật xói mòn lại tập trung vào việc làm cho các đạo hàm phân tích trở nên chính xác hơn, nhưng cuối cùng lại từ bỏ hoàn toàn việc đó. Nhưng đó đôi khi là quá trình khám phá như mê cung.

Lớp sơn mới

Kỹ thuật hiện đã thay đổi đủ để có thể điều chỉnh một số tham số nhằm tận dụng tối đa chức năng mới. Trong khi đó, tôi cũng tìm thấy một vị trí mới trong bản đồ chiều cao để tập trung vào. Dưới đây là địa hình tham khảo mà tôi sẽ sử dụng sau này, bao gồm cả các đặc điểm được đề cập trong phần còn lại của bài viết này.

Địa hình tham chiếu mới tận dụng các tính năng mới được triển khai.

Mặc dù bản thân nó không phải là một phần của kỹ thuật xói mòn nhưng việc trang trí địa hình bằng những vật liệu đẹp cũng rất thú vị. Tôi đã điều chỉnh logic kế thừa từ Shadertoy của fewes và thêm vào đó những phần gập ghềnh để gợi nhớ đến cây cối. Hơn nữa, tôi đã cố gắng thêm các vệt nhỏ gợi lên sự thoát nước bằng kỹ thuật mà tôi sẽ thảo luận sau.

Địa hình mới với các đặc điểm gợi lên đá, đất, cỏ, cây cối và các vệt thoát nước.

Đỉnh nhọn

Hóa ra việc bình thường hóa các rãnh làm cho các ngọn núi bớt nhọn hơn, giữ được hình dạng tròn trịa hơn của hàm chiều cao đầu vào.

Lúc đầu, tôi cố gắng bù đắp bằng cách áp dụng một hàm đặc biệt cho chiều cao đầu vào để làm cho các đỉnh trở nên nhọn hơn trước khi chuyển chúng sang hàm xói mòn. Nhưng sau đó tôi phát hiện ra rằng có một giải pháp đơn giản hơn có thể được triển khai một cách đơn giản trong chính hàm xói mòn: Đơn giản chỉ cần thu nhỏ phần rãnh của rãnh bị mờ theo hệ số trọng lượng rãnh nào đó (chẳng hạn như 0,5) và bù lại bằng cách tăng cường độ xói mòn theo hệ số nghịch đảo (như 2,0).

Trên cùng bên trái: Hàm chiều cao ban đầu không có cường độ xói mòn. Trên cùng bên phải: Xói mòn được áp dụng nhưng các đỉnh núi không nhọn. Phía dưới bên trái: Trọng lượng rãnh giảm xuống 0 chỉ hiển thị các đỉnh và không có rãnh. Dưới cùng bên phải: Với cường độ xói mòn gấp đôi và trọng lượng bằng một nửa rãnh nước, chúng ta bị xói mòn với các đỉnh nhọn đẹp mắt.

Các đỉnh nhọn vẫn phụ thuộc vào mục tiêu làm mờ có giá trị gần bằng 1, vì vậy trong tất cả các hình ảnh ví dụ, các đỉnh ở độ cao thấp hơn ít rõ rệt hơn.

Chúng ta có thể xem điều gì xảy ra khi trọng lượng của rãnh giảm xuống bằng 0. Điều này bảo tồn hình dạng tổng thể của những ngọn núi bị xói mòn, bao gồm các đỉnh và thung lũng sắc nét nhưng không có rãnh.

Có một loại hiệu ứng bóng mờ tinh tế của các rãnh hiện diện, trong đó các đường gờ và nếp gấp giống nhau được biến thành tất cả các đường gờ trong đó mục tiêu làm mờ ban đầu là dương và tất cả các nếp nhăn ở vị trí âm. Điều này sẽ vô hiệu hóa một nửa số nếp nhăn và đường gờ dự kiến nếu sử dụng giá trị trọng lượng rãnh rất thấp, nhưng ở giá trị lớn hơn thì không có vấn đề gì đáng chú ý.

Chắc chắn có nhiều cách khác để giải quyết vấn đề này, nhưng cách tiếp cận ở đây rất đơn giản và hoạt động đủ hiệu quả.

Làm tròn các đường gờ và nếp gấp

Kỹ thuật được thực hiện có thể tạo ra các đường gờ và nếp gấp rất sắc nét nhưng thường mong muốn có được thứ gì đó không quá sắc nét. Ví dụ:

  • Các đỉnh và rặng núi thực sự có xu hướng không sắc nét nếu bạn phóng to đủ.
  • Thung lũng và đáy rãnh có thể có hình dạng tròn nếu trầm tích tích tụ trong đó.

Vì lý do này, tôi đã triển khai tính năng "làm tròn cạnh" bằng tính năng kiểm soát riêng cho các nếp gấp và đường gờ. Như tôi đã đề cập trước đó, mặt nạ dựa trên độ dốc được truyền qua hàm tạo hình. Bằng cách kết hợp chức năng dễ dàng có kích thước thay đổi vào chức năng định hình này, có thể đạt được việc làm tròn các đường gờ và nếp gấp. Và bằng cách trộn hai giá trị làm tròn khác nhau – một cho các đường gờ và một cho các nếp gấp – dựa trên mục tiêu làm mờ, mức độ làm tròn có thể được kiểm soát riêng cho các giá trị đó.

Mô tả không có đường tròn, đường gờ tròn, nếp nhăn tròn và cả hai cùng một lúc.

Tôi muốn làm tròn có cùng kích thước cho các rãnh của tất cả các quãng tám, do đó, các giá trị làm tròn được điều chỉnh ngược lại theo giá trị độ mài mòn, kiểm soát mức độ nhỏ hơn của các rãnh trong mỗi quãng tám (thường bằng một nửa kích thước).

Việc làm tròn cũng ảnh hưởng đến các đỉnh và thung lũng xuất phát từ hàm độ cao ban đầu (và độ dốc của nó), nhưng hàm xói mòn không biết về kích thước của các đặc điểm địa hình đến từ những đặc điểm đó, do đó, một giá trị đầu vào được cung cấp để điều chỉnh việc làm tròn các đặc điểm đó.

Thoát nước

Trong khi làm cho sự xói mòn ngày càng rõ nét, tôi chợt nảy ra ý tưởng về một chiếc chén thánh: Liệu kỹ thuật này có thể mô hình hóa các rãnh phân nhánh rõ ràng đến mức có thể tạo ra các mạng lưới sông phân nhánh nhỏ không? Hóa ra là: đại loại vậy, với một số lưu ý.

Ghi chú bên lề: Sau này tôi mới biết rằng các đường phân nhánh ở sườn núi mà tôi nghĩ đến tạo thành thoát nước đuôi gai , ngoài sông và lạch, còn bao gồm các kênh tuyết, trầm tích và dòng chảy mảnh vụn. Các vệt màu thường không phải là nước mà là đá và trầm tích còn sót lại có màu khác với đất hoặc thảm thực vật xung quanh. Dù thế nào đi nữa, nó có xu hướng trông giống như những đường sáng.

Nếu chúng ta bỏ qua trọng lượng rãnh và việc làm tròn rãnh và nếp gấp được thảo luận gần đây, thì mục tiêu làm mờ trên thực tế đã là bản đồ về các rãnh và nếp gấp trên địa hình bị xói mòn, khi kỹ thuật đã trải qua tất cả các quãng tám của rãnh. Chỉ có điều, quãng tám cuối cùng xuất hiện với các đường dày hơn nhiều so với các quãng còn lại vì nó chưa được lọc qua mặt nạ. Điều này có thể được giải quyết bằng cách làm mờ dần nó về giá trị trung tính bằng 0/xám dựa trên mặt nạ, dẫn đến cái mà tôi gọi là bản đồ sườn núi.

Trái: Mục tiêu mờ dần sau 2 quãng tám. Giữa: Bản đồ sườn núi, dựa trên 2 quãng tám. Phải: Bản đồ sườn núi, dựa trên 5 quãng tám.

Giờ đây, những đặc điểm được thảo luận gần đây làm suy yếu bản đồ sườn núi, vì vậy, để tránh phải chọn giữa cái này và cái kia, chúng ta có thể theo dõi song song hai bản sao của mục tiêu mờ dầnmặt nạ và xử lý các bản sao cho bản đồ sườn núi không có các đặc điểm đó.

Đây là hình ảnh trực quan của bản đồ sườn núi trên địa hình:

Hiển thị bản đồ sườn núi trên chính địa hình, với các sườn núi màu trắng và các đường gấp khúc màu đen.

Với bản đồ sườn núi, thật dễ dàng để vẽ những đường nhỏ ở dưới cùng của tất cả các rãnh trông giống như hệ thống thoát nước dạng đuôi gai. Đây lại là hình ảnh của địa hình có kết cấu:

Địa hình với những đặc điểm gợi lên đá, đất, cỏ, cây cối và các vệt thoát nước.

Đó không phải là giải pháp hoàn hảo vì các sọc nội suy mà chúng tôi sử dụng cho rãnh không thể tạo ra các đường liền mạch một cách nhất quán. Vì vậy, đôi khi một rãnh nước và hệ thống thoát nước rút ở dưới đáy của nó chỉ dừng lại ở nửa sườn núi thay vì đi dọc theo con đường xuống điểm thấp nhất có thể tiếp cận được. Tuy nhiên, nó trông đẹp và có thể đủ cho các trường hợp sử dụng không yêu cầu độ chính xác về mặt này.

Công việc trong tương lai

Bạn có thể xem lần lặp lại kỹ thuật cuối cùng của tôi trong Bộ lọc xói mòn địa hình nâng caoNhững ngọn núi bị xói mòn bằng chuột sơn.

Như đã hy vọng rõ ràng, kỹ thuật xói mòn mà tôi đã mô tả trong bài viết này rất dễ uốn nắn. So với phiên bản gốc của Clay John và fewes, tôi đã sửa đổi nó đến mức hoạt động bên trong, khả năng và đặc điểm của nó hoàn toàn khác.

Mặc dù tôi không có kế hoạch tiếp tục nghiên cứu kỹ thuật này, nhưng tôi thấy có khả năng những người khác sẽ làm như vậy, dựa trên tính chất mở của kỹ thuật này và mức độ chín muồi về tiềm năng của nó.

Khi thực hiện kỹ thuật này, tôi chỉ nhằm mục đích làm cho địa hình bị xói mòn trông đẹp mắt bằng cách sử dụng một loạt hình ảnh tham khảo để lấy cảm hứng.

Một điểm khởi đầu thú vị cho công việc trong tương lai có thể là cố gắng sử dụng kỹ thuật này để mô phỏng nhiều loại địa hình bị xói mòn cụ thể, mỗi loại dựa trên các tham chiếu khác nhau. Các tham số đầu vào phải cho phép có nhiều kiểu dáng khác nhau, đặc biệt khi xem xét hầu hết chúng có thể thay đổi dựa trên các biến khác. Khi đó, nếu kỹ thuật này không thể mô phỏng một số đặc điểm địa hình nhất định thì điều đó có thể mở đường cho những cải tiến tiềm năng trong tương lai.

Tôi đã phát hành mã của mình theo Giấy phép Công cộng Mozilla v2 để khuyến khích chia sẻ thêm các cải tiến. Tôi rất mong được xem kỹ thuật này phát triển như thế nào trong tương lai!

Dựa trên phản hồi sau khi xuất bản, tôi đã thêm một số ghi chú bổ sung sau phần liên kết.

Liên kết

Video YouTube

Một số điều dễ giải thích hơn bằng chuyển động.

Đồ chơi đổ bóng

Bạn có thể chạy và xem những hình ảnh này trực tiếp trong trình duyệt của mình, đồng thời cũng dễ dàng xem và sửa đổi mã đổ bóng nguồn.

Nhà xuất khẩu video Shadertoy

Điều này không hoàn toàn liên quan đến kỹ thuật xói mòn, nhưng đây là những công cụ tôi đã sử dụng để hiển thị cảnh quay Shadertoys chất lượng cao cho video. Được rồi, có thể tôi cũng đang sử dụng phần liên kết ở đây để kể một câu chuyện bên lề về những khó khăn trong quá trình sản xuất video của mình.

  • Shadertoy Xuất khẩu (bản gốc) của Jonathan Giroux (Koltes). Công cụ này hoạt động rất tốt cho đến khi nó bị hỏng khi trang web Shadertoy giới thiệu tính năng xác minh con người trên Cloudflare vào đầu tháng 10 năm 2025.
  • Shadertoy Xuất khẩu (rẽ nhánh) của Lara Davidova (larathedev). Quá trình phân nhánh này được thiết kế để hoạt động với quy trình xác minh con người của Cloudflare và chỉ hoạt động trong thời gian ngắn cho đến khi trang web Shadertoy hoàn toàn không được phép hiển thị trong iframe vào cuối tháng 10 năm 2025.
  • Shadertoy Xuất khẩu (phiên bản Godot) của krazyjakee (NodotProject). Bản viết lại này dựa trên Godot chỉ hoạt động được một phần tại thời điểm viết bài. Nó chỉ dành cho Windows và (đối với tôi) có các lỗi sau: Không chuyển đổi khung hình được hiển thị thành video, phải khởi động lại sau mỗi lần kết xuất và thường không đăng ký nhập văn bản cho đến khi tiêu điểm cửa sổ được chuyển đi và quay lại. Tôi bất đắc dĩ phải sử dụng tính năng này cho các cảnh sau trong video, chạy ffmpeg theo cách thủ công trên các khung hình.
  • Tôi biết rằng cũng có các plugin trình duyệt xuất khung dành cho Firefoxdành cho Chrome, nhưng những thứ này thậm chí còn có khả năng sử dụng kém hơn đối với tôi. Tôi đã cài đặt trình duyệt của mình hiển thị hộp thoại lưu khi tải xuống một tệp, vì vậy khi tôi cố gắng hiển thị Shadertoy cho 200 khung hình, nó sẽ mở ra 200 hộp thoại lưu.

Bộ lọc xói mòn trong tự nhiên

Dưới đây là một số ví dụ về những người khác đã triển khai kỹ thuật lọc xói mòn cho dự án của họ.

Những thứ này dựa trên Shadertoy "Bộ lọc xói mòn địa hình sạch" trước đó:

Những thứ này dựa trên Shadertoy "Bộ lọc xói mòn địa hình nâng cao" mới:

  • Chà, chưa có. Hãy cho tôi biết nếu bạn sử dụng kỹ thuật này trong dự án của mình và có hình ảnh hoặc video công khai để hiển thị cho nó!

Ghi chú bổ sung

Về việc sử dụng đạo hàm bậc hai (độ cong) cho mục tiêu làm mờ

Một số người đã đề xuất sử dụng đạo hàm bậc hai (độ cong) thay vì độ cao cho mục tiêu mờ dần.

Việc sử dụng độ cao thực sự không hiệu quả trong trường hợp chung, vì ví dụ: một số thung lũng có thể cao hơn một số đỉnh núi. Tôi không chắc có một giải pháp hoàn hảo hay không và tôi để người dùng quyết định dựa vào đâu để làm cơ sở cho tham số mục tiêu mờ dần đầu vào. Tôi chỉ căn cứ vào độ cao trong tất cả các màn trình diễn của mình.

Tôi đã nghĩ đến việc sử dụng đạo hàm bậc hai (độ cong), nhưng sau đó mọi hàm liên quan đến việc tạo ra độ cao đầu vào đều phải tính toán và trả về các đạo hàm bậc hai đó hoặc cách khác là phải thực hiện bằng số, tốc độ chậm (thông qua lấy mẫu nhiều lần) hoặc khá không chính xác (thông qua đạo hàm đổ bóng).

Trên hết, độ cong không tạo ra giá trị nằm trong khoảng từ -1 đến 1 như mục tiêu làm mờ cần, vì vậy bạn phải kết hợp nó với những thứ khác (như đạo hàm đầu tiên) để sắp xếp nó thành một phạm vi hữu ích. Điều đó hoàn toàn có thể thực hiện được nhưng vẫn cần phải chỉnh sửa thủ công các chi tiết.

Vì vậy, mặc dù đây là điều tôi đã cân nhắc nhưng tôi thực sự không có giải pháp tốt. Tôi tò mò liệu những người khác có tìm ra cách tốt hơn để giải quyết vấn đề này hay không.

Tác giả: runevision

#discussion