Qt 3D Basics - KDAB · Everything is a QNode Qt 3D ECS Explained p.24 Qt3DCore::QNode is the base...

Post on 22-May-2020

10 views 0 download

transcript

Qt3DBasicsKévinOttens,SoftwareCraftsmanatKDAB

Qt3DBasics

Qt3DBasics p.2

FeatureSet

EntityComponentSystem?Kezaco?

HelloDonut

Qt3DECSExplained

InputHandling

DrawingBasics

BeyondtheTipoftheIceberg

TheFutureofQt3D

Qt3DBasics

FeatureSet p.3

FeatureSet

EntityComponentSystem?Kezaco?

HelloDonut

Qt3DECSExplained

InputHandling

DrawingBasics

BeyondtheTipoftheIceberg

TheFutureofQt3D

WhatisQt3D?

FeatureSet p.4

Itisnotabout3D!

Multi-purpose,notjustagameengine

Softreal-timesimulationengine

Designedtobescalable

Extensibleandflexible

SimulationEngine

FeatureSet p.5

Thecoreisnotinherentlyabout3D

ItcandealwithseveraldomainsatonceAI,logic,audio,etc.Andofcourseitcontainsa3Drenderertoo!

AllyouneedforacomplexsystemsimulationMechanicalsystemsPhysics...andalsogames

Scalability

FeatureSet p.6

Frontend/backendsplitFrontendislightweightandonthemainthreadBackendexecutedinasecondarythreadWheretheactualsimulationruns

Non-blockingfrontend/backendcommunication

Backendmaximizesthroughputviaathreadpool

ExtensibilityandFlexibility

FeatureSet p.7

Domainscanbeaddedviaindependentaspects...onlyifthere'snotsomethingfittingyourneedsalready

ProvidebothC++andQMLAPIs

IntegrateswellwiththerestofQtPullingyoursimulationdatafromadatabaseanyone?

EntityComponentSystemisusedtocombinebehaviorinyourownobjectsNodeepinheritancehierarchy

Qt3DBasics

EntityComponentSystem?Kezaco? p.8

FeatureSet

EntityComponentSystem?Kezaco?

HelloDonut

Qt3DECSExplained

InputHandling

DrawingBasics

BeyondtheTipoftheIceberg

TheFutureofQt3D

ECS:Definitions

EntityComponentSystem?Kezaco? p.9

ECSisanarchitecturalpatternPopularingameenginesFavorscompositionoverinheritance

Anentityisageneralpurposeobject

Anentitygetsitsbehaviorbycombiningdata

Datacomesfromtypedcomponents

CompositionvsInheritance

EntityComponentSystem?Kezaco? p.10

Let'sanalyseafamiliarexample:SpaceInvaders

CompositionvsInheritancecont'd

EntityComponentSystem?Kezaco? p.11

Typicalinheritancehierarchy

CompositionvsInheritancecont'd

EntityComponentSystem?Kezaco? p.12

Allfineuntilcustomerrequiresnewfeature:

CompositionvsInheritancecont'd

EntityComponentSystem?Kezaco? p.13

Typicalsolution:Addfeaturetobaseclass

CompositionvsInheritancecont'd

EntityComponentSystem?Kezaco? p.14

Doesn'tscale:

CompositionvsInheritancecont'd

EntityComponentSystem?Kezaco? p.15

Whataboutmultipleinheritance?

CompositionvsInheritancecont'd

EntityComponentSystem?Kezaco? p.16

Whataboutmix-inmultipleinheritance?

CompositionvsInheritancecont'd

EntityComponentSystem?Kezaco? p.17

Doesitscale?

CompositionvsInheritancecont'd

EntityComponentSystem?Kezaco? p.18

Isinheritanceflexibleenough?

CompositionvsInheritancecont'd

EntityComponentSystem?Kezaco? p.19

Inheritance:Relationshipsbakedinatdesigntime.Complexinheritancehierarchies:deep,wide,multipleinheritanceFeaturestendtomigratetobaseclass

EntityComponentSystemAllowschangesatruntimeAvoidsinheritancelimitationsHasadditionalcosts:MoreQObjectsDifferenttomostOOPdeveloper'sexperience

Wedon'thavetobakeinassumptionstoQt3Dthatwecan'tlaterchangewhenaddingfeatures.

Qt3DBasics

HelloDonut p.20

FeatureSet

EntityComponentSystem?Kezaco?

HelloDonut

Qt3DECSExplained

InputHandling

DrawingBasics

BeyondtheTipoftheIceberg

TheFutureofQt3D

HelloDonut(QML)

HelloDonut p.21

GoodpracticehavingrootEntitytorepresentthescene

OneEntityper"object"inthescene

Objectsgivenbehaviorbyattachingcomponentsubclasses

ForanEntitytobedrawnitneeds:AmeshgeometrydescribingitsshapeAmaterialdescribingitssurfaceappearance

Demoqt3d/ex-hellodonut-qml

C++APIvsQMLAPI

HelloDonut p.22

QMLAPIisamirroroftheC++API

C++classnamesliketherestofQt

QMLelementnamesjustdon'thavetheQinfrontQt3DCore::QNodevsNodeQt3DCore::QEntityvsEntity...

Qt3DBasics

Qt3DECSExplained p.23

FeatureSet

EntityComponentSystem?Kezaco?

HelloDonut

Qt3DECSExplained

InputHandling

DrawingBasics

BeyondtheTipoftheIceberg

TheFutureofQt3D

EverythingisaQNode

Qt3DECSExplained p.24

Qt3DCore::QNodeisthebasetypeforeverythingItinheritsfromQObjectandallitsfeaturesInternallyimplementsthefrontend/backendcommunication

Qt3DCore::QEntity

ItinheritsfromQt3DCore::QNodeItjustaggregatesQt3DCore::QComponents

Qt3DCore::QComponent

ItinheritsfromQt3DCore::QNodeActualdataisprovidedbyitssubclasses

Qt3DCore::QTransformQt3DRender::QMeshQt3DRender::QMaterial

...

EverythingisaQNodecont'd

Qt3DECSExplained p.25

YouStillNeedaSystem

Qt3DECSExplained p.26

ThesimulationisexecutedbyQt3DCore::QAspectEngine

Qt3DCore::QAbstractAspectsubclassinstancesareregisteredontheengineBehaviorcomesfromtheaspectsprocessingcomponentdataAspectscontrolthedomainsmanipulatedbyyoursimulation

Qt3DprovidesQt3DRender::QRenderAspectQt3DInput::QInputAspectQt3DLogic::QLogicAspect

NotethataspectshavenoAPIoftheirownItisallprovidedbyQt3DCore::QComponentsubclasses

Qt3DBasics

InputHandling p.27

FeatureSet

EntityComponentSystem?Kezaco?

HelloDonut

Qt3DECSExplained

InputHandling

DrawingBasics

BeyondtheTipoftheIceberg

TheFutureofQt3D

PhysicalDevices

InputHandling p.28

Tohandleinputwefirstneedtogenerateinputevents

SubclassesofQt3DInput::QAbstractPhysicalDevicerepresentinputdevices

Qt3DInput::QKeyboardDeviceQt3DInput::QMouseDevice

Otherscanbeaddedlater

Onit'sownadevicedoesn'tdomuchInputhandlersexposesignalsemittedinresponsetoevents

Picking

InputHandling p.29

HighlevelpickingprovidedbyQt3DRender::QObjectPickercomponentImplicitlyassociatedwithmousedeviceUsesray-castbasedpicking

Qt3DRender::QObjectPickeremitssignalsforyoutohandle:pressed(),released(),clicked()

moved()-onlywhendragEnabledistrueentered(),exited()-onlywhenhoverEnabledistrue

ThecontainsMousepropertyprovidesamoredeclarativealternativetoentered(),exited()

PhysicalDevicesvsLogicalDevices

InputHandling p.30

Physicaldevicesprovideonlydiscreteevents

Hardtousethemtocontrolavalueovertime

Logicaldeviceprovidesawayto:HaveananalogviewonaphysicaldeviceAggregateseveralphysicaldevicesinaunifieddevice

LogicalInputAction

InputHandling p.31

Qt3DInput::QActionprovidesabinaryvalue

Itisactivatedbysomeinput,canbe:AsinglebuttoninputwithQt3DInput::QActionInputAsimultaneouscombinationofbuttoninputswithQt3DInput::QInputChord

AsequenceofbuttoninputswithQt3DInput::QInputSequence

Whentheactionstatechangestheactivepropertyistoggled

Demoqt3d/ex-logical-input-qml

LogicalInputAxis

InputHandling p.32

Qt3DInput::QAxisprovidesananalogvaluebetween-1and1

Itvariesovertimewhensomeinputisgenerated,canbe:WhenaphysicalaxisvarieswithQt3DInput::QAnalogAxisInputWhileabuttonispressedwithQt3DInput::QButtonAxisInput

Whentheaxisstatechangesthevaluepropertychanges

Demoqt3d/ex-logical-axes-qml

PuttingitAllTogether:MovingBoxes

InputHandling p.33

Focusmanagedusingtab

Focusedboxappearsbigger

Thearrowsmovetheboxontheplane

Pageup/downrotatetheboxonitsYaxis

Boxeslightupwhenonmousehover

Clickingonaboxgivesitthefocus

Boxescanbemovedaroundwiththemouse

Demoqt3d/sol-moving-boxes-qml-step3

Qt3DBasics

DrawingBasics p.34

FeatureSet

EntityComponentSystem?Kezaco?

HelloDonut

Qt3DECSExplained

InputHandling

DrawingBasics

BeyondtheTipoftheIceberg

TheFutureofQt3D

TheSceneGraph

DrawingBasics p.35

ThescenegraphprovidesthespatialrepresentationofthesimulationQt3DCore::QEntity:whattakespartinthesimulationQt3DCore::QTransform:whereitis,whatscaleitis,whatorientationithas

Hierarchicaltransformsarecontrolledbytheparent/childrelationshipSimilartoQWidget,QQuickItem,etc.

Ifthesceneisrendered,weneedapointofviewonitThisisprovidedbyQt3DRender::QCamera

Qt3DCore::QTransform

DrawingBasics p.36

InheritsfromQt3DCore::QComponent

Representsanaffinetransformation

Threewaysofusingit:Throughproperties:scale3D,rotation,translationThroughhelperfunctions:rotateAround()Throughthematrixproperty

Transformationsareapplied:toobjectsinScale/Rotation/TranslationordertocoordinatesystemsinTranslation/Rotation/Scaleorder

Transformationsaremultipliedalongtheparent/childrelationship

Transformscont'd

DrawingBasics p.37

1 importQt3D.Core2.023 Entity{4    components:[5        Transform{6            scale3D:Qt.vector3d(1,2,1.5)7            translation:Qt.vector3d(0,0,-1)8        }9    ]1011    Entity{12        components:[13            Transform{translation:Qt.vector3d(0,1,0)}14        ]15    }16 }

Geometries

DrawingBasics p.38

Qt3DRender::QRenderAspectdrawsQt3DCore::QEntityswithashape

Qt3DRender::QGeometryRenderer'sgeometrypropertyspecifiestheshape

Qt3DprovidesconveniencesubclassesofQt3DRender::QGeometryRenderer:

Qt3DExtras::QSphereMeshQt3DExtras::QCuboidMeshQt3DExtras::QPlaneMeshQt3DExtras::QTorusMeshQt3DExtras::QConeMeshQt3DExtras::QCylinderMesh

QtDemoexamples/qt3d/basicshapes-cpp

Materials

DrawingBasics p.39

IfaQt3DCore::QEntityonlyhasashapeitwillappearblack

TheQt3DRender::QMaterialcomponentprovidesasurfaceappearance

Qt3DprovidesconveniencesubclassesofQt3DRender::QMaterial:

Qt3DExtras::QPhongMaterialQt3DExtras::QPhongAlphaMaterialQt3DExtras::QDiffuseMapMaterialQt3DExtras::QDiffuseSpecularMapMaterialQt3DExtras::QGoochMaterial

...

Demoqt3d/sol-textured-scene

Lights

DrawingBasics p.40

Evenwithshapesandmaterialswewouldseenothing

Weneedsomelights...luckilyQt3Dsetsadefaultoneforusifnoneisprovided

Ingeneralwewantsomecontrolofthescenelighting

Qt3Dprovidesthefollowinglighttypes:DirectionalLightPointLightSpotLight

Labqt3d/ex-lights-qml

Qt3DBasics

BeyondtheTipoftheIceberg p.41

FeatureSet

EntityComponentSystem?Kezaco?

HelloDonut

Qt3DECSExplained

InputHandling

DrawingBasics

BeyondtheTipoftheIceberg

TheFutureofQt3D

MakingyourOwnGeometries

BeyondtheTipoftheIceberg p.42

UsingQt3DRender::QBufferwecancreateourownvertices

GeometryRenderercontrolshowbuffersarecombinedandparsed

Usefultomakeyouowngeometriesprogrammatically:FromafunctionFromdatasetsFromuserinteraction

Demoqt3d/ex-surface-function

TextureCompositionandFiltering

BeyondtheTipoftheIceberg p.43

Possibletosampleseveraltexturesinasinglematerial

Alsoeasytoreusestocklightingmodel

Thenyoucanblendasyouseefitintheshader

Demoqt3d/sol-earth

ProceduralTextures

BeyondtheTipoftheIceberg p.44

LotsofexamplesavailableontheInternethttps://www.shadertoy.com/

UsuallywrittenforWebGLorOpenGLES2MayrequiresomeadaptationManyarefarfromsimple!

ButtheyareeasytoplugintheMaterialsystemandtoparameterize

Demoqt3d/ex-plasma

IntegratingwithQtQuickusingScene3D

BeyondtheTipoftheIceberg p.45

ProvidedbytheQtQuick.Scene3Dmodule

TakesanEntityaschildwhichwillbeyourwholescene

Loadedaspectsarecontrolledwiththeaspectsproperty

HovereventsareonlyacceptedifthehoverEnabledpropertyistrue

Demoqt3d/ex-controls-overlay

Andmore...

BeyondtheTipoftheIceberg p.46

Layermanagement

Ownmaterialsandlightingmodels

Texturemipmaps

CubeMaps

PortabilityofyourcodeaccrossseveralOpenGLversions

Completecontrolovertherenderingalgorithm

Loadingcompleteobjectsorscenesfromfiles(3ds,collada,qml...)

Post-processingeffects(singleormulti-pass)

Instancedrendering

etc.

Demoqt3d/ex-multiple-effects

Demoqt3d/sol-asteroids

Qt3DBasics

TheFutureofQt3D p.47

FeatureSet

EntityComponentSystem?Kezaco?

HelloDonut

Qt3DECSExplained

InputHandling

DrawingBasics

BeyondtheTipoftheIceberg

TheFutureofQt3D

WhatdoesthefutureholdforQt3D?

TheFutureofQt3D p.48

Qt3DCoreEfficiencyimprovemmentsBackendthreadpoolandjobhandlingimprovements-jobsspawningjobs

Qt3DRenderUseQtQuickorQPaintertorenderintoatextureEmbedQtQuickintoQt3DincludinginputhandlingLevelofDetail(LOD)supportformeshesBillboards-camerafacingentitiesTextsupport-2Dand3DAdditionalmaterialssuchasPhysicsBasedRendering(PBR)materialsParticlesystems

Qt3DInputAxisinputsthatapplycumulativeaxisvaluesasposition,velocityoraccelerationAdditionalinputdevicesupport3Dmousecontrollers,gamecontrollers

Enumeratedinputssuchas8-waybuttons,hatswitchesordials

WhatdoesthefutureholdforQt3D?

TheFutureofQt3D p.49

Newaspects:CollisionDetectionAspectAllowstodetectwhenentitiescollideorenter/exitvolumesinspace

AnimationAspectKeyframeanimationSkeletalanimationMorphtargetanimationRemovesanimationworkloadfrommainthread

PhysicsAspectRigidbodyandsoftbodyphysicssimulation

AIAspect,3DPositionalAudioAspect...

Tooling:Designtimetooling-sceneeditorBuildtimetooling-assetconditionersformeshes,texturesetc.

Thankyou!

www.kdab.com

kevin.ottens@kdab.com