ROUTE [nazwa_zDEFiniowanego_węzła].[zdarzenie_changed] TO [nazwa_zDEFiniowanego_węzła].[set_zdarzenie]
Używanie nazw przedrostków set_ i końcówek _changed jest jedynie zalecaną do stosowania konwencją, a nie ścisłą regułą. Ci, którzy tworzą prototypy lub piszą skrypty nazwy dla eventIn i eventOut mogą zostać zastąpione dowolnymi innymi nazwami. Jednakże pole exposedField rozumie jedynie przedrostek set_ i końcówkę _changed, jeżeli zmienimy te nazwy to nie będziemy mogli korzystać z pola exposedField. Dlatego do tworzenia nowych typów zalecane jest stosowanie przedrostków i końcówek określonych tą specyfikacją. Są trzy wyjątki od tego zalecenia: zdarzenia boolean’owskie, zdarzenia czasowe i zdarzenia występujące w podwęzłach węzła grupującego. Typy pól SF/MFBool dla eventIn i eventOut mają przedrostek „is", np.: isActive. Typy pól SF/MFTime dla eventIn i eventOut mają przedrostek „enter", np.: enterTime. Pole eventIn w węzłach zdefiniowanych w polach children dla dodawania lub usuwania „dzieci" wygląda następująco: addChildren (dla dodania) i removeChildren (dla usunięcia).
Trasy nie są węzłami. Trasy są jedynie syntaktyczną konstrukcją służącą do połączenia węzłów, między którymi przebiega zdarzenie. Komenda ROUTE może pojawić się w dowolnym miejscu pliku *.wrl, wewnątrz implementacji prototypu lub w przeznaczonym do tego polu w węźle.
Typy pól eventIn i eventOut muszą dokładnie do siebie pasować. Nie można ustalić połączenia komendą ROUTE między polem o typie SFFloat a polem o typie SFInt32.
Trasy mogą być ustalone tylko od eventOut do eventIn. Jeżeli oba pola lub zdarzenia są rodzaju exposedField kolejność pola/zdrzenia, od którego zaczniemy nie ma znaczenia. Załóżmy, że mamy zdefiniowane dwa węzły: TouchSensor i DirectionalLight:
DEF Przycisk TouchSensor
{ enabled TRUE }
DEF Swiatlo DirectionalLight
{ on FALSE }
wtedy:
ROUTE Przycisk.enabled TO Swiatlo.on
lub
ROUTE Przycisk.enabled_changed TO Swiatlo.on
lub
ROUTE Przycisk.enabled TO Swiatlo.set_on
lub
ROUTE Przycisk.enabled_changed TO Swiatlo.set_on