Riferimento Cinema 4D Funzionalità Aggiuntive ProRender ProRender
Funzione disponibile in CINEMA 4D Visualize, Broadcast, Studio
ProRender

Offline Anteprima Generale Multi-Pass

Offline

I settaggi del menu Offline si applicano al rendering finale nel Visualizzatore Immagini.

Modo Rendering

Le varie modalità di rendering.

Qui è possibile definire varie modalità di rendering:

Illuminazione Globale

La modalità di rendering più importante e predefinita. L’Illuminazione Globale viene usata da ProRender per creare IG, ombre, riflessioni, rifrazioni nelle trasparenze e tutto ciò che ha a che fare con campioni inviati avanti e indietro, o inclusi in riflessioni e rifrazioni.

Illuminazione Diretta senza Ombre

In questa modalità, nessuna luce verrà riflessa dagli altri oggetti; in altre parole nessuna IG avrà luogo. Solo luce diretta senza ombre. Anche le riflessioni e le trasparenze saranno disabilitate (ad eccezione delle riflessioni prodotte dalle sorgenti luminose).

Occlusione Ambientale

L’Occlusione Ambientale sarà renderizzata (più l’area è occlusa, più scura essa risulterà, vedi anche Occlusione Ambientale).

Profondità di Campo

Usate questa opzione per attivare o disabilitare la profondità di campo (inclusi tutti i Bokehs, vedi anche Forma Diaframma del Rendering Fisico). Notare che il renderizzatore sarà spesso spinto al limite nel tentativo di rimuovere il disturbo. Tuttavia, la profondità di campo è un’elemento chiave per effetti fotorealistici.

Maggiori info su questa funzione sono disponibili alla pagina Profondità di Campo.

RELEASE 20

Motion Blur

Motion Blur disabilitato a sinistra, attivo a destra.

Qui è dove andrà selezionato il tipo di Motion Blur che ProRender userà. Notate che il motion blur non sarà renderizzato nella Viewport, bensì nel Visualizzatore Immagini.

Così come quando è attiva la Profondità di Campo, ProRender lavorerà duramente per liberare il rendering del disturbo! Tuttavia, il motion blur ha un ruolo davvero importante nel determinare l’aspetto realistico dell’animazione. L’intensità del motion blur dipende dalla Velocità Otturatore (s) e dalla velocità con cui si muovono gli oggetti nel filmato.

Velocità Otturatore progressivamente più lenta da sinistra a destra e motion blur risultante..

Nessuno

Non sarà calcolato alcun motion blur.

Motion Blur Lineare

Il Motion Blur di tipo Lineare funziona solo insieme ad oggetti animati le cui proprietà di posizione, angolatura e dimensione cambiano.

L’animazione della Camera e dei Deformatori non funziona con questo tipo di motion blur. Usate piuttosto l’opzione Motion Blur Sub-Frame descritta in seguito.

Notate anche che i movimenti del motion blur saranno interpolati in modo lineare di fotogramma in fotogramma, il che significa che movimenti particolarmente complessi e veloci non saranno privi di artefatti (vedi in alto a sinistra dell’immagine su Suddivisioni Movimento.

Motion Blur Sub-Frame

Il Motion Blur Sub-Frame (ex. Motion Blur Scena) dovrebbe già esservi familiare dal Modo Standard di rendering (vedi qui). In questo caso vengono calcolati svariati fotogrammi intermedi che poi vengono combinati da un fotogramma all’altro dell’animazione. Questo tipo di motion blur tiene conto di TUTTI gli effetti (incluse animazioni della camera e dei deformatori).

Campioni

Diversi valori di Campioni: si noti anche come diminuisce il disturbo con l'aumentare dei valori.

Usate questo settaggio per definire il numero di sub-fotogrammi da calcolare per ciascun fotogramma dell’animazione al fine di ottenere il risultato desiderato. I tempi di rendering aumenteranno con l'aumentare dei valori. Il valore andrà aumentato nel caso di movimenti rapidi, per evitare che si verifichino effetti stroboscopici.

Notate che è possibile ridurre la qualità dei settaggi (es. Condizione di Arresto) all’aumento dei Campioni del Motion Blur Sub-Frame. La ragione è questa: per ogni sub-fotogramma viene calcolata una diversa distribuzione del disturbo, che in parte sarà eliminata quando viene combinata. Ogni sub-fotogramma si adatta al settaggio Condizione di Arresto.

Dispersione [0..100%]

Usate questo settaggio per ridurre in qualche modo l’effetto strobo. L’aumento di questo valore aumenterà il disturbo della sfocatura, riducendo le transizioni nette tra i sub-fotogrammi.

RELEASE 20

Profondità Raggio Max [1..2147483647]

Durante il rendering, sulla scena vengono proiettati moltissimi raggi per ogni pixel. Il raggio sarà suddiviso a seconda del tipo di superficie colpita: in questo modo, il raggio può essere riflesso e/o rifratto; nel caso di superfici opache o diffuse, saranno riflessi o rifratti tantissimi raggi da diverse angolature.

Ecco come vengono definiti i tipi di raggio. I settaggi di profondità definiscono il numero di riflessioni/rifrazioni per tipo di raggio (ad eccezione di Profondità Raggio Max).

I raggi viaggiano avanti e indietro nella scena milioni di volte raccogliendo informazioni sui colori e sulla luminosità (campioni). Nel mondo reale questo accade un numero infinito di volte, ma in Cinema 4D questo ad un certo punto deve terminare, in caso contrario il calcolo di ciascun punto continuerebbe all’infinito… Pertanto, il numero di riflessioni e rifrazioni deve essere limitato.

È possibile definire separatamente ognuno di questi tipi di raggio per ottimizzare i tempi di rendering. I valori possono essere ridotti in modo selettivo per ridurre appunto i tempi di rendering.

In generale, possiamo affermare che: la differenza visibile nel rendering con valori di 1, 2 o 3 è più accentuata; al contrario, più alti sono i valori, minore sarà la differenza. Ciò non sorprende perchè, ad esempio, il 7° riflesso di una fonte di luce intensa è talmente scuro che a malapena si noterà la differenza, con tempi di rendering inutilmente più lunghi.

Quindi, per TUTTE le impostazioni di profondità, maggiore è il valore, più lunghi saranno i tempi di rendering, e viceversa. Tuttavia, con valori bassi (0-3) aumenteranno gli artefatti.

Il settaggio Profondità Raggio Max definisce il numero di riflessioni possibili per le superfici riflettenti (valore Ruvidità "0”; vale a dire: riflessi netti).

Esso definisce il valore anche per i 4 settaggi di profondità (es.: anche impostando a 12 il valore Profondità Rifrazione, avrà valore il settaggio Profondità Raggio Max fino a quando sarà inferiore a 12).

Notare che le caustiche appariranno solo con valore Profondità Raggio Max di 2 o superiore.

Profondità Diffusione [0..2147483647]

Questo settaggio definisce il numero di riflessioni che un raggio può accettare per una superficie diffusa (Lambert, Oren-Nayer). Questo effetto può essere descritto, in sostanza, Illuminazione Globale.

Maggiore è il valore, più luminosa sarà la scena. Tuttavia con una Profondità Diffusione di 4 o più noterete appena la differenza perchè a quel punto l’aumento del numero di riflessioni non potrà illuminare ulteriormente la scena nell’insieme. Se il rendering è troppo scuro, è consigliabile lavorare con la Mappatura Tonale piuttosto di continuare ad aumentare il valore di Profondità Diffusione.

Profondità Lucentezza [0..2147483647]

Questo settaggio definisce il numero di riflessioni possibili per un riflesso opaco (Ruvidità > 0).

Maggiore è la Ruvidità, minore risulteràe la Profondità Raggio Max ottenibile senza artefatti.

Valori inferiori portarenno a tempi di rendering più brevi (e più ripetizioni).

Profondità Rifrazione [0..2147483647]

3 livelli trasparenti renderizzati con 3 settaggi diversi di Profondità Rifrazione. Per oggetti voluminosi (qui mostrati senza uno spessore per scopi dimostrativi) La Profondità Rifrazione deve essere raddoppiata per ottenere il risultato voluto.

La Profondità Rifrazione definisce il numero di rifrazioni concesse per un effetto vetro chiaro e trasparente. se il valore è troppo basso, il raytracing si bloccherà al colore nero.

La Profondità Rifrazione funziona anche con Subsurface Scattering (opzione Trasparenza attiva) e deve avere almeno un valore di 2. Tuttavia la profondità si applica solo in entrata e in uscita dall'oggetto rifrattore (la rifrazione all'interno dell'oggetto dipende da questo).

Profondità Rifrazione Lucentezza [0..2147483647]

3 livelli opachi trasparenti renderizzati con diverse Profondità di Rifrazione. Nel caso di oggetti voluminosi (qui mostrati senza spessore a scopo dimostrativo) la Profondità di Rifrazione deve essere raddoppiata per ottenere risultati soddisfacenti.

L’opzione Profondità Rifrazione (Profondità) definisce il numero di rifrazioni consentito per il vetro opaco. Se il valore è troppo basso, il ray tracing verrà annullato con il colore nero.

La Profondità Rifrazione funziona anche con Subsurface Scattering (opzione Trasparenza disabilitata) ma deve avere almeno un valore di 2. Tuttavia, la profondità si applica solo in entrata e in uscita dall’oggetto rifrangente (la rifrazione all’interno dell’oggetto dipende da questo).

Profondità Ombre [1..2147483647]

Questo settaggio influenza i materiali trasparenti o quelli a cui è assegnato un canale Alfa: per calcolare le ombre, ProRender emette dei raggi d'ombra dalle fonti di luce per ogni superficie visibile (di tutti gli oggetti che riflettono la luce). Per ciascun materiale trasparente/alfa che si trova tra la superficie e una fonte luminosa viene utilizzato Profondità Rifrazione:

Valori diversi di Profondità Ombre e i risultati di rendering con diversi valori di trasparenza.

Questo settaggio definisce il numero di trasparenze/alfa che il raggio d'ombra deve considerare durante il suo percorso verso la fonte luminosa.

Notare che le trasparenze rifrangenti (cioè con Rifrazione diversa da 1) non sono incluse nei raggi d'ombra (questo è lo scopo dei raggi di rifrazione, che possono creare caustiche). Nel caso di oggetti voluminosi, entrambi i lati (anteriore e posteriore) sono visti come trasparenti.

Lunghezza Raggio Occlusione Ambientale [0.001..+∞m]

Da sinistra a destra: valori incrementali di Lunghezza Raggio Occlusione Ambientale.

Usate questo valore per definire la distanza entro cui le superfici possono "vedersi” a vicenda e di conseguenza essere oscurate. Valori bassi coloreranno solo gli elementi molto vicini; valori alti produrranno un effetto simile a quello dell’illuminazione diffusa.

Campioni Anti-Aliasing [0..64]

Durante l’antialiasing la scena, dal punto di vista della camera, viene divisa in una griglia (= risoluzione di output) costituita di pixels. Per ogni pixel e ogni iterazione, vengono proiettati nella scena un certo numero di campioni (Campioni Anti-Aliasing). Per evitare scalettature ai bordi (immaginate il bordo angolato di un cubo che attraversa la griglia, vedi anche Come funziona l’antialiasing (per il renderizzatore Standard)), i campioni andrebbero dispersi sull’intera superficie della griglia (il centro del pixel non è sufficiente) e i campioni raccolti per pixel dovrebbero essere combinati (= colore pixel).

I seguenti valori Campioni Anti-Aliasing avranno il seguente effetto:

Un esempio di dispersione di campioni di un rendering di 3x3 pixel per iterazione.

Questo settaggio può essere usato per determinare in modo casuale la dispersione dei campioni e il loro conteggio per iterazione:

In un rendering molto lungo, i risultati non saranno diversi (se Campioni è impostato a 0). Il risultato sarà lo stesso.

Qui potete solo influenzare la progressione temporale della qualità risultante dell’antialiasing. Se definite una dispersione più densa di campioni per iterazione, l'antialiasing può essere accertato molto prima.

Se ignorate i filtri descritti alla sezione successiva, tutti i campioni di un pixel verranno combinati e il pixel verrà renderizzato di conseguenza.

L’antialiasing può essere disabilitato impostando Campioni Anti-Aliasing a 0.

Filtro
Dimensione Filtro [0.5..64]

Nella sezione precedente abbiamo descritto come vengono dispersi i campioni su una superfice di pixel. Il settaggio Filtro può essere usato per definire come questi campioni influiscono su ciascun pixel nell’area della Dimensione Filtro per il rendering .

Nell’esempio qui sotto, una sezione è stata ingrandita in modo che il filtro possa essere osservato più chiaramente.

Zoomate gli esempi qui sotto per osservare meglio i dettagli.

Ecco come i campioni vengono pesati per colore-pixel, iniziando dal pixel centrale (Dimensione Filtro 1, 1.5 e 2, rispettivamente).

Le curve del filtro rispettano funzioni diverse, per cui l'asse X è il centro dei pixel e l'asse Y è la pesatura di ciascun campione.

La Dimensione Filtro (in pixel) definisce come debbano essere usate molte superfici di pixel vicine intorno al pixel, per combinare tutti i campioni corrispondenti. Maggiore è il valore, più i dettagli saranno sfumati. Un valore di 0.5 influirà solo sulla superficie del pixel corrente.

Blocco Radianza
Valore Blocco Radianza [1..+∞]

A destra con il Blocco Radianza (firefly e caustiche sono spariti); a sinistra senza.

Il settaggio Blocco Radianza può essere usato per limitare la densità dei campioni (o più semplicemente la lucentezza) o la rifrazione/riflessione dei campioni. Più bassi sono i valori, maggiore sarà la restrizione; più alti sono i valori più alta sarà la lucentezza. Le riflessioni dirette (cioè valori di 1) non sarannno influenzate. I riflessi HDRI resteranno invariati.

Questi settaggi servono anche a ridurre l’effetto firefly (scintillii pixelati nelle immagini - vedi anche Soglia Firefly).

Attenzione: questi settaggi hanno un effetto più accentuato sulle caustiche. La loro lucentezza viene ridotta. Un rendering corretto non sarà più possibile. Se osservate l’immagine sopra potete vedere un accenno di caustiche sulla sinistra che a destra non è presente.

Abilita Filtro Firefly
Soglia Firefly [-∞..+∞]

A sinistra senza Filtro Firefly, a destra con valori decrescenti di Soglia Firefly. Se osservate da vicino vedrete che le piccole riflessioni ai bordi degli anelli ne soffrono un po’.

Questi settaggi servono a diminuire il cosiddetto effetto "firefly" (conosciuto anche come hotpixels). I Firefly (che potremmo definire "luccichii”) sono singoli pixel molto luminosi che si distinguono immediatamente dal resto dell’immagine. Questi pixel si presentano quando la scena ha piccole aree molto luminose che raramente vengono colpite dai campioni (incluso aree HDRI luminose e anche le caustiche).

In genere questi luccichii possono essere eliminati solo implementando tempi di rendering piuttosto lunghi.

Se il Filtro Firefly è attivo, questi pixel vengono rilevati con l'aiuto del valore Soglia Firefly. Questa funzione (un effetto post) riconosce i pixel che intorno hanno pixel con la stessa luminosità. La differenza (o meglio la "tolleranza”) può essere definita da questo valore Soglia. Maggiore è il valore, maggiore è la differenza tollerabile prima che il pixel subisca un adattamento per renderlo uniforme ai pixel circostanti. Valori più bassi renderanno visibili meno pixel, ma questo potrebbe influire negativamente sulle riflessioni più piccole e minuscole.

Valori troppo bassi produrranno un risultato impreciso.

Suggerimento:
Notare che il Filtro Firefly potrebbe incautamente eliminare anche eventuali dettagli sottili, come ad es. l’effetto prodotto dal canale Riflettanza o dalle riflessioni più piccole, quindi usatelo con attenzione.

Questa funzione non è indicata per eliminare il disturbo generico delle immagini (vedi immagine qui sopra) ma per eliminare singoli firefly. Anche i cluster e gli hotpixel saranno eliminati

Notare anche la funzione Blocco Radianza, anch’essa utile per eliminare i firefly.

Livello di Dettaglio [-∞..+∞%]

Vedi Livello di Dettaglio.

Usa LOD Tag Mostra

Potete definire il Livello di Dettaglio a livello oggetto anche tramite i tag Mostra. Qui è possibile definire se devono essere considerati oppure no.

Renderizza HUD

Se desiderato, è possibile visualizzare uno HUD completo nell’immagine o nell’animazione da renderizzare (vedi anche Settaggi HUD). Sarà visualizzato una volta che ProRender avrà raggiunto la Condizione di Arresto.

Renderizza Doodle

Usate questo settaggio per definire se anche la funzione Doodle (appunti scritti nella Viewport) deve essere considerata per il rendering. I doodle saranno visualizzati una volta che ProRender avrà raggiunto la Condizione di Arresto.

RELEASE 20

Ricarica Scena per Fotogramma

In Cinema 4D R20, la memorizzazione della scena nella scheda grafica è stata ottimizzata. Ciò significa che la scena completa non viene ricaricata in ogni fotogramma dell’animazione. Tuttavia potrebbero verificarsi dei problemi, come riportato qui di seguito. Se notate effetti errati (ad es. se lo shader Fiamma viene renderizzato senza animazione; questo e altri shader - che vengono animati senza chiavi nella Timeline - possono essere influenzati) attivate questa opzione. La scena verrà quindi completamente ricaricata per ciascun fotogramma dell'animazione, eliminando tali errori.

 Rendering Progressivo

Condizione di Arresto

ProRender renderizza progressivamente e, se non diversamente indicato, a tempo indeterminato. Tuttavia, visto che il rendering alla fine deve pur arrestarsi, potete usare queste opzioni per definire come questo deve avvenire:

Numero Iterazioni [1..2147483647]

Iniziamo con una breve spiegazione su cosa significa Iterazione per ProRender.

"Iterazione” significa che il renderizzatore ha calcolato ciascun pixel per una volta, oppure, quando l'antialiasing viene disattivato, che è stato raccolto un campione per ogni pixel. Settaggi elevati di antialiasing consentono di raccogliere più campioni per pixel per ogni iterazione. Più grande è l'immagine o più complessa è la scena (ad esempio con numerose riflessioni e rifrazioni), meno iterazioni potrà completare la scheda grafica entro lo stesso periodo di tempo (nella barra del Visualizzatore Immagini viene continuamente visualizzato il numero corrente di iterazioni).

Ad esempio, se la qualità del rendering è soddisfacente con un Conteggio Iterazione di 1.000, è possibile immettere questo valore in modo che l'animazione sia renderizzata nella corrispondente qualità.

Tempo Limite [0..2147483647]

Immettere la durata in secondi entro cui il renderizzatore deve renderizzare un fotogramma. Notare che questa durata non deve essere considerata come assoluta, poichè il renderizzatore deve comunque completare un'iterazione prima di proseguire con il fotogramma successivo o prima di interrompere il rendering. In realtà, sarà necessario un po’ più tempo per fotogramma o immagine.

Soglia [0.001..100%]

Un leggero disturbo causa un conseguente allungamento dei tempi di rendering.

Un''elevata quantità di disturbo può significare che sono presenti numerosi cambiamenti ai pixel da un’iterazione all'altra. Ecco perché il renderizzatore confronta il valore di luminanza di ogni pixel con quello dell'iterazione precedente. A seconda del valore definito qui (valori bassi = meno disturbo/tempi di rendering più lunghi; valori più alti = più disturbo/tempi di rendering più brevi), il rendering sarà completato con più o meno disturbo.

Evitate l’utilizzo di valori quali 0.01 o 0.001 perchè il rendering impiegherà un eternità! I tempi di rendering aumenteranno enormemente, anche in scene molto semplici, ad esempio con un solo cubo illuminato….

Notare anche il settaggio Blocco Radianza in combinazione a tutto questo (soprattutto quando si utilizzano numerosi materiali riflettenti o rifrattivi), il quale può avere un effetto importante sul disturbo.

Contrariamente alle altre Condizioni di Arresto, qui è possibile definire il livello di qualità, che può andare di pari passo alla dimensione dell'immagine. Per la stessa scena, gli stessi valori produrranno lo stesso livello di disturbo (ovviamente se non viene modificato nulla! Un valore antialiasing modificato produrrà un risultato diverso). Questo non può essere esattamente trasferito ad altre scene, vale a dire, valori di soglia identici non produrranno necessariamente un risultato identico (ma saranno perlomeno simili).

Nota:
Non è consigliabile che il valore Soglia della Condizione di Arresto sia usato insieme ad Intervallo di Tempo del Modo Refresh. Un confronto con lo stato precedente avverrà solo quando il rendering viene aggiornato. Ciò può portare a scostamenti maggiori nel risultato di rendering con valori Soglia identici.

Limite Conteggio Iterazioni [1..2147483647]

Immaginate di avere il settaggio Condizione di Arresto impostato su Mai e di renderizzare con una versione di Cinema 4D priva di GUI (es. con un Render Client Command Line). Questa versione renderizzerebbe all’infinito perchè non avete il Visualizzatore Immagini con cui interrompere il rendering. Il rendering dell'immagine o del frame corrente verrà interrotto solo dopo che è stato raggiunto il numero di iterazioni qui definito. Per il bucket rendering (vedi sotto), questo settaggio ha effetto per i rendering normali e definisce il numero di iterazioni per bucket.

 Intervallo Refresh Rendering

Modo Refresh

606/5000

L'immagine può essere aggiornata nel Visualizzatore Immagini dopo ogni iterazione, ma ciò non è raccomandabile perché è un processo di calcolo piuttosto intensivo. L’aggiornamento pertanto non andrebbe fatto in brevi intervalli: in una scena di esempio con una risoluzione di 4k, il renderizzatore può completare 30 iterazioni se l’Intervallo Iterazione è settato su 50, ma solo 22 iterazioni se l’Intervallo Iterazione è settato su 1.

Evitate del tutto l'aggiornamento se il rendering non viene supervisionato: definite semplicemente un intervallo molto ampio (più ampio di quello definito su Condizione di Arresto) in modo che l'aggiornamento avvenga dopo che l'immagine o il fotogramma sono stati renderizzati.

Intervallo di Tempo [0..2147483647]

L’aggiornamento srà eseguito una volta trascorso il tempo (in secondi) definito in questo settaggio. Anche l’iterazione corrente sarà prima completata, il che andrà a posticipare di conseguenza l’aggiornamento.

Intervallo Iterazione [1..2147483647]

Sarà eseguito un aggiornamento in base all’iterazione definita qui.

 Bucket Rendering

Abilitato

Il rendering di immagini estremamente grandi può superare la capacità di memoria della scheda grafica. Se la scheda grafica mostra un messaggio di errore per questo motivo, abilitate l'opzione Rendering Bucket. Saranno renderizzati dei piccoli bucket (piccole aree quadrate) invece dell'intera immagine in una volta. Questo è l'unico modo per renderizzare un output di rendering di 128.000 * 128.000 pixel con ProRender in Cinema 4D. Si noti che i requisiti di memoria della scheda grafica per la geometria della scena non sono influenzati da questi settaggi (la scena completa deve comunque essere gestita dalla memoria).

Per i bucket si applica la Condizione di Arresto descritta sopra.

Sequenza Bucket

Usate questo settaggio per definire la sequenza in cui i bucket devono essere renderizzati. Queste impostazioni non hanno alcun effetto sui tempi di rendering o sui risultati di rendering.

Larghezza Bucket [64..4096]
Altezza Bucket [64..4096]

Usate queste impostazioni per definire la dimensione dei bucket in pixel. Più piccoli sono i bucket, meno memoria sarà richiesta e viceversa. Bucket troppo piccoli genereranno un sovraccarico, senza poter sfruttare pienamente la capacità della scheda grafica.

Qui potete definire bucket molto più grandi rispetto a quanto normalmente definito nel Renderizzatore Standard.

 Risoluzione Texture Predefinita

ProRender al momento ha delle limitazioni, per cui non tutti gli shader possono essere renderizzati in modo nativo dalle schede grafiche (vedi anche Limitazioni). Questi shader devono essere convertiti in bitmap leggibili dalla scheda grafica. Ecco perchè è possibile definire a livello globale la dimensione delle texture per i rispettivi shader (notare che la dimensione delle texture può essere definita a livello di shader nel menu Base).

Tutti gli shader saranno convertiti in bitmap prima che il rendering sia avviato, e questo può richiedere un pò di tempo.

Una texture piccola a sinistra (128x128) e una più grande a destra (1280x1280).

Dimensione X Texture [1..8192]
Dimensione Y Texture [1..8192]

Inserite qui la dimensione della texture in pixel. Ricordate che la memoria della scheda grafica è limitata, pertanto alcune schede potrebbero andare in crash se viene richiesta troppa memoria.

Profondità Bit Texture

Qui è possibile selezionare tra 8 bit e 32 bit (nel caso siano usati degli shader con valori di colore superiori agli 8 bit).