Come creare un oggetto con motivi con densità di motivo variabile in tempo reale?


8

Supponiamo che esista un valore p, calcolato per fotogramma, che varia continuamente sulla superficie di un oggetto. Il valore di pdetermina la densità di alcuni motivi sulla superficie. Ad esempio, in un caso con solo due densità possibili se p < 0.3è alta densità, altrimenti è bassa.

Ho pensato a una soluzione semplice di alto livello: creare due trame, ognuna di densità diverse, e in base al valore del pcampione da quello appropriato. Tuttavia, c'è un problema con il confine tra alta e bassa densità.

Ecco un esempio per illustrare il problema (nota che il mio problema NON è esclusivo di questo esempio di punti. Descrivo i motivi con cui sto lavorando in seguito):

inserisci qui la descrizione dell'immagine

Ed ecco la soglia tra bassa e alta ((visualizzata sulla trama ad alta densità ma non è rilevante). Se sotto la linea, implica che la trama ad alta densità dovrebbe essere campionata.

inserisci qui la descrizione dell'immagine

E infine ecco il confronto tra ciò che si desidera e ciò che sarebbe effettivamente accaduto utilizzando questo metodo:

inserisci qui la descrizione dell'immagine

Il problema è che quando un cerchio ad alta densità attraversa la linea, verrà ignorato quando pindica la trama a bassa densità da campionare, risultando in un cerchio troncato. Non so come risolvere questo problema perché pvaria ogni fotogramma, quindi non posso semplicemente "creare" un confine tra le due densità. È facile prevenire il problema inverso creando la trama ad alta densità da quella inferiore (cioè se un cerchio si trova sulla trama a bassa densità assicurarsi che sia sulla trama ad alta densità).

Sono interessato se qualcuno ha un modo per migliorare la mia soluzione o ha addirittura un altro metodo. Il vincolo qui è che pviene calcolato per fotogramma in tempo reale. Un altro vincolo è legato alla trama del motivo: il motivo è in bianco e nero, dove il nero è il motivo e il bianco è lo sfondo (come i cerchi nell'esempio). Il motivo potrebbe non essere solo la ripetizione di forme identiche, ma qualsiasi disposizione di forme nere arbitrarie su uno sfondo bianco. (Forse lo schema è la scelta sbagliata della parola.)

Non ho familiarità con la ricerca in questo campo, quindi non ero sicuro di quali parole chiave cercare, quindi apprezzerei anche se qualcuno potesse indicarmi la giusta direzione.


3
La tua vera trama è anche solo punti neri su bianco? In tal caso, potresti essere in grado di generare la trama in modo procedurale, ad esempio con il campionamento del disco di Poisson con raggi variabili. Altrimenti, se la tua trama è in realtà qualcosa di più continuo, la fusione potrebbe essere un'opzione (che non funzionerebbe bene per trame nitide come il tuo esempio). Quindi, se potessi chiarire l'aspetto del tuo modello / trama, ciò potrebbe aiutare a ottenere risposte più utili.
Martin Ender,

1
Dopo processo? Qualcosa di simile a una variante sul rilevamento dei bordi: scrivi la distanza dal centro del punto più vicino, quindi, nello spazio dello schermo, cerca i valori vicini ai punti di ogni pixel per qualsiasi valore (vicino a) zero. Questo dà punti nello spazio dello schermo, quindi dovresti scrivere e pasticciare con i derivati ​​UV per tornare allo spazio della trama ... Nota che hai ancora un problema di continuità - poiché il confine alto / basso si sposta sulla superficie, i punti appaiono e scompaiono. Se p può essere continuo (un confine morbido) potresti essere in grado di ridurre / far crescere i punti lungo il confine ...
Daniel M Gessel,

1
Un'altra opzione è quella di esaminare la piastrellatura di Wang. introduzione , genetica delle piastrelle , gemme GPU
maogenc

1
Hai mai visto il bombardamento delle trame? http.developer.nvidia.com/GPUGems/gpugems_ch20.html
Mikkel Gjoel

1
Puoi dare un'idea della gamma di forme / motivi che devi coprire e quanta flessibilità può esserci nell'approccio? @ Il suggerimento di DanielMGessel di cambiare i raggi del cerchio invece della loro densità potrebbe rendere le cose più semplici e dare un'animazione più fluida, ma non è ancora chiaro quanto sia limitato il tuo approccio.
tricoplax

Risposte:


6

Al fine di garantire che le forme del motivo siano sempre interamente presenti o assenti, mai tagliate, è necessario garantire che lo stesso pvalore sia utilizzato per tutti i texel all'interno della forma. Nel tuo esempio di cerchie, tutti i texel in una determinata cerchia devono essere d'accordo p.

Suppongo che tu abbia un modo di valutare pin un determinato punto della superficie (sia che venga osservato da una trama o calcolato da una funzione). Quindi un modo per garantire che un gruppo di texas ottenga lo stesso pvalore è quello di assicurarsi che tutti lo guardino dallo stesso punto.

Gli UV di questo punto di valutazione potrebbero essere memorizzati in canali extra della trama del motivo. Ad esempio, è possibile fare in modo che i canali rosso e verde memorizzino le coordinate UV su cui valutare p, il canale blu memorizzi la soglia alla quale attivare l'elemento del pattern e l'alfa memorizzi il livello di grigio antialias del pattern da visualizzare. I dati soglia UV + potrebbero anche essere in una trama secondaria separata, se desiderato.

Per generare questa trama soglia UV +, partendo da una trama modello di input, è possibile trovare a livello di programmazione componenti collegati (ad esempio, cercando pixel neri e riempimento di inondazioni). Imposta il punto di valutazione per tutti i texel in ciascun componente sull'UV del centro del componente e genera una soglia casuale per esso. Quindi, durante il rendering, usa un pixel shader che prima campiona questa trama, quindi cercap il punto di valutazione dato e lo confronta con la soglia data.

In questo modo, ogni forma del motivo vedrà un pvalore e una soglia uniformi e si accenderà o si spegnerà completamente. All'aumentare p, più forme passano la loro soglia e appaiono, dando l'impressione di una densità che varia continuamente.


1
Mi piace davvero questa idea, dovrò provarla. Ha perfettamente senso. Grazie!
Ryan,

0

Un altro pensiero è in questo senso. Se sul piano è stata definita una serie di punti uniformi e una funzione di mappatura dal piano alla superficie target, la funzione di densità sulla superficie è il modo in cui le aree mappano dalla superficie del piano al target. Pertanto, una mappa che preserva l'area comporterebbe un punto uniforme sul bersaglio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.