Ambienti 3D nei PDF con LaTeX e U3D

Pubblicato da Nicola Rainiero il 11-11-2012 (aggiornato il 12-11-2012)

Ho voluto sperimentare, con risultati modesti a dire la verità, l'utilizzo di LaTeX per l'inserimento di oggetti 3D nei PDF. I maggiori problemi li ho riscontrati nella conversione in U3D dei miei lavori tridimensionali, mentre la scrittura del file TEX e la sua compilazione una volta caricato il pacchetto movie15 e lette le istruzioni che lo accompagnano, semplici e ben spiegate, è andata subito a buon fine.

Gli elementi principali per dotare i propri PDF di immagini interattive in 3D sono i seguenti:

  • il pacchetto movie15 che fornisce un'interfaccia per incorporare filmati, suoni e oggetti 3D in documenti PDF da usare con LaTeX e pdflatex.
  • U3D, un formato libero scalabile finalizzato alla condivisione e visualizzazione di progetti 3D interattivi, provenienti dai settori del CAE (Computer-Aided Engineering) e del CAM (Computer-Aided Manufacturing)1.

Conversione in U3D

Nel precedente articolo avevo utilizzato X3D come formato di riferimento e mi ero limitato a esportare i miei lavori usando l'add-on già presente in Blender senza riscontrare alcuna difficoltà. In questo caso però le cose si complicano perché non esiste per questo software, un esportatore di default e quello che si trova in rete pur essendo aggiornato all'ultima versione (la 2.64 nel momento in cui scrivo) e apparentemente funzionante, esporta U3D incompatibili con Adobe Reader (l'errore che mi genera a video è “A 3D data parsing error has occured.” e quindi non carica a video alcunché).

Come fare allora? Sempre con Blender si può esportare in Collada (.DAE) o STL, lasciando grossomodo le impostazioni di default e poi sistemare e convertire il tutto con MeshLab disponibile a questo indirizzo.

Ho riscontrato però una lacuna nella versione disponibile nei repository per Ubuntu 12.04 e in quella più aggiornata, cioè manca l'eseguibile per convertire in U3D come segnalato dal programma stesso: Missing converter executable '/usr/bin/IDTFConverter'. E anche seguendo le istruzioni presenti qui e compilando il tutto non si va molto distante perché l'eseguibile regolarmente prodotto va in segmentation fault!

Soluzione: Wine con l'installazione dell'ultima versione per Windows. Non è reattiva e scattante come quella nativa ma funziona e mi ha permesso sia di importare i file generati con Blender (questo lo faceva anche la versione per linux), sia di esportarli in X3D, con la gradita sorpresa di scrivermi anche il file tex. Per cui basta compilare due o più volte con pdflatex e si può già ottenere un PDF perfettamente funzionante.

Ottimizzazioni LaTeX

Il PDF creato però presenta due grossi inconvenienti:

  1. bisogna opportunamente ruotare, dimensionare e spostare l'oggetto e magari cambiare il tipo di luce e render, aggiornando poi le relative nuove coordinate e impostazioni;
  2. nei browser non compatibili non si vede alcuna immagine e si legge soltanto il collegamento al file .u3d, invece in Adobe Acrobat bisogna attivare il contenuto come riportato nelle immagini sotto.

Come sempre presenterò un esempio pratico per non dilungarmi in lunghe e logorroiche spiegazioni e per fornire passo passo la strada più agevole che ho seguito per avere un PDF compatibile con tutti i reader e con l'oggetto 3D ben posizionato e illuminato.

Esempio pratico

Utilizzo il file blender che avevo creato per gli articoli sul dissabbiatore longitudinale, seleziono tutti gli oggetti presenti (CTRL+A) e li esporto in STL da File -> Export -> STL_(.stl), nominandolo dissabbiatore.stl.

Carico il programma MeshLab e importo il file STL appena creato da File -> Import Mesh, vedo se ha caricato tutto e poi esporto con File - > Export Mesh As ... - > U3D File format (.U3D), chiamo il file dissabbiatore_meshlab.u3d e contestualmente il programma crea un file dissabbiatore_meshlab.tex così descritto:

\documentclass[a4paper]{article}
\usepackage[3D]{movie15}
\usepackage{hyperref}
\usepackage[UKenglish]{babel}
\begin{document}
\includemovie[
	poster,
	toolbar, %same as `controls'
	label=dissabbiatoremeshlab.u3d,
	text=(dissabbiatoremeshlab.u3d),
	3Daac=60.000000, 3Droll=0.000000,
	3Dc2c=0.613500 -7.545900 0.855200,
	3Droo=7.618947,
	3Dcoo=0.613470 0.649878 -0.855214,
	3Dlights=CAD,
]{\linewidth}{\linewidth}{dissabbiatore_meshlab.u3d}
\end{document}

Ci aggiungo la seguente riga:

\movieref[3Dcalculate]{dissabbiatoremeshlab.u3d}{Click here!}

Come spiegato nell'appendice 3D quick-start guide della guida al pacchetto di movie15. Ecco il file definitivo:

\documentclass[a4paper]{article}
\usepackage[3D]{movie15}
\usepackage{hyperref}
\usepackage[UKenglish]{babel}
\begin{document}
\includemovie[
	poster,
	toolbar, %same as `controls'
	label=dissabbiatoremeshlab.u3d,
	text=(dissabbiatoremeshlab.u3d),
	3Daac=60.000000, 3Droll=0.000000,
	3Dc2c=0.613500 -7.545900 0.855200,
	3Droo=7.618947,
	3Dcoo=0.613470 0.649878 -0.855214,
	3Dlights=CAD,
]{\linewidth}{\linewidth}{dissabbiatore_meshlab.u3d}\\
\movieref[3Dcalculate]{dissabbiatoremeshlab.u3d}{Click here!}
\end{document}

Compilo il tutto e apro il file con Acrobat Reader, attivo il contenuto e aggiusto l'ingrandimento dell'oggetto e la sua posizione, come se stessi usando un programma di disegno 3D, poi gioco un po' con le impostazioni delle luci e del render, tutte attivabili dal menu a tendina che compare una volta cliccato sopra l'oggetto con il tasto destro del mouse (all'interno del menu Viewing Options). A lavoro finito clicco su Clik here! e copio il contenuto della finestra Javascript Window in un nuovo file chiamato dissabbiatore_final.tex2, che sarà così definito:

\documentclass[a4paper]{article}
\usepackage{epsfig,rotating,amsmath,subfigure}
\usepackage{natbib}
\usepackage[3D]{movie15}
\usepackage{hyperref}
\usepackage[UKenglish]{babel}

\begin{document}
\includemovie[poster,
	      toolbar,
	      label=pt,
	      text={\includegraphics[scale=1.0]{dissabbiatore.png}},
              3Droo=6.896200246789337,
              3Daac=60.000001669652114,
              3Dcoo=0.6134188175201416 0.6502023935317993 -0.8552163243293762,
              3Dc2c=-0.8354106545448303 0.3235208988189697 -0.44432342052459717,
              3Droll=-75.5946486014902,
              3Dlights=Hard,
              3Drender=SolidOutline]
              {\linewidth}{\linewidth}{dissabbiatore_meshlab.u3d}\\
A 3D, schematic model of a horizontal grit chamber. If the Figure does not appear interactive, please enable this function and click on it or use a recent version of \href{http://get.adobe.com/reader}{Adobe Reader}.
\end{document}

Nel file tex ho anche aggiunto l'immagine 2D (per ragioni di compatibilità con gli altri lettori PDF) e una sommaria descrizione di come attivare l'effetto interattivo. Qui invece ho compresso tutti i file, in particolare TEX e PDF, che compaiono nell'articolo:  pdf_3D.zip




Potrebbero interessarti anche:

Nicola Rainiero

Ingegnere civile specializzato in geotecnica con l'ambizione di facilitare la propria attività lavorativa usando e creando software libero per un sapere condiviso e collettivo. Mi occupo anche di energie rinnovabili ed in particolare di geotermia a bassa entalpia. Sono da sempre appassionato di web design e modellazione 3D.