Show HN: Tarayıcıda 3D bitki simülasyonu
(plant.max-richter.dev)- Plantarium, tarayıcıda 3D bitkileri düğümlerle birleştiren bir sistemdir ve tamamlanmış bir bitki oluşturmak için bir output node gerekir
- Bitkinin temel iskeletini Stem düğümü oluşturur;
origin,height,thiccness,minThiccness,amountgirdileriyle gövdenin konumu, yüksekliği, kalınlığı ve sayısı ayarlanır - Değerlerin tekrarı ve varyasyonu Vec3 ve Parameter düğümleri tarafından sağlanır; varsayılan değerlere rastgele değişimler eklenerek bitkinin daha az uniform görünmesi sağlanır
- Biçim değişikliği Rotate, Gravity, Noise düğümleriyle kontrol edilir; döndürme ekseni ve açısı, yerçekimi yöntemi, gürültü boyutu ve şiddeti girilir
- Yapraklar Leaf, Shape, Instance düğümleriyle oluşturulur ve gövde veya dallar boyunca yerleştirilir; boyut, aralık, sayı, döndürme ve derinlik koşulları belirtilebilir
Düğüm grafiğinin nihai çıktısı
- Tüm düğüm sistemleri, nihai sonucu üretmek için tek bir
outputdüğümüne ihtiyaç duyar output,plantgirdisini alarak tüm bitki sonucunu oluşturur
Gövde oluşturma ve konum kontrolü
- Stem düğümü bitkinin temel gövdesini oluşturur
_origin_: gövdenin yerleştirileceği konumdur; birvec3düğümü bağlanabilirheight: gövde yüksekliğithiccness: gövde kalınlığıminThiccness: minimum kalınlık_amount_: örneklenecek gövde sayısı
- Vec3 düğümü
x,y,zdeğerlerini çıktı olarak verir- Gövdeleri dağıtarak yerleştirmek için
randomveyaparameterdüğümü bağlanabilir
- Gövdeleri dağıtarak yerleştirmek için
Değer varyasyonu ve rastgelelik
- Parameter düğümü, temel değere belirli bir rastgele varyasyon uygulanan bir değer çıktılar
_value_: varyasyon uygulanacak temel değer_variation_: temel değere uygulanacak varyasyon miktarı
- Parameter, gövde, döndürme, yerçekimi, eğrilik ve kaydırıcı değerleri gibi birçok girdide tekrar tekrar kullanılır
Döndürme, yerçekimi ve gürültüyle biçim değiştirme
- Rotate düğümü bitkiyi belirtilen eksen ve açı kadar döndürür
input: döndürülecek hedef_axis_: döndürme ekseni_aroundOrigin_:0,0,0noktasına göre döndürülüp döndürülmeyeceğismooth: yumuşak döndürmeyle ilgili girdi_spread_: birden çok nesne bağlıysa tek parça olarak mı yoksa dağıtarak mı döndürüleceğini belirler_angle_: döndürme açısı
- Gravity düğümü dallara ve gövdelere basit yerçekimi uygular
input: yerçekimi uygulanacak hedefcurviness: eğrilik derecesi_type_: yerçekimi hesaplama yöntemi; şu anda yalnızcasimplevetestçalışırstrength: yerçekimi şiddeti
- Noise düğümü giriş dalına gürültü uygular
plant: giriş bitkisisize: gürültü boyutustrength: gürültü şiddeti
Yaprak oluşturma ve gövdeye yerleştirme
- Leaf düğümü yaprak modelini oluşturur;
Instancedüğümüyle gövde boyunca örneklenebilir_shape_: tekil yaprağın şeklidir; birshapedüğümü bağlanabilir_curvature_: yaprağın x/y yönündeki eğriliğidir; birvec2düğümü bağlanabilir
- Shape düğümü,
Leafdüğümüne bağlanabilen tek bir şekil çıktılar - Instance düğümü giriş modelini gövde veya dal boyunca yerleştirir
input: yerleştirme için referans girdimodel: yerleştirilecek modelalignRotation: döndürme hizalamasıalternateRotation: dönüşümlü döndürme_size_: tekil yaprağın boyutu_instanceRange_: örneklerin yerleştirileceği aralık_amount_: yerleştirilecek yaprak sayısırotation: döndürme değerioffsetBySize: boyuta göre ofset_depth_: yaprakların kaç dal katmanına yerleştirileceğini belirtir
- Alpha
min,maxdeğerlerine sahiptir
1 yorum
Hacker News yorumları
Birçok açıdan gerçekten kullanışlı ve harika.
Tarayıcı tabanlı düğüm grafiği düzenleyicisi iyi yapılmış; prosedürel 3D mesh oluşturabiliyor, .obj dışa aktarma bile var ve lisansı da esnek olduğu için çeşitli prosedürel araçların tohumu olabilecek gibi görünüyor.
Bu araçla denenebilecek çok fikir var; muhtemelen lisans tezimi bunun üzerine yazacağım.
Karmaşıklığı etkileyici.
Hızlıca kurcalamak isteyenler için eğitim de iyi ama ilginç kısma gelmek birkaç dakika sürdüğünden, sağ paneldeki kaydırıcıları ayarlayıp eğrelti otunun nasıl değiştiğine bakmak iyi olur.
Ayrıca library’ye basıp başka modeller yükleyince neler yapılabileceği hemen anlaşılıyor.
Kullanıcıların gönderdiği modeller arasında henüz şaka amaçlı bir model olmaması, projenin gerçekten daha yeni çıktığını hissettiriyor.
Umarım dayanır ;)
Çok iyi görünüyor ama küçük bir sorun var.
Değerleri değiştirirken bitkinin formu değiştikçe kamera sürekli yeniden hizalanıyor; bu da kamera titriyormuş gibi görünüyor ve şahsen oldukça rahatsız edici.
Parametreleri değiştirirken kamerayı sabitleyebilsek güzel olurdu.
Kameranın otomatik ortalamasına debounce eklemek iyi olabilir :)
Harika bir proje ama şu anda bitkiler render edilmiyor gibi.
20 dakika önce render ediliyordu; muhtemelen HN trafiğinden etkilenmiş.
Kodun tamamı çevrimiçi ve dokümantasyon da mükemmel. Hatta bu projenin bir sunucu backend’i de var.
https://github.com/jim-fx/plantarium/tree/main
https://github.com/jim-fx/plantarium/blob/main/ARCHITECTURE....
Birkaç gün sonra geri gelip çalışırken bakacağım.
Bir yıl önce Rust’ı web uygulaması motoru olarak denemek istediğim için benzer bir şey yapmıştım.
wasm’e derleyip bir Rust web sunucusunda yayımlıyordum; sonuç https://blomma.lorentz.app adresinde.
Ancak bu proje ürünleştirme açısından çok daha iyi; özellikle düğüm grafiği düzenleyicisi gerçek güçlü yanı.
İş akışına iyi entegre olduğu için bir hata ayıklama aracından öte, herkesin kullanabileceği bir ürün gibi hissettiriyor.
Benim tarafta daha iyi olan bir şey varsa, hem yaprak şekli hem de gövde şekli için Bézier eğrileri kullanmam olabilir.
Topolojiyi ve üçgenlemeyi doğru oturtmak epey zordu ama kuaterniyonlara giriş ve trigonometri tekrarı için çok iyi oldu. Bir Bézier eğrisi düğümü denemenizi öneririm.
Geometri üreticisini Rust/Wasm ile yeniden yazmak yol haritasında oldukça ciddi şekilde yer alıyor.
Şimdilik Advent of Code yaparak Rust’a alışıyorum.
Müthiş havalı! Gövde thiccness parametresini sevdim :)
Programcıların kendi projelerini ya da kendilerini fazla ciddiye alma eğiliminde olduğunu düşünüyorum; bu yüzden aralara biraz oyunculuk katmayı seviyorum.
Gerçekten çok hoşuma gitti!
Kullanılabilirliği iyileştirmek için birkaç önerim var.
Birincisi, fareyi yanlışlıkla kutunun dışına taşıyıp bırakırsanız sürükleme davranışı hatalı çalışıyor. mouse-up algılanmadığı için parametre mouse-down durumunda stuck kalıyor.
Yaprak düzenleyicide çizim yapmak veya kaydırıcı gibi sürükleyerek parametre değiştirmek zorlaşıyor. Muhtemelen mouse-up event handler’ını grafik düğümü düzenleyici kutusuna değil, ortak bir üst öğeye kaydetmek yeterli olur.
İkincisi, bağlantıları sürüklemeye yarayan küçük parametre port dairesel tutamaçları biraz küçük. Özellikle sahnenin büyük kısmını görecek kadar uzaklaştırdığınızda daha da öyle.
Grafik öğesinin kendisini değil, sadece hit area’yı %25 kadar büyütmek bile kullanılabilirliği artırabilir.
Not olarak Firefox kullanıyorum. Chromium’da da mouse handler sorunu aynı şekilde oluyor; ancak düğüm bağlantısı sürükleme Chromium’da biraz daha kullanılabilir görünüyor.
Bu tür küçük kullanılabilirlik hatalarına insan kendi başına körleşebiliyor, o yüzden çok değerli.
İkisi de birkaç gün içinde düzelir gibi :)
Bilmeyenler için: Sağ panel, daha fazla parametre ve kontrolü göstermek üzere kaydırılabiliyor.
Harika.
Kitle kaynaklı algoritmik bitkilerle bütün bir ormanın oluştuğunu görmeyi sabırsızlıkla bekliyorum.
Bir bilim projesiyle bağlantılı mı? Bitkinin hayatta kalma olasılığının ne kadar olduğunu, en yakın taksonomik karşılığının ne olduğunu ve beyaz pilavın yanında iyi gidecek tarifleri söyleyen bir yapay zekalı botanikçi özelliği de güzel olurdu.
Bir bilim projesiyle bağlantılı değil; sadece bitkileri seven bir nerd tarafından yapıldı.
Yine de projeye gbif.org ID’si ekleyebiliyorsunuz; böylece gbif API üzerinden ek bilgiler yükleniyor :)
Harika! Bir time düğümü de eklenebilirse temel animasyonlar mümkün olabilir gibi.
Genel olarak çok sevimli bir proje.
Zor kısım, her karede tüm mesh’i yeniden oluşturmadan animasyonu nasıl entegre edeceğimiz olacak gibi.
Yine de üreticiden skeleton dışa aktarıp bitkiyi onunla canlandırmak oldukça kolay olur gibi görünüyor.