Come aggiungere animazioni, interazioni e molte altre personalizzazioni all’ambiente 3D con un file JSON.

·

·

Per abilitare l’interazione 3D o per poter regolare le telecamere, l’illuminazione e altro ancora, le opzioni di impostazione individuali devono essere effettuate tramite il campo di testo JSON nello stage del menu di amministrazione di klar.land. Ti spieghiamo come funziona in dettaglio qui.

Campo di testo JSON (raccomandazione: crea il JSON in un editor di codice/testo come ad esempio notepad++ e incollalo qui)

Un codice JSON minimo può essere generato dopo aver caricato un file glb premendo il pulsante “Generate defaultjson” (il file glb deve contenere almeno una telecamera con il nome “Defaultcam”).

Il codice JSON minimo ha questo aspetto (uno stadio funziona già con questo). Questo codice può essere esteso a piacere utilizzando la seguente documentazione.

{
 "Stage3dData" :[
{
 "threedfile" : "Dateiname.glb",
 "outlinelevel" : 0,
 "lightsetup": 0,
 "spritescale": 1,
 "defaultqualitylevel": 0,
 "scenetype": "_3d"
}
]
}

(!) nota importante: nei seguenti frammenti di codice JSON, in alcuni casi possono mancare le parentesi o i parametri sono specificati solo in forma generica come [number]. Pertanto, si consiglia di copiare o adattare il codice solo da JSON funzionanti di stadi.

Requisiti dei dati

Stage3dData deve essere specificato:

Struttura:

"Stage3dData" :[
    {
   "threedfile" : "szenenname.glb",
    "outlinelevel" : [number],
  "perspectives":[
          {
              "name":"Standard Kamera",
              "camera":"Defaultcam"
          }
],
    "lightsetup": [number],
    "spritescale": [number],
    "defaultqualitylevel": [number],
    "scenetype": [string]
    },
 ],
"AOMaps" : [
    {
    "mesh":"Meshname",
    "aomap":"Texturname.jpg"
    }
],

Spiegazione:

“threedfile” : “szenenname.glb” Nome del file della scena (attualmente sono supportati solo i glb)

“outlinelevel” : 0 se gli oggetti devono già ricevere il contorno (cornice blu per evidenziare gli oggetti cliccabili) al momento del caricamento della scena, 1 se gli oggetti devono ricevere il contorno solo dopo aver cliccato sul pulsante.

“prospettive” : facoltativo, elenco delle telecamere da visualizzare nel menu

“lightsetup” : 0 utilizza solo l’HDR, 1 utilizza HDR + Point + Arealight (attualmente non implementato)

“spritescale” : 1 la scala delle texture dei pulsanti,

“defaultqualitylevel” : 0 = renderpass + outlinepass + fxaapass (compromesso tra prestazioni e aspetto), 1 = ssaapass + outlinepass (migliore anti-aliasing, prestazioni peggiori)

“scenetype” : “3d” o “360

"useCases" :[
    
            {
        "name":"Usecasename",
        "group":"Usecasegroup",
        "animationlayer": [number],
        "state":[number],
            "trigger_objects":["triggerobject"],
            "cam":
            {
                "name": "camname",
                "position": [0, 0, 0],
                "rotation":[0, 0, 0],
                "lookatTarget": "lookatobject"
            },
            "animations":
            [
                {
                    "name":"Objektname Anim01",
                    "tc":0,
                    "loop":"true"
                },
                {
                    "name":"Objektname Anim02",
                    "tc":0 
                }
            ]
    },

“camname” deve finire per cam

“lookatTarget” : “lookatobject” (se non viene specificato, l’oggetto cliccato viene utilizzato come lookattarget)

“name” : “[Objektname Anim01]” (deve iniziare con l’oggetto dell’animazione sia in glb che in JSON, seguito da uno spazio e poi dal nome univoco dell’animazione) // ad esempio ‘flap_up_armature open’, se uno spazio nel nome dell’animazione non è possibile a causa del software (ad esempio con 3dsMax), è possibile utilizzare anche un carattere %.

“tc” :[number] (timecode in secondi, l’animazione viene riprodotta dopo il tempo specificato, cioè è solo un ritardo dell’inizio – l’animazione viene riprodotta completamente)

“loop” : true (se specificato e vero, l’animazione viene riprodotta in loop, cioè si ripete)

“autoplay” : true – se un’animazione deve essere riprodotta automaticamente dall’inizio

Spiegazione dei livelli/stati di animazione

I livelli di animazione sono utilizzati principalmente per evidenziare gli oggetti e assegnare quali oggetti sono evidenziati e selezionabili quando si fa clic su di essi.

Lo stato è utilizzato quando un oggetto ha diversi stati e deve riprodurre un’animazione diversa a seconda dello stato.

z. B.:

Livello di animazione 0: non riceve alcuna evidenziazione e viene utilizzato per i pulsanti, ad esempio quando la telecamera salta in un punto senza interazione.

Animationlayer 1: viene evidenziato non appena viene cliccato l’oggetto animationlayer 0 (il pulsante) del gruppo.

Livello di animazione 2: viene attivato non appena viene cliccato l’oggetto del livello di animazione 0 del gruppo.

Esempio:

Livello di animazione 0: passa al cassetto 3

Livello di animazione 1: aprire il cassetto 3

Livello di animazione 2: Riproduzione dell’animazione del coltello cliccato, che si trova nel cassetto.

Gli stati 0/1 sono attualmente utilizzati per l’alternanza delle animazioni:

Quindi:

L’oggetto si trova nello stato 0 per impostazione predefinita; se viene cliccato, viene controllato se ha un’animazione con lo stato 1. Se questo è il caso, l’animazione viene riprodotta e l’oggetto si trova nello stato 1.

Se viene cliccato di nuovo, viene riprodotta l’animazione dello stato 1 e l’oggetto ritorna allo stato 0.

Esempio:

Stato 0: Lo sportello dell’armadietto dei cereali si apre

Stato 1: Lo sportello dell’armadietto dei cereali si chiude (modificato)

Altri stati oltre a 0 e 1 e l’interrogazione di questi sono attualmente pianificati/in corso.

Ulteriori informazioni:

L’array di animazioni può essere inserito come animazione in un array di animazioni. Questa sequenza di animazione può poi essere riprodotta in loop.

Colore di sfondo

Impostazione del colore di sfondo:

{
  "Stage3dData": [
    {
	"backgroundColor": "rgb(81, 87, 99)",
	.....

Oltre a rgb, il colore di sfondo può essere specificato come segue:
“rgb(255, 0, 0)”
“rgb(100%, 0%, 0%)”
Nome del colore X11: sono supportati tutti i 140 nomi dei colori.
‘azzurro cielo’
//Stringa SSL
“hsl(0, 100%, 50%)”

Luce ambientale Hdr

Opzionale.

Se non viene specificato, viene utilizzato l’hdr dello studio predefinito: /files/stages/hdr/studio_01.hdr.

Alla voce“hdr” –“nome” hai la possibilità di specificare il nome del file Hdr per questo stage. Questo deve trovarsi sul server in “/files/stages/hdr”. Invia il file al tuo account manager di klar.land, che lo metterà a tua disposizione.

Attualmente offriamo i seguenti HDRI standard:

  • adams_place_brigde_1k.hdr
  • autoshop_01_1k.hdr
  • comfy_cafe_1k.hdr
  • gradiente_01.hdr
  • hotel_room_1k.hdr
  • shanghai_bund_1k.hdr
  • skylit_garage_1k.hdr
  • studio_01.hdr
  • studio_01_heller.hdr
  • studio_small_06_1k.hdr
  • studio_small_08_1k.hdr
  • venice_sunset_1k.hdr
  • bianco.hdr

“intensità“: intensità della luce – potrebbe essere necessario testarla più volte.

Esempio – JSON:

"Stage3dData" :[
    {
      "threedfile" : "muellmaschiene.glb",
      "outlinelevel" : 0,
      "lightsetup": 0,
       "hdr":{
          "name":"venice_sunset_1k.hdr",
         		 "intensity": 3
      },
      "spritescale": 1,
      "defaultqualitylevel": 0,
      "scenetype": "3d",

Richiamo di documenti HTML tramite il clic sull’oggetto

Questo può essere creato nell’area documenti all’interno di un caso d’uso:

Esempio – JSON:

 {
      "cam": {
        "name": "rauchmelder01cam",
        "position": [
          0,
          0,
          0
        ],
        "rotation": [
          0,
          0,
          0
        ],
        "lookattarget": "rauchmelder01"
      },
      "name": "rm",
      "group": "rm",
      "state": 0,
      "documents": [
        {
          "name": "rauchmelder.html",
          "type": "html",
          "uuid": "d90701d8-0769-4ba6-b23e-327ca0637df1",
          "playonclick": true
        }
      ],
      "animationlayer": 0,
      "trigger_objects": [
        "rauchmeldergruppe01"
      ]
    },

Richiamo di un collegamento ipertestuale tramite un clic sull’oggetto

A tal fine, in un caso d’uso

“gotourl” : “URL” deve essere inserito

(si apre in una nuova scheda)

Esempio – Caso d’uso:

  {
	"name":"zb out",
        "group":"zb",
        "animationlayer": 0,
        "state":0,
        "gotourl":"https://www.klar.land",
	"trigger_objects":["zbgroup"],
	"cam":
	{
        "name": "zbcam",
	"position": [0, 0, 0],
	"rotation":[0, 0, 0]
	},
        "animations":
            [
	        {
                    "name":"zbgroup%out",
                    "tc":0
		}
	]
    }

Materiale – Animazioni

In pratica, puoi creare un oggetto materialAnimations Array in qualsiasi caso d’uso:

“materialAnimations“: [{}] I seguenti parametri possono essere inseriti in questo modo:

nome: non c’è nulla da tenere in considerazione se non che il nome sia unico e non compaia una seconda volta nel json.

azione: qui devi specificare il tipo di animazione del materiale da eseguire.
I valori possibili sono:

changeMaterialValue
addMaterialValueTween

changeTexturePositionValue
addTexturePositionValue

changeTextureRotationDegreeValue
addTextureRotationDegreeValue

stopMaterialeAnimazione

A titolo di spiegazione:

La differenza tra aggiungere e modificare è che con l’aggiunta i valori desiderati vengono aggiunti ai vecchi valori del materiale, mentre con la modifica quelli attuali vengono cambiati con i valori specificati.
Questo è particolarmente importante per i loop.

Ad esempio, se una texture deve spostarsi a destra sull’asse x, si può usare changeTexturePositionValue, ad esempio da 0 a 2. Se poi si specifica che questo deve avvenire in loop, la texture si sposterà dalla posizione x=0 a x=2. Tuttavia, quando il ciclo viene eseguito una seconda volta, la texture non si sposta più perché viene spostata a x=2 ma si trova già in questa posizione.

Se vuoi aumentare il valore di 1 per ogni ciclo, devi usare l’azione “aggiungi” appropriata. In questo modo è possibile regolare i valori dei materiali e ruotare o spostare le texture. Con stopMaterialAnimation è possibile interrompere le MaterialAnimation in esecuzione. Questo è importante, ad esempio, per le animazioni che si trovano in un loop infinito e che devono essere fermate.

Anello:

Questo è un parametro opzionale.

Se non è impostato, la materialAnimation viene eseguita una sola volta.
Se questo parametro è impostato e ha il valore 0 o true, il ciclo viene eseguito all’infinito.
Se si inserisce un valore numerico in questo campo, l’animazione viene riproposta con la frequenza specificata nel valore.
loop = 12 fa sì che l’animazione del materiale venga ripetuta esattamente 12 volte.

start_tc:
fine_tc:

Qui l’ora di inizio e di fine dell’animazione è definita in secondi (sono possibili i decimali).
start_tc indica quando l’animazione del materiale deve iniziare dopo l’esecuzione dell’UseCase.

start_tc = 2 l’animazione parte con 2 secondi di ritardo, con start_tc = 0 l’animazione parte immediatamente.
end_tc indica quando l’animazione deve fermarsi.

La combinazione di entrambi i valori determina la velocità di esecuzione dell’animazione. Più start_tc e end_tc sono vicini tra loro, più veloce sarà l’animazione.

NomeMateriale:Il nome del materiale da animare deve essere specificato qui.

materialproperty:determina quale proprietà/texture del materiale deve essere influenzata.

possibile materialeProprietà:

opacità
intensità emissiva
emissivo
aoMapIntensità
bumpScale
colore
scala di spostamento
envMapIntensità
lightMapIntensity
metallicità
rugosità

possibili texture:

mappa
alphaMap
emissiveMap
aoMap
bumpMap
envMap
Mappa di spostamento
lightMap
metalnessMap
normalMap

affettivamente validi:
Si tratta di un parametro opzionale che deve essere specificato solo se vengono specificate le azioni addTexturePositionValue o changeTexturePositionValue.
Attualmente è possibile specificare x o y.
Se una texture deve muoversi orizzontalmente, si inserisce x, mentre se deve muoversi verticalmente, si inserisce y.
Ad esempio: “affectedvalue”: “x”,

tweenValue
Il valore numerico a cui impostare la proprietà selezionata.
Se viene selezionata un’azione di rotazione della texture, la rotazione desiderata deve essere specificata in gradi.
Ad esempio, ruota una volta la texture di 180 gradi:
“tweenValue”: 180,

json Esempio:

{
  "useCases": [
    {
      "name": "Start Opacity Animation",
      "group": "Material",
      "state": 0,
      "animationlayer": 0,
      "trigger_objects": [
        "Cube0"
      ],
      "materialAnimations": [
        {
          "loop": true,
          "name": "changeOpacity",
          "action": "changeMaterialValue",
          "end_tc": 10,
          "start_tc": 0,
          "tweenValue": 0,
          "materialName": "Material0",
          "materialproperty": "opacity"
        }
      ]
    },
    {
      "name": "Start Diffuse Map Animation",
      "group": "Material",
      "state": 0,
      "animationlayer": 0,
      "trigger_objects": [
        "Cube1"
      ],
      "materialAnimations": [
        {
          "loop": 0,
          "name": "add diffuse pos",
          "action": "addTexturePositionValue",
          "end_tc": 2,
          "start_tc": 0,
          "tweenValue": 2,
          "materialName": "Material1",
          "affectedvalue": "x",
          "materialproperty": "map"
        }
      ]
    },
    {
      "name": "Start AlphaMap Animation",
      "group": "Material",
      "state": 0,
      "animationlayer": 0,
      "trigger_objects": [
        "Cube5"
      ],
      "materialAnimations": [
        {
          "name": "add diffuse pos",
          "action": "addTexturePositionValue",
          "end_tc": 8,
          "start_tc": 0,
          "tweenValue": 2,
          "materialName": "Material5",
          "affectedvalue": "x",
          "materialproperty": "map"
        }
      ]
    },
    {
      "name": "Start Diffuse Map Animation",
      "group": "Material",
      "state": 0,
      "animationlayer": 0,
      "trigger_objects": [
        "Cube2"
      ],
      "materialAnimations": [
        {
          "loop": 2,
          "name": "change diffuse pos",
          "action": "changeTexturePositionValue",
          "end_tc": 10,
          "start_tc": 0,
          "tweenValue": 2,
          "materialName": "Material2",
          "affectedvalue": "y",
          "materialproperty": "map"
        }
      ]
    },
    {
      "name": "Start Diffuse Map Rotation Animation",
      "group": "Material",
      "state": 0,
      "animationlayer": 0,
      "trigger_objects": [
        "Cube3"
      ],
      "materialAnimations": [
        {
          "loop": 1,
          "name": "add diffuse rotation",
          "action": "addTextureRotationDegreeValue",
          "end_tc": 10,
          "start_tc": 0,
          "tweenValue": 180,
          "materialName": "Material3",
          "materialproperty": "map"
        }
      ]
    },
    {
      "name": "trigger lod1 anim",
      "group": "Cube6",
      "state": 0,
      "animations": [
        {
          "tc": 0,
          "name": "Cube6_lod1 Action"
        }
      ],
      "animationlayer": 0,
      "trigger_objects": [
        "Cube6_lod1"
      ]
    },
    {
      "name": "Stop Opacity Animation",
      "group": "Material",
      "state": 0,
      "animationlayer": 0,
      "trigger_objects": [
        "Cube4"
      ],
      "materialAnimations": [
        {
          "name": "changeOpacity",
          "action": "stopMaterialAnimation",
          "start_tc": 0
        }
      ]
    }
  ],
  "Stage3dData": [
    {
      "controls": {
        "maxZoom": 100000,
        "minZoom": 1,
        "zoomMode": 1,
        "maxDistance": 100000,
        "minDistance": 1
      },
      "scenetype": "_3d",
      "lightsetup": 0,
      "threedfile": "cube6.glb",
      "loddistance": 5,
      "spritescale": 1,
      "outlinelevel": 0,
      "defaultqualitylevel": 0
    }
  ]
}

Richiama i media (pdf/video/…)

Video attivati cliccando su un pulsante o un oggetto

È possibile recuperare uno o più documenti (video/mp4, pdf, jpg, png) quando si fa clic su un oggetto o su un pulsante, che poi appariranno nella scheda “Media” per essere recuperati.

I media devono essere caricati sul server nella cartella docs del rispettivo stage: /files/stages/[uuid]/docs. (I dati vengono inviati al tuo account manager di klar.land, che li memorizza per te).

“trigger_objects” oggetto o pulsante di attivazione

“cam” – qui vengono specificati, tra l’altro, il nome della telecamera associata e l’obiettivo della telecamera.

“documenti“: uno o più documenti da recuperare

“tipo” – video | immagine | pdf

“uuid” – generare online su https://www.uuidgenerator.net/ e copiare + incollare

“playonclick” : true | false – se il documento deve essere visualizzato direttamente

Esempio – JSON:

"useCases" : [
{
"name":"klick_dl_pdf",
"group":"01",
"animationlayer": 0,
"poi_uuid": "0f7fa12e-dd7c-11eb-ba80-0242ac130004",
"state":0,
"trigger_objects":["button_vorne_rechts"],
"cam":
{
"name": "Pdfcam",
"position": [0, 0, 0],
"rotation":[0, 0, 0],
"lookatTarget":"button_vorne_rechts"
},"documents":
[
{
"name":"01/Freund_Demovideo.mp4",
"type":"video",
"uuid":"ac848c20-e879-11eb-9a03-0242ac130003",
"playonclick":true
},{
"name":"01/Freunde_DemoPDF.pdf",
"type":"pdf",
"uuid":"1bd675a6-dd7c-11eb-ba80-0242ac130004"
},{
"name":"01/klardenker_Unternehmenspräsentation_DE.pdf",
"type":"pdf",
"uuid":"cb5473d6-e879-11eb-9a03-0242ac130003"
},{
"name":"01/netzwerken-web.jpg",
"type":"image",
"uuid":"fe743ad0-e879-11eb-9a03-0242ac130003"
},{
"name":"01/Showroom_Demo.mp4",
"type":"video",
"uuid":"139e7574-e87a-11eb-9a03-0242ac130003"
},{
"name":"01/Vorwort_DemoPDF.pdf",
"type":"pdf",
"uuid":"2ef28950-e87a-11eb-9a03-0242ac130003"
}
]

 

Richiamare i media dai “Documenti” – importante per il multilinguismo

Per prima cosa crea i documenti nello spazio desiderato. Si procede come segue:

Naviga fino allo spazio desiderato.
Seleziona Il mio computer -> Docs.
Poi, ad esempio, crea la tua cartella “stages”, dove potrai ovviamente scegliere liberamente il nome in base alle tue preferenze.
Clicca su / apri cartella.
Poi crea un documento con il pulsante “+”.
Trova un campo appena creato per un documento e cerca il file desiderato sul tuo computer tramite il “Browser” e caricalo. Poi clicca su “Salva”.
Se vuoi offrire il file in altre lingue, seleziona l’altra lingua desiderata e poi il file desiderato nella lingua corrispondente tramite il “Browser dei file”. Clicca nuovamente su “Salva”: il documento sarà disponibile nella nuova lingua aggiunta.

Poi copia l’UUID del documento. Questo ti serve per inserirlo nel json dello stage, che viene fatto lì come negli altri casi elencati sopra.


Lo script funziona in modo tale che se esiste un UUID, controlla se esiste una voce corrispondente nel database. In questo caso, il documento viene caricato e visualizzato. Se non lo è, viene preso il nome/percorso e viene caricato il file corrispondente. Ciò significa che gli stadi esistenti non vengono abbattuti.

Per i nuovi stadi è sufficiente inserire l’UUID e il tipo.

Un esempio di voce json con collegamento al file tramite il Doc UUID:

"useCases" : [
"name": "klick_dl_pdf_03",
"group": "03",
"state": 0,
"poi_uuid": "5cdbbbbc-e883-11eb-9a03-0242ac130003",
"documents": [
{
"name": "03/klardenker_Unternehmenspräsentation_DE.pdf",
"type": "pdf",
"uuid": "8107123e-e883-11eb-9a03-0242ac130003"
},
{
"name": "03/Meditation_DemoVideo.mp4",
"type": "video",
"uuid": "3e7da4a1-6122-483b-9749-2c11caa87fd4",
"playonclick": true
},
{
"name": "03/Sein1_DemoPDF.pdf",
"type": "pdf",
"uuid": "a4ad3ec0-e883-11eb-9a03-0242ac130003"
},
{
"name": "03/Sein2_DemoPDF.pdf",
"type": "pdf",
"uuid": "b2d9a1c8-e883-11eb-9a03-0242ac130003"
},
{
"name": "03/Seminar-web.jpg",
"type": "image",
"uuid": "c1f88a5c-e883-11eb-9a03-0242ac130003"
}
],
"animationlayer": 0,
"trigger_objects": [
"button_03"
]
},
]

Fogli di sprite (quasi apngs) (per i pulsanti)

Pulsanti in uno stage che vengono animati tramite spritesheets

Gli spritesheet, utilizzati da apngs, sono definiti nel gruppo“pulsanti“.

I file png contenenti gli spritesheet sono memorizzati sul server nella directory “/files/stages/sprites”. (Se vuoi utilizzare i singoli spritesheet, forniscili al tuo account manager di klar.land e lui li renderà disponibili sul server).

buttonObjectName” è il nome dell’oggetto 3D nella scena. La stringa “button” deve essere inclusa nel nome. In questo modo l’oggetto si comporta come un pulsante. In altre parole, sarà sempre rivolto verso la telecamera e quando viene cliccato il pulsante scomparirà.

“spritename” è il nome del file png che si trova in “/files/stages/sprites”.

“tilesHoriz” : Numero di tiles orizzontali

“tilesVert” : Numero di tiles verticali

numTiles” : normalmente è il prodotto dei due valori precedenti. In casi eccezionali, tuttavia, questo valore può anche essere diverso (ad esempio se ci sono delle tessere vuote alla fine).

“tileDispDuration” : numero di millisecondi per i quali deve essere visualizzato un riquadro.

invisibleOnClick” : vero o falso, opzionale. Indica se un pulsante diventa invisibile dopo il clic oppure no (=false). Il valore predefinito è vero.

Esempio – JSON:

"Stage3dData" :[
{
"threedfile" : "01.glb",
"outlinelevel" : 0,
"lightsetup": 0,
"spritescale": 1,
"defaultqualitylevel": 0,
"scenetype": "3d",
"buttons":[
{
"buttonObjectName":"button_vorne_rechts",
"spritename":"floorbutton_spritesheet.png",
"tilesHoriz":25,
"tilesVert":1,
"numTiles":25,
"tileDispDuration":55,
"invisibleOnClick":"false"
}		
],

Tonemapping

Puoi scegliere tra 5 modalità per regolare l’aspetto del palcoscenico tramite la mappatura dei toni (effetto post-rendering).

Questo potrebbe richiedere diverse prove in combinazione con l’Hdr e l’intensità della luce per ottenere l’aspetto ottimale per il rispettivo palco.

Se non viene specificato nulla, per impostazione predefinita viene utilizzato THREE.ACESFilmicToneMapping.

Esempio – JSON:

{
"Stage3dData": [
{
"tonemapping": 2,
....

Il tonemapping può assumere i valori 0, 1, 2, 3, 4 o 5 – per cui

0 = THREE.NoToneMapping

1 = THREE.LinearToneMapping

2 = THREE.ReinhardToneMapping

3 = THREE.CineonToneMapping

4 = THREE.ACESFilmicToneMapping

5 = THREE.CustomToneMapping

Fase piatta con ReinhardToneMapping / “tonemapping”: 2

Flat Stage con ACESFilmicToneMapping / “tonemapping”: 4 o nessuna specifica

Texture video

Texture video in un palcoscenico

Per le texture video, vengono specificati i nomi degli oggetti 3D (“videoObject“) su cui devono apparire le texture video e il percorso relativo al file video (“videoFile“) sul server.

I video devono essere caricati sul server nella cartella docs del rispettivo stage: /files/stages/[uuid]/docs

(Coordina l’archiviazione dei dati con il tuo account manager di klar.land).

Esempio – JSON:

"Stage3dData" :[
{
"threedfile" : "01.glb",
"outlinelevel" : 0,
"lightsetup": 100,
"spritescale": 1,
"defaultqualitylevel": 0,
"scenetype": "3d",
"videotextures":[
{
"videoObject":"_videoplane",
"videoFile":"01/Freund_Demovideo.mp4"
}
]
}
]

“Opzioni “controlli

Vari parametri per impostare lo zoom e la distanza delle telecamere e l’assegnazione del pulsante del mouse di uno stage.

Esempio – JSON:

{
"Stage3dData": [
{
"hdr": {
"name": "autoshop_01_1k.hdr",
"intensity": 2
},
"controls": {
"maxZoom": 5,
"minZoom": 1,
"zoomMode": 2,
"maxDistance": 5,
"minDistance": 1
},
{
"Stage3dData": [
{
"controls": {
"zoomMode": 3,
"leftMouseMode":5,
"middleMouseMode":1,
"rightMouseMode": 1,
},
......

“zoomMode” può assumere i valori 1 / 2 / 3. Questi significano

1 = Carrello (standard)
2 = ZOOM
3 = NESSUNO

cioè 3 disattiva lo zoom

“leftMouseMode” / “middleMouseMode” / “rightMouseMode” possono assumere i valori 1 / 2 / 3 / 4 / 5 / 6. Questi significano

1 = ROTARE
2 = CAMION
3 = OFFSET
4 = DOLLY
5 = ZOOM
6 = NESSUNO

Se non viene specificato nulla nel codice JSON, i valori predefiniti sono

zoomMode = Dolly
leftMouseMode = ROTATE
rightMouseMode = TRUCK
middleMouseMode = DOLLY

Tappe a 360°

(Segue documentazione)

"spaces" : [ (werden nur in 360° Szenen verwendet)
{
"id" : [number] Stageid,
"name": [string] Stagename,
"ClickSpots":
[
{
"name":"Gehe in Flur",
"position": [8.67872, 15.1609, -12.1186],
"type":"spaceChangeSpot",
"gotoSpace": [number]
},{
"name":"Zeige Lampeninfo",
"position": [-15.4345, 6.06061, 0],
"type":"infoSpot"
}
]
},

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *