用途
在Unity Profile 的 CPU Usage 里可以看到各種 Unity 函數(shù)的耗時(shí)。如下圖:
image.png
下面的表格便是日常整理的一些 Unity函數(shù)的釋義。供大家參考查閱~
Profile 參數(shù)表
Profile 函數(shù) | 釋義 |
---|---|
Overhead | There is no statistical CPU consumption in the engine. Each module of the engine has a certain internal friction, which is very high. It is suggested that the exclusion method be used to determine which module has the highest Overhead. |
CameraRender | Preparations for GPU rendering submission, including software tailoring, occlusion culling, batch, rendering queue preparation, etc. |
MeshBakePhysXCollisionData | When scenes are loaded, create the Mesh data needed for PhysX for Mesh Collider. |
MeshBakeScaledMeshPhysXCollisionData | When scenes are loaded, create the Mesh data needed for PhysX for Mesh Collider with Scale |
LoadingReadObjectThreaded | Threaded data read operations when loading scenarios and loading data from Resources or AssetBundle |
IntergrateAllThreadedObjects | When loading scenarios and loading data from Resources or AssetBundle, the main thread integrates data read by threads |
FontCacheFontForText | Refresh font texture when text component text changes |
CanvasRendererOnTransformChanged | When the UI element in Canvas has a Transform attribute change, do dirty tagging operation on the UI element |
GfxWaitForPresent | CPU等待GPU渲染完成并交換到前緩沖 |
DirectorSampleTime | When Animator plays animation, the sampling time of each frame is calculated |
BehaviourUpdate | Update callback consumption in scripts |
FixedBehaviourUpdate | Fixed Update callback consumption in script |
LateBehaviorUpdate | Late Update callback consumption in script |
PlayerInitState | 根據(jù)向所有GameObject廣播當(dāng)前app是否處于Pause狀態(tài)和焦點(diǎn)狀態(tài)(得到或失去焦點(diǎn)) |
DevicePresent | The time of buffer exchange through eglSwapBuffers to render the picture. |
WaitForTargetFPS | 在手機(jī)平臺(tái)上,只有在Quality Settings中的V Sync Count選擇Don't Sync或者Every Second V Blank時(shí)出現(xiàn)。對(duì)于Don't Sync,tag出現(xiàn)表示cpu正在根據(jù)設(shè)定的幀率消耗掉額外的時(shí)間。對(duì)于Every Second V Blank 引擎會(huì)根據(jù)設(shè)備刷新率確定需要等待的時(shí)間。 |
LoadingUpdatePreloading | 在異步加載/卸載場(chǎng)景,異步加載AssetBundle,加載AssetBundle中的Asset,加載Resource文件夾中資源,調(diào)用UnloadUnusedAssets時(shí)會(huì)產(chǎn)生這個(gè)tag.如果加載操作要求等待完成,則會(huì)在子tag中看到AsyncOperationComplete, 否則在子tag中會(huì)看到IntegrateAssetsInBackground |
UnloadScene | 首先會(huì)收集場(chǎng)景中所有的需要銷毀的gameobject(參見CollectSceneGameObjects),然后遍歷銷毀所有Gameobject(參見DestroyProfile),之后銷毀Scene本身及相關(guān)的管理類 |
CreateGpuProgram | 根據(jù)不同的平臺(tái)對(duì)shader源文件進(jìn)行編譯。如果shader之前已經(jīng)cache,則只需要對(duì)cache的shader進(jìn)行加載。此項(xiàng)數(shù)據(jù)突出,則需要檢查是否有大量的shader或者shader變體在同一幀被加載編譯。 |
ApplicationPreloadAssets | 引擎在加載Asset,會(huì)根據(jù)Asset的不同而執(zhí)行不同的操作 |
ApplicationIntegrateAssetsinBackground | 根據(jù)加載線程的優(yōu)先級(jí)取得可用時(shí)間片,在時(shí)間片耗盡前,嘗試最多次的加載資源。每次加載資源會(huì)產(chǎn)生一次kPreloadSingleStep tag。Unity Preloading的線程可用時(shí)間片每次為4ms |
PreloadSingleStep | 每次執(zhí)行時(shí),先確保preload manager線程已經(jīng)啟動(dòng),然后嘗試向顯卡異步傳輸數(shù)據(jù)(WEBGL平臺(tái)不支持這一特性)。異步上傳的時(shí)間片和buffer大小默認(rèn)分別為2ms和4MB的循環(huán)緩沖區(qū)。通過Quality Setting可以調(diào)整默認(rèn)大小。然后查詢異步加載隊(duì)列中第一位的任務(wù)是否完成,以及和當(dāng)前任務(wù)相關(guān)的分時(shí)整合任務(wù)是否完成。如果以上任務(wù)都執(zhí)行完,會(huì)執(zhí)行一起在主線程獨(dú)占狀態(tài)下的資源整合。 |
ApplicationLoadLevelAsyncIntegrate | 在加載場(chǎng)景時(shí)(首次加載,普通加載或者疊加加載)會(huì)出現(xiàn)該tag。對(duì)于普通加載場(chǎng)景,引擎首先會(huì)卸載場(chǎng)景(參見UnloadScene)然后加載新的場(chǎng)景。而疊加加載則會(huì)直接加載并激活目標(biāo)場(chǎng)景中的Objects |
CanvasSplitInstructionsJob | 遍歷分配到此Job中的instructions及其subSet,將其逐一轉(zhuǎn)換為Renderable的數(shù)據(jù)格式,并統(tǒng)計(jì)可渲染的的instructions的vertex數(shù)量等信息 |
CanvasCombineInstructionsJob | 將SplitInstructionsJob的處理結(jié)果進(jìn)行合并,統(tǒng)計(jì)這些job計(jì)算出的vertexCount之和、bounds等信息,并按照最終結(jié)果,為生成Renderable的數(shù)據(jù)列表元素指定renderDepth |
CanvasSortJob | 根據(jù)分配到此Job的Instructions的Bounds大小計(jì)算一個(gè)合適的gridSize值(此值在后續(xù)計(jì)算中用來將每個(gè)Instruction劃分為若干區(qū)域,并計(jì)算出這些區(qū)域的depth的最大值),然后執(zhí)行“Canvas.Sort”(根據(jù)Instructions之間的重疊情況、z值、所屬canvas、material、texture等因素,進(jìn)行排序,以達(dá)到最優(yōu)的渲染效率) |
CanvasPrepareBatchesJob | 執(zhí)行“Canvas.PrepareBatches”(遍歷分配到此job中的renderable instructions,將其按照canvas或material的異同劃分batch,并將每個(gè)batch中的節(jié)點(diǎn)根據(jù)clipRect、textureID、alpha等因素的不同,劃分為若干個(gè)SubBatch,同時(shí)統(tǒng)計(jì)每個(gè)SubBatch渲染所需的shaderProperty、vertex、indices等信息) |
CanvasGeometryJob | 將“Canvas.PrepareBatchesJob”計(jì)算出的SubBatch渲染所需的shaderProperty、vertex、indices、alpha等信息,通過位運(yùn)算與矩陣運(yùn)算,轉(zhuǎn)化為更底層的渲染可用的數(shù)據(jù)格式 |
CanvasPrepareBatches | 遍歷一段已排序的 renderable instruction,將其按照canvas或material的異同劃分batch,并將每個(gè)batch中的節(jié)點(diǎn)根據(jù)clipRect、textureID、alpha等因素的不同,劃分為若干個(gè)SubBatch,同時(shí)統(tǒng)計(jì)每個(gè)SubBatch渲染所需的shaderProperty、vertex、indices等信息 |
Layout | 先后遍歷LayoutQueue隊(duì)列(包含標(biāo)記為dirty的ScrollRect、Scrollbar等)和GraphicQueue隊(duì)列(包含標(biāo)記為dirty的Graphic、InputField等),首先過濾掉其中的無效元素(null或IsDestroyed),然后調(diào)用剩余的有效元素的Rebuild接口,更新元素自身的Geometry數(shù)據(jù)與Mesh數(shù)據(jù),完成之后,清空隊(duì)列。其中在遍歷完LayoutQueue之后會(huì)進(jìn)行Cull操作。 |
CanvasRenderOverlays | 等待Batch數(shù)據(jù)的生成,并在渲染命令隊(duì)列中加入幾何處理的命令;遍歷batches數(shù)組,若此batch有關(guān)聯(lián)的canvas,則調(diào)用該canvas的RenderOverlays,否則就直接渲染此batch;若batches數(shù)組為空,則遍歷關(guān)聯(lián)canvas數(shù)組,調(diào)用每個(gè)關(guān)聯(lián)canvas的RenderOverlays |
CanvasBuildBatch | 將此Canvas下的所有有效的CanvasRenderer節(jié)點(diǎn),根據(jù)其渲染順序,以及material、z值、子Canvas等因素,進(jìn)行合批(batch),并統(tǒng)計(jì)每個(gè)batch渲染所需的vertex、indices、shaderProperties等數(shù)據(jù),將其轉(zhuǎn)化為更適合底層渲染使用的數(shù)據(jù)格式,完成之后將canvas的meshBounds標(biāo)記為dirty |
CanvasRendererSyncTransform | 獲取此transform的localToWorld所需的轉(zhuǎn)換矩陣,通過矩陣乘法,將原transform轉(zhuǎn)換成parent canvas坐標(biāo)下的transform,將新計(jì)算出的transform賦值給目標(biāo)canvas中對(duì)應(yīng)的數(shù)據(jù)節(jié)點(diǎn) |
CanvasRendererSyncWorldRect | 根據(jù)canvasRender自身的localBounds、transform,計(jì)算出worldBounds,繼而計(jì)算出globalRect,然后將數(shù)據(jù)同步到parent canvas的數(shù)據(jù)中,并標(biāo)記worldBounds中的z值是否與canvas一致 |
CanvasRendererSyncClipRect | 將canvasRender自身的enableClip標(biāo)志位以及clipRect數(shù)據(jù)同步到parent canvas的數(shù)據(jù)中 |
CanvasSort | 將傳入的Instructions按照其互相之間的重疊情況(根據(jù)gridSize對(duì)把Instruction劃分為若干區(qū)域,計(jì)算出這些區(qū)域中depth的最大值)、z值、所屬canvas、material、texture等因素,進(jìn)行排序,以達(dá)到最優(yōu)的渲染效率 |
CanvasRenderSubBatch | 若此subBatch有shaderProperties數(shù)據(jù)則先設(shè)置GfxDevice的shaderProperties,然后將此subBatch在總batch中對(duì)應(yīng)的vertexBuffer數(shù)據(jù)段和indexBuffer數(shù)據(jù)段,傳輸給GfxDevice進(jìn)行渲染 |
UGUIRenderingRenderOverlays | 遍歷CanvasManager中的所有canvas,若canvas的targetDisplay與當(dāng)前displayIndex相匹配,且其renderMode為ScreenSpaceOverlay,則執(zhí)行Canvas.RenderOverlays |
UGUIRenderingEmitScreenSpaceCamerasGeometryForCamera | 處理WorldSpace和ScreenSpaceCamera模式的canvas:首先為shaderProperties設(shè)置ztest屬性,然后遍歷CanvasManager中的canvas列表,若canvas為worldSpace模式,或canvas為ScreenSpaceCamera模式且canvas的目標(biāo)camera是參數(shù)傳入的camera,則調(diào)用canvas的EmitWorldGeometry函數(shù)(此函數(shù)會(huì)遍歷canvas的batches,若有此batch有關(guān)聯(lián)canvas則調(diào)用canvas的EmitWorldGeometry(),否則直接為此batch以及其subBatch生成渲染數(shù)據(jù)并加入要渲染到的camera的render隊(duì)列中,如果batches中沒有數(shù)據(jù),則直接調(diào)用關(guān)聯(lián)canvas列表的EmitWorldGeometry函數(shù)) |
UGUIRenderingEmitWorldScreenspaceCameraGeometry | 處理特定狀態(tài)的WorldSpace和ScreenSpaceCamera模式的canvas:首先為shaderProperties設(shè)置ztest屬性,然后遍歷CanvasManager中的canvas列表,若canvas為WorldSpace或ScreenSpaceCamera模式模式,則遍歷camera列表,判斷camera的onScreen/offScreen狀態(tài)、displayId等是否與參數(shù)一致,若滿足條件則以此camera為參數(shù),調(diào)用canvas的EmitWorldGeometry函數(shù)(此函數(shù)會(huì)遍歷canvas的batches,若有此batch有關(guān)聯(lián)canvas則調(diào)用canvas的EmitWorldGeometry(),否則直接為此batch以及其subBatch生成渲染數(shù)據(jù)并加入要渲染到的camera的render隊(duì)列中,如果batches中沒有數(shù)據(jù),則直接調(diào)用關(guān)聯(lián)canvas列表的EmitWorldGeometry函數(shù)) |
UGUIRenderingUpdateBatches | 首先觸發(fā)willRenderCanvases回調(diào),之后遍歷CanvasManager中的canvas列表,更新每個(gè)canvas的rectTransform、alpha等信息,然后重新統(tǒng)計(jì)并排序此canvas下的CanvasRenderer控件的渲染信息,若更新完數(shù)據(jù)之后發(fā)現(xiàn)canvas處于dirty狀態(tài),則執(zhí)行Canvas.BuildBatch,計(jì)算渲染數(shù)據(jù)。 |
AlbedoRendererRenderObjects | 根據(jù)albedo或者emissive設(shè)置參數(shù),然后先進(jìn)行一次渲染,再進(jìn)行一次線框式的渲染。 |
AlbedoRendererRenderAlbedo | 渲染對(duì)象的albedo部分。調(diào)用了gAlbedoRendererRenderObjects和gDilateAndDownsample來進(jìn)行具體操作。 |
AlbedoRendererRenderEmissive | 渲染對(duì)象的emissive部分。調(diào)用了gAlbedoRendererRenderObjects和gDilateAndDownsample來進(jìn)行具體操作。 |
DilateAndDownsample | 對(duì)圖像進(jìn)行dilation和下采樣的具體計(jì)算。 |
EnlightenRuntimeManagerFastUpdateEmissive | 獲得需要進(jìn)行關(guān)于emissive部分的fastupfate的對(duì)象,然后調(diào)用相應(yīng)函數(shù),設(shè)置材質(zhì)為dynamic、更新顏色,并在成功以后tag相應(yīng)的guid。 |
EnlightenRuntimeManagerUpdateMaterialsForSystem | 調(diào)用gEnlightenRuntimeManagerUpdateAlbedo來渲染,并在成功以后tag相應(yīng)的guid。 |
EnlightenRuntimeManagerUpdateAlbedo | 從EnlightenRuntimeManager獲得albedo、chart mask、圖像寬度高度等數(shù)據(jù),將這些內(nèi)容和dilation寬度、被分配的空間傳入gAlbedoRendererRenderAlbedo以及gAlbedoRendererRenderEmissive進(jìn)行下一步操作,然后將結(jié)果設(shè)置入buffer。 |
Physics2DEffectorFixedUpdate | 遍歷需要更新的effector,若有需要更新的contact則傳入timeDelta進(jìn)行計(jì)算。 |
Physics2DJointBreakLimits | 遍歷joint,若反作用的力或者力矩超過了斷裂的臨界值,則銷毀該joint。 |
Physics2DCompositeColliderPrepareShapes | 如果path是dirty狀態(tài),則將新的collider的path重新計(jì)算得到composite的path,然后再換算得到polygon的path。然后根據(jù)幾何類型選擇調(diào)用gPhysics2DProfileCompositeColliderPrepareShapesOutline或gPhysics2DProfileCompositeColliderPrepareShapesPolygon。 |
Physics2DCompositeColliderPrepareShapesOutline | 將傳入的path換算成outline。 |
Physics2DCompositeColliderPrepareShapesDecomposition | 若有物理場(chǎng)景,則開始計(jì)算:將傳入的path進(jìn)行tessellation。 |
Physics2DCompositeColliderAddToComposite | 將collider加入到composite(若composite已有同一地址的collider則清除該collider的path),將shape計(jì)算得到的path傳入collider,然后將相應(yīng)dirty置為true;如果組合過程(compositing)未停止,則重新生成collider。 |
Physics2DCompositeColliderRemoveFromComposite | 將collider刪除出composite(若composite沒有同一地址的collider則直接返回即可);如果組合過程(compositing)未停止,則重新生成collider。 |
Physics2DRigidbody2DLayerChanged | 喚醒body。 |
Physics2DRigidbody2DRecalculateContacts | 對(duì)每個(gè)滿足條件的(enabled,擁有shape,不是應(yīng)用于effector)collider調(diào)用gPhysics2DProfileColliderRecalculateContacts,另外如果該body為static則喚醒其collider的contact。 |
Physics2DCapsuleColliderPrepareShapes | 將長(zhǎng)寬和坐標(biāo)換算為capsule的兩個(gè)半圓圓心和半徑,然后賦值在shape上,并添加該shape。 |
Physics2DCreateShapes | 先檢查是否有需要忽略的rigidbody(若有則更新composite);然后對(duì)于composite的情況,若能準(zhǔn)備path或者shape,則將之加入composite;對(duì)于非composite的情況,若能準(zhǔn)備shape,則創(chuàng)建fixture。 |
Physics2DColliderTransformParentChanged | 如果是composite的情況,則在獲得更新composite屬性之前,將collider從composite中刪除;如果body已被修改,則重新生成collider。 |
Physics2DColliderLayerChanged | 僅調(diào)用gPhysics2DProfileColliderRecalculateContacts。 |
Physics2DColliderRecalculateContacts | 對(duì)每個(gè)fixture進(jìn)行contact的標(biāo)記以用于過濾,然后喚醒從第一個(gè)shape獲取的body,并重置它的contact的friction和restitution屬性。 |
Physics2DPolygonColliderPrepareShapes | 檢查collider是否是激活狀態(tài),獲得的多邊形是否非空,path是否非空,然后調(diào)用gPhysics2DProfilePolygonColliderPrepareShapesDecomposition。 |
TilemapRendererCameraBoundsJob | 計(jì)算tilemap的某一個(gè)區(qū)域在camera視錐范圍內(nèi)的邊界值:遍歷區(qū)域中所有的chunk,計(jì)算出每個(gè)chunk的世界坐標(biāo),對(duì)比獲得在視錐體范圍內(nèi)的chunks的最小坐標(biāo)的和最大坐標(biāo),作為當(dāng)前區(qū)域的min邊界和max邊界 |
TilemapRendererBuildChunkJob | 遍歷上一步計(jì)算出的根據(jù)textureID分批后的數(shù)據(jù),計(jì)算此批次相應(yīng)的mesh、vertex以及sprite的引用等信息,并遍歷此批次中所有tile,為其計(jì)算sprite、color、channelmask等信息 |
TilemapRendererDispatchJob | 按tilemap的SortOrder指定的順序,遍歷當(dāng)前區(qū)域塊內(nèi)的chunk,計(jì)算渲染此chunk需要的sprite、transform、color等信息,并根據(jù)texture的id動(dòng)態(tài)合批,計(jì)算結(jié)果供下一渲染計(jì)算步驟使用 |
TilemapRendererGeometryJob | 根據(jù)分配給此job的chunk信息,計(jì)算出渲染此chunk所需的另外的shader channels、頂點(diǎn)轉(zhuǎn)換所需的flags和params,然后進(jìn)行vertex轉(zhuǎn)換和index轉(zhuǎn)換,以得到GFX渲染所需數(shù)據(jù)存儲(chǔ)到vertexBuffer和indexBuffer中 |
TilemapRendererRender | 遍歷待渲染的渲染節(jié)點(diǎn),將節(jié)點(diǎn)的custom shader properties同步到GFX中,然后將渲染節(jié)點(diǎn)中的chunks根據(jù)texture進(jìn)行合批渲染,其中若前一節(jié)點(diǎn)的最后一個(gè)job與后一節(jié)點(diǎn)之間的當(dāng)前job的mask interaction字段值相匹配,也進(jìn)行合批渲染 |
TilemapRendererIndividualJob | 按SortOrder指定的順序,遍歷分配到此job下的chunks的所有tile節(jié)點(diǎn),為每一個(gè)有sprite的tile計(jì)算其相應(yīng)的渲染信息,包括material、color、position、shader properties等,存儲(chǔ)到相應(yīng)的渲染節(jié)點(diǎn) |
TilemapRendererScheduleIndividual | 遍歷tilemap中的所有chunk,為有sprite的tile生成渲染節(jié)點(diǎn),并分發(fā)job,為這些渲染節(jié)點(diǎn),計(jì)算ndividual模式渲染所需數(shù)據(jù) |
TilemapRendererCalculateChunkCullingBounds | 遍歷此tilemap引用到的所有sprites,選出所有sprite超出單元格的最大尺寸(以u(píng)nit為單位),并將此尺寸作為此tilemap的單元裁剪邊界(chunkcullingbounds) |
TilemapRendererCameraBoundsCheck | 計(jì)算整個(gè)tilemap在camera視錐范圍內(nèi)的邊界值:首先從camera視錐體的cullingMatrix中提取出 left/right/bottom/top/near/far 6個(gè)面,然后把tilemap中所有的chunk,分為若干block,異步遍歷每個(gè)block下的chunks,得到每個(gè)block的min和max的邊界,最后得出所有blocks的合并后的邊界值。 |
TilemapRendererPrepareChunkMode | Chunk模式下:按sortOrder指定的順序,遍歷此tilemap范圍內(nèi)的坐標(biāo)值,統(tǒng)計(jì)每個(gè)坐標(biāo)中tile引用到的渲染所需數(shù)據(jù),同時(shí)更新渲染數(shù)據(jù)的引用計(jì)數(shù),以實(shí)現(xiàn)合批渲染 |
TilemapRendererPrepareIndividualMode | Individual模式下:若tilemap非空,則觸發(fā)TilemapRenderer.ScheduleIndividual操作,準(zhǔn)備Individual模式所需的渲染數(shù)據(jù) |
TilemapRendererClearChunks | 清除超出渲染界限的長(zhǎng)久未渲染過的chunk:首先將此tilemap中的所有chunk按照上一次渲染幀的大小排序,若當(dāng)前tilemap的chunk數(shù)量超過了視野范圍內(nèi)可容納數(shù)量或系統(tǒng)默認(rèn)的最大chunk數(shù),則將超出部分的chunk中,上一次渲染幀與當(dāng)前渲染幀的差值超過系統(tǒng)指定限度的chunk移除 |
TilemapRendererCheckDirtyChunks | 檢查此Tilemap是否發(fā)生了變化: 檢查此tilemap的材質(zhì)是否發(fā)生變化,若材質(zhì)未發(fā)生變化,則逐個(gè)檢查 bounding view 范圍內(nèi)的 chunk 是否發(fā)生了變化(有新chunk,或老的chunk已dirty) |
TilemapRendererDistributeJobs | 遍歷tilemap的bounding view范圍內(nèi)的所有chunk,若chunk尚未被渲染或chunk已dirty,則將有所需要重新渲染的chunks統(tǒng)計(jì)下來,分批異步計(jì)算其渲染所需數(shù)據(jù) |
TilemapUpdate | 如果是第一次Update,則將此tilemap中的所有tile重新創(chuàng)建,并觸發(fā)tile上的MonoBehavior中的StartUp方法。若有待更新的cameraView,則觸發(fā)Tilemap.UpdateTileAnimation,更新animatedTiles。 |
TilemapUpdateTileAnimation | 若當(dāng)前處于playing狀態(tài),AnimationFrameRate大于0,且時(shí)間發(fā)生了變化,則針對(duì)每個(gè)需要更新的cameraView,遍歷view范圍內(nèi)的animatedTile,檢查該tile是否需要更新sprite(looping、speed、lastUpdateTime等條件是否滿足),若滿足條件,則更新animatedTile的sprite。 |
EarlyUpdateUpdateCanvasRectTransform | 在每次EarlyUpdate中,遍歷CanvasManager中的所有canvas分別更新每個(gè)canvas的rectTransform屬性。若canvas的renderMode為ScreenSpace并且沒有parentCanvas,則根據(jù)此canvas的renderMode、parentCanvas、position.z等因素,更新rectTransform的anchor、pivot、position、screenSize、scale等值,若這些值發(fā)生變化,則加入任務(wù)隊(duì)列等待渲染。若canvas的renderMode為worldSpace或有parentCanvas則無需重新計(jì)算rectTransform。 |
PostLateUpdateUpdateCanvasRectTransform | 在每次PostLateUpdate中,遍歷CanvasManager中的所有canvas分別更新每個(gè)canvas的rectTransform屬性。若canvas的renderMode為ScreenSpace并且沒有parentCanvas,則根據(jù)此canvas的renderMode、parentCanvas、position.z等因素,更新rectTransform的anchor、pivot、position、screenSize、scale等值,若這些值發(fā)生變化,則加入任務(wù)隊(duì)列等待渲染。若canvas的renderMode為worldSpace或有parentCanvas則無需重新計(jì)算rectTransform。 |
PhysicsRaycast | 有兩個(gè)方法:raycasttest及raycast,分別根據(jù)不同的flag和filter來計(jì)算raycast的結(jié)果。 |
PhysicsRaycastAll | 若AutoSyncTransforms為真,則先調(diào)用gPhysicsSyncRigidbodies和gPhysicsSyncColliders;然后計(jì)算raycast并返回一個(gè)數(shù)組的結(jié)果。 |
EnlightenRuntimeManagerAddCustomLights | 將RuntimeEnlightenManager中存儲(chǔ)的LightData數(shù)據(jù)清除,遍歷參數(shù)傳入的自定義light數(shù)組,若光源的BounceIntensity非0,則將光源數(shù)據(jù)轉(zhuǎn)化后,存入RuntimeEnlightenManager的光源數(shù)據(jù)表中。 |
EnlightenRuntimeManagerRemoveCustomLights | 將RuntimeEnlightenManager中存儲(chǔ)的LightData數(shù)據(jù)清除。 |
EnlightenRuntimeManagerUpdateLightsEnqueue | 將SharedLightData類型光源數(shù)據(jù)轉(zhuǎn)換為EnlightenLightData類型數(shù)據(jù),以供后續(xù)使用。 |
ShadowsCullShadowCastersDirectional | 將此job內(nèi)的sceneNode,根據(jù)是否在plane范圍內(nèi)、是否被遮擋、是否在light的layerCullDistance內(nèi)等因素,進(jìn)行篩選和剔除,并記錄后續(xù)計(jì)算所需數(shù)據(jù)。 |
ShadowsCullShadowCastersDirectionalDetail | 根據(jù)light在每個(gè)layer中的cullDistance值,以及光源的cullingPlane與sphere數(shù)據(jù),篩選可見的sceneNode,并轉(zhuǎn)換shadowCasterBound的數(shù)據(jù)結(jié)構(gòu)。 |
ShadowsCullShadowCastersLocal | 先跟進(jìn)根據(jù)light的cullingPlane等因素對(duì)renderer node進(jìn)行剔除,然后針對(duì)具體光源的特征(point / spot),使用不同計(jì)算方法,對(duì)傳入的scene node數(shù)組進(jìn)行剔除。 |
ShadowsCullShadowCastersLocalDetail | 根據(jù)light type(point / spot)的不同,使用不同計(jì)算方法,對(duì)傳入的scene node數(shù)組進(jìn)行剔除。 |
ShadowsCullLocalLightShadowCasters | 遍歷傳入的的shadowedLight,計(jì)算每個(gè)light的cullingPlane,再將每個(gè)renderer list,針對(duì)當(dāng)前光源的特性,計(jì)算出受光源影響的renderer,存入相應(yīng)數(shù)組中,并對(duì)最終數(shù)據(jù)做相應(yīng)的合并與處理。 |
ShadowsPrepareUmbraShadowCullerBuffers | 把非static的renderer的index和bounds數(shù)據(jù)統(tǒng)計(jì)到傳入的兩個(gè)數(shù)組中. |
ShadowsCreateUmbraShadowCuller | 將之前統(tǒng)計(jì)到的可見的物體的bounds統(tǒng)計(jì)到數(shù)組中,然后用umbra生成出一個(gè)ShadowCuller,供后續(xù)使用。 |
ShadowsCullDirectionalShadowCasters | 遍歷所有有效直線光,根據(jù)光源的特性和屬性值,對(duì)rendererList進(jìn)行剔除(lights的邊界plane、遮擋、shadowType、distance等因素),并在過程中統(tǒng)計(jì)后續(xù)所需的數(shù)據(jù)(nodeIndex、bounds等數(shù)據(jù))。 |
ShadowsCullShadowCastersDirectionalUmbra | 將分配到此job的cullingData進(jìn)行處理,根據(jù)是否為staticRenderer,使用不同的算法計(jì)算出未被遮擋的casterList,然后遍歷sceneNode數(shù)組,將有效的sceneNode也加入casterList。 |
ShadowsCullShadowCastersWithoutUmbra | 將分配到此job的cullingData進(jìn)行處理,遍歷jobData中的sceneNode,將在plane范圍內(nèi)的node統(tǒng)計(jì)出來。 |
ShadowsGenerateCombinedDynamicVisibleList | 若使用umbra occlusion culling,則執(zhí)行“Shadows.PrepareUmbraShadowCullerBuffers”,即把非static的renderer的index和bounds數(shù)據(jù)統(tǒng)計(jì)到傳入的兩個(gè)數(shù)組中 。 |
ShadowsCombineLocalShadowCasterCullignIndexListsAndDestroy | 將renderer list分配的每個(gè)job計(jì)算出的shadow caster的bounds合并,然后把之前的job計(jì)算的數(shù)據(jù)合并到同一個(gè)數(shù)組中,釋放臨時(shí)數(shù)據(jù)。 |
ShadowsCombineLocalShadowCasterBoundsAndDestroyJob | 將前面計(jì)算出的shadowCaster的bounds信息轉(zhuǎn)化成合適的數(shù)據(jù)結(jié)構(gòu),以供后續(xù)使用。 |
FrustumAndOcculusionCullLocalLights | 將分配到此job的非直線光源,分別做視錐剔除計(jì)算、和遮擋剔除計(jì)算,篩選出經(jīng)過兩種過濾之后仍可見的光源,記錄其數(shù)據(jù)。 |
FrustumAndOcculusionCullLocalLightsCombine | 將各job根據(jù)計(jì)算整理出的光源數(shù)組合并(visibleLight、offScreenLight、fadeLight等)。 |
OcclusionAndConnectivityCullLight | 遍歷分配到此job的有效光源,用umbra計(jì)算光源的被遮擋情況,并根據(jù)其Shadow是否為Full Strength 記錄到不同數(shù)組中;然后用umbra計(jì)算出visible的SphereLight,并記錄到數(shù)組中。 |
CullLightFrustumLocal | 遍歷分配到此job的光源,若光源在視錐(Frustum)范圍內(nèi)(或在范圍外但距離足以造成影響),則為其中的spot和point類型的光源計(jì)算其屏幕空間范圍;否則若光源距離在衰減范圍內(nèi),則記錄此光源以及其衰減距離。 |
FindActiveLights | 遍歷LightManager中的所有l(wèi)ight,過濾掉與scene、camera的cullingMask不匹配的、intensity小于0的、非realtime、range區(qū)域可忽略不計(jì)的光源。將剩余的有效光源,根據(jù)lightType分別記錄下光源數(shù)據(jù)(position、radius、shadow等信息)。 |
AddDirectionalLights | 根據(jù)Important、Intensity、GreyScale、ShadowType等因素篩選出最亮的直線光(Directional Light)作為,mainLight,并在其他有效直線光中統(tǒng)計(jì)出has shadow的光源,在以上過程中記錄下所有有效直線光源的詳細(xì)數(shù)據(jù)。 |
AddActiveLocalLights | 統(tǒng)計(jì)符合條件的localLights和customLights的信息到activeLights數(shù)組中,并按照visible、off-screen、lightType等因素排序。 |
AddCustomActiveLocalLights | 統(tǒng)計(jì)特殊component(如ParticleSystem等)中的自定義光源,若其中有spot或point類型光源,則統(tǒng)計(jì)到待用數(shù)據(jù)中。 |
CullQueryPortalVisibilityUmbra | 根據(jù)Umbra算法,判斷當(dāng)前job下的可見物體是否在camera視錐之外。 |
CullQueryPortalVisibilityCombineJob | 若所有job均未檢測(cè)出視錐外可見物,則標(biāo)記為可使用UmbraOcclusionCulling,并且合并所有job的數(shù)據(jù)。 |
CullSceneDynamicObjects | 首先對(duì)當(dāng)前job需要處理的node數(shù)組,根據(jù)layer、sceneMask、enable等因素進(jìn)行篩選,將無效的node剔除。若可以使用Umbra Culling,則根據(jù)occlusionBuffer遮擋情況進(jìn)行剔除;否則判斷是否在cullingPlane范圍內(nèi)進(jìn)行剔除。將以上結(jié)果再根據(jù)farPlane等因素進(jìn)行進(jìn)一步剔除。 |
CullSceneDynamicObjectsCombineJob | 如果此job是處理static occlusion的,并且使用Umbra Culling,則只需將數(shù)組中的因?yàn)閘ayer、sceneMask、enable、farPlane等因素而不可見的node剔除。否則,則將每個(gè)job的計(jì)算結(jié)果整合到同一個(gè)數(shù)組中。 |
Drawing | 將針對(duì)此camera的cullResult按照合適的渲染流程進(jìn)行渲染。 |
DrawingMultiCustomPre | 初始化RenderLoopContext;若當(dāng)前環(huán)境支持SinglePassStereo且開啟了SinglePassStereo模式,則初始化gfxDevice的stereo相關(guān)數(shù)據(jù);對(duì)cameraStack的當(dāng)前狀態(tài)進(jìn)行處理。 |
DrawingMultiCustom | 將待渲染的數(shù)據(jù)分類整理到Opaque和AfterOpaque隊(duì)列,然后按照forward或deferred渲染流程逐步渲染,最后對(duì)skybox、motionVector、halo等效果進(jìn)行渲染。 |
DrawingMultiCustomPost | 觸發(fā)PostRender回調(diào),渲染Overlay的物體,回置環(huán)境變量。 |
UpdateDepthTexture | 將renderNode隊(duì)列中物體的深度數(shù)據(jù),按照一定的shader環(huán)境,渲染到depthTexture中。 |
UpdateDepthNormalsTexture | 將renderNode隊(duì)列中物體的深度和法線數(shù)據(jù),按照一定的shader環(huán)境,渲染到一張RenderTexture中。 |
PrepareSceneCullingParameters | 對(duì)SceneCullingParameters內(nèi)容賦值,并對(duì)其中待計(jì)算的數(shù)據(jù)結(jié)構(gòu)申請(qǐng)空間;更新LODGroupManager的數(shù)據(jù),然后對(duì)CullResults的lodDataArray賦值。 |
FrustumCullReflectionProbesJob | 遍歷此job下的reflection probe的cube信息,根據(jù)cullingPlane,統(tǒng)計(jì)出視錐范圍內(nèi)的reflection probe。 |
CameraImageEffects | 1. 根據(jù)所有的filter把sourceRT拷貝到destRT 2. 執(zhí)行filter中的renderFunc回調(diào) |
GraphicsBlit | 用指定的shader把Texture拷貝到RenderTexture中。 |
CameraRenderSkybox | 根據(jù)skybox的類型,分不同數(shù)量的pass對(duì)skybox的面進(jìn)行渲染。 |
HaloRender | 篩選出可見范圍內(nèi)的Halo,分發(fā)job生成Halo渲染數(shù)據(jù),之后調(diào)用device接口進(jìn)行渲染。 |
HaloGeometryJob | 遍歷當(dāng)前job的Halo數(shù)組,根據(jù)Halo的size、depth、color等信息生成渲染數(shù)據(jù)。 |
SceneCulling | 對(duì)場(chǎng)景中的有效的renderer、lihgts、reflection probe 做“視錐剔除”和“遮擋剔除”,剔除完畢后,調(diào)用注冊(cè)過的 globalCallback 和 renderer 的 callback 。 |
CullAllVisibleLights | 篩選出scene中在camera視錐范圍下的有效光源,并根據(jù)lights的類型與屬性數(shù)據(jù),按照優(yōu)先級(jí)先后順序,計(jì)算出cast shadow的光源,以及其光照下的shadow casters數(shù)據(jù),并按照一定規(guī)則對(duì)數(shù)據(jù)進(jìn)行整理排序。 |
CullAllVisibleReflectionProbes | 篩選出scene中的probe,根據(jù)probe是否在視錐范圍內(nèi),記錄它的visible狀態(tài)、bounds信息等。 |
PrepareSceneNodes | 將cullResult中得到的各個(gè)類型的rendererList,分發(fā)到各個(gè)job處理,統(tǒng)計(jì)出其中需要callback的renderer,并放到cullResult的不同功能的callback數(shù)組中。 |
PrepareSceneNodesSetUp | 若此job中的rendererList為空,則不創(chuàng)建任何subJob;否則,將cullResult中的indexList、sceneNode數(shù)據(jù)對(duì)傳入此job的參數(shù)數(shù)據(jù)中,然后分為合適數(shù)量的subJob進(jìn)行處理(統(tǒng)計(jì)其中需要callback的node)。 |
PrepareSceneNodesJob | 遍歷此job負(fù)責(zé)處理的數(shù)組段,統(tǒng)計(jì)其中需要callback且jobdata的callback數(shù)組中有其所需的callback的node,將符合要求的node的index統(tǒng)計(jì)到數(shù)組中。 |
SceneNodesInitJob | 根據(jù)其rendererList類型,為處理該list的job指定其負(fù)責(zé)的數(shù)據(jù)在數(shù)組中的start位置,并為jobdata中的callback數(shù)組指定相關(guān)的回調(diào)。 |
PrepareSceneNodesCombineJob | 遍歷統(tǒng)計(jì)到的node index數(shù)組,統(tǒng)計(jì)node對(duì)應(yīng)的renderer,放到cullResult的不同功能的callback數(shù)組中。 |
FindDirectionalShadowCastingLights | 將統(tǒng)計(jì)到的有效的直線光,根據(jù)是否在prePass中可見、是否在需要計(jì)算陰影的空間內(nèi)、shadowType等因素,判斷每個(gè)light是否會(huì)投射陰影,并標(biāo)記。 |
FindLocalShadowCastingLights | 遍歷上一步篩選出的localLights和customLights,篩選出其中castShadow的light。 |
FindShadowCastingLights | 對(duì)傳入的light數(shù)組,根據(jù)是否在prePass中可見、是否在需要計(jì)算陰影的空間內(nèi)、shadowType等因素,判斷每個(gè)light是否會(huì)投射陰影,并標(biāo)記。 |
CullSendEvents | culling結(jié)束后,調(diào)用global 的 callback;然后調(diào)用renderer注冊(cè)的callback;最后執(zhí)行renderer的update |
AddLocalLights | 統(tǒng)計(jì)localLights和customLights中的有效、并cast shadow的lights,計(jì)算出每個(gè)lights照射范圍內(nèi)的shadow caster數(shù)據(jù)。 |
AddReflectionProbes | 把所有active的probe統(tǒng)計(jì)到一個(gè)數(shù)組中,并根據(jù)之前的剔除結(jié)果,標(biāo)記每個(gè)probe的visible情況、bounds信息等。 |
ShadowsCullShadowCastersDetailPoint | 遍歷傳入的sceneNode,根據(jù)point light的半徑和node的bound等信息,計(jì)算出point light影響范圍內(nèi)的node。 |
ShadowsCullShadowCastersDetailSpot | 遍歷傳入的sceneNode,根據(jù)spot light的光錐空間和node的bound信息,計(jì)算出spot light影響范圍內(nèi)的node。 |
CullDynamicObjectsWithUmbra | 遍歷傳入的的bounds數(shù)組,將其中被occlusionBuffer遮擋的元素剔除掉。 |
CullObjectsWithoutUmbra | 根據(jù)已有的cullingPlanes準(zhǔn)備合適數(shù)量的一個(gè)plane數(shù)組,遍歷傳入的待處理bounds數(shù)組,將不在plane范圍內(nèi)的部分剔除。 |
CullingGroupSendEvents | 遍歷CullingGroups,若其targetCamera與參數(shù)中一致,則先向所有state變化了的visible的node發(fā)送事件,然后向state變化了的Invisible的node發(fā)送事件。 |
RenderDeferredSort | 對(duì)deferredRenderPath需要處理的RenderObject隊(duì)列按照一定規(guī)則進(jìn)行排序。 |
RenderDeferredGBuffer | 1. 根據(jù)情況創(chuàng)建相應(yīng)數(shù)量的GBuffer,并將其傳送給gfxDevice。 2. 遍歷所有RenderObjectData,根據(jù)其攜帶的shader的各個(gè)pass設(shè)置渲染環(huán)境以及參數(shù)。 |
RenderDeferredLighting | 將GBuffer中對(duì)應(yīng)的發(fā)現(xiàn)RT設(shè)置到shaderProperties中,然后先后對(duì)activeLight和mainLight進(jìn)行渲染。 |
RenderDeferredLight | 根據(jù)光源類型和信息,設(shè)置shader pass context,然后逐步生成光源的geometry數(shù)據(jù)進(jìn)行渲染。 |
RenderDeferredFinalPass | 將光照信息合并到當(dāng)前main RenderTexture上,觸發(fā)renderEvent回調(diào)。 |
RenderDeferredForwardObjectsToDepth | 把需要前向渲染的objects渲染信息寫入depthPass中。 |
RenderDeferredCombineDepthNormals | 將depth信息合并入normal信息的RenderTexture中。 |
RenderDeferredReflections | 準(zhǔn)備渲染ReflectionProbe需要的環(huán)境,并把所有的probe信息以quad或mesh的形式進(jìn)行渲染。 |
RenderDeferredDefaultReflection | 根據(jù)默認(rèn)的reflection環(huán)境,設(shè)置device的DepthState和StencilState,將camera的nearPlane根據(jù)reflection的轉(zhuǎn)換矩陣渲染到device上。 |
RenderDeferredReflProbeQuad | 關(guān)閉裁剪,將ReflectionProbe生成的vertex渲染到camera的nearPlane對(duì)應(yīng)的quad上。 |
RenderDeferredReflectionsToEmissive | 將Reflection生成的RenderTexture渲染到Emissive的RenderTexture。 |
RenderPrepare | 為RenderNode隊(duì)列中的node下的material生成RenderObjectData,按不同條件放入opaque和afterOpaque。 |
RenderOpaqueGeometry | 根據(jù)當(dāng)前的renderPath(prePass、deferredPath、forwardPath等),對(duì)OpaqueObjects執(zhí)行不同的RenderLoop。 |
RenderTransparentGeometry | 將需要在transparent批進(jìn)行渲染的物體送諸渲染,更新camera的depthTexture。 |
RenderMotionVectors | 若camera的depthTextureMode需要,且當(dāng)前環(huán)境支持MotionVector,則篩選出需要渲染的motionVector數(shù)據(jù)的RenderObject,按相應(yīng)流程進(jìn)行渲染。 |
RenderDeferredForwardObjectsIntoDepth | 將需要ForwardRender的objects的深度信息渲染到depthRT中。 |
RenderDeferredForwardObjectsIntoDepthNormals | 利用特定的shader,將需要ForwardRender的objects的depth和normal信息渲染入特定的RT中。 |
MotionVectorSort | 對(duì)篩選出的有MotionVector的RenderObject隊(duì)列進(jìn)行排序。 |
MotionVectorRender | 將統(tǒng)計(jì)出的motionVector列表分發(fā)到合適數(shù)量的job進(jìn)行渲染。 |
MotionVectorRenderJob | 遍歷此job負(fù)責(zé)的存有motionVector數(shù)據(jù)的 renderPass 列表,分別對(duì)每個(gè)pass進(jìn)行渲染。 |
RenderPrePassSort | 對(duì)prePass需要處理的RenderObject隊(duì)列按照一定規(guī)則進(jìn)行排序。 |
RenderPrePassGeometryPass | 將帶有效shader的待渲染對(duì)象,逐一遍歷其shader的pass,按照一定規(guī)則,合批渲染。 |
RenderPrePassLighting | 先后渲染activeLights和mainLight,并在渲染之前與之后分別觸發(fā)BeforeLighting / AfterLighting的callback。 |
RenderPrePassLight | 根據(jù)光源數(shù)據(jù),設(shè)置shaderPass、lightMaterial、deviceParams等數(shù)值,然后將光源的mesh進(jìn)行渲染。 |
RenderPrePassFinalPass | 遍歷所有RenderObject,將其shaderPass經(jīng)過處理之后加入batchRenderer的pass隊(duì)列中,并在之前與之后觸發(fā)BeforeFinalPass / AfterFinalPass 的 callback。 |
RenderPrePassForwardObjectsToDepth | 遍歷forwardRenderedObjects,篩選出其中forwardRender并且receiveShadow的Objects,將這些物體的depth信息渲染到一張renderTexture上。 |
RenderPrePassCombineDepthNormals | 利用combineShader,將depth和normal合并到一張RenderTexture,并設(shè)置到當(dāng)前passContext環(huán)境中。 |
RenderDeferredCopyDepth | 將當(dāng)前device的渲染結(jié)果中的depth信息拆分到一張RenderTexture中。 |
RenderForwardOpaquePrepare | 遍歷所有Opaque的RenderObject,統(tǒng)計(jì)它的渲染方式(逐頂點(diǎn)/逐像素)、數(shù)據(jù)(shader/lights/shadow),然后遍歷shader中的所有pass,生成ForwardRenderPassData,加入到renderLoop的pass隊(duì)列中。 |
RenderForwardOpaqueSort | 對(duì)renderLoop中的opaqueObj生成的pass隊(duì)列排序。 |
RenderForwardOpaqueCollectShadows | 根據(jù)ShadowCachingData和LightData設(shè)置shaderProperties等環(huán)境,然后生成一張屏幕空間的shadowMap。 |
RenderForwardOpaqueRender | 設(shè)置渲染opaque物體所需環(huán)境,然后分job渲染各個(gè)pass以及其對(duì)應(yīng)的projector隊(duì)列。 |
RenderForwardAlphaPrepare | 遍歷所有Transparent的RenderObject,統(tǒng)計(jì)它的渲染方式(逐頂點(diǎn)/逐像素)、數(shù)據(jù)(shader/lights/shadow),然后遍歷shader中的所有pass,生成ForwardRenderPassData,加入到renderLoop的pass隊(duì)列中。 |
RenderForwardAlphaSort | 對(duì)renderLoop中的transparentObj生成的pass隊(duì)列排序。 |
RenderForwardAlphaRender | 設(shè)置渲染aplha物體所需環(huán)境,然后分job渲染各個(gè)pass以及其對(duì)應(yīng)的projector隊(duì)列。 |
RenderForwardRenderLoopJob | 遍歷job下的renderPass,首先渲染pass對(duì)應(yīng)的projector隊(duì)列,然后根據(jù)pass類型,配飾shader環(huán)境,進(jìn)行渲染。 |
RenderForwardAssignProjectorQueuesJob | 為當(dāng)前job分配的renderPass指定projector范圍。 |
PrepareUpdateRendererBoundingVolumes | 調(diào)用RendererUpdateManager中注冊(cè)過prepareDispatchUpdateFunc回調(diào)的函數(shù),獲得后續(xù)所需的BoundsJobData,并做相應(yīng)數(shù)據(jù)補(bǔ)充。 |
UpdateRendererBoundingVolumes | 用RendererUpdateManager中注冊(cè)過transformChangeFunc的函數(shù)生成job,回調(diào)用將各自的transform信息生成Bounds數(shù)據(jù)存入jobData。 |
FinalizeUpdateRendererBoundingVolumes | 調(diào)用RendererUpdateManager中注冊(cè)過finalizeUpdateFunc回調(diào)的函數(shù),處理上一步獲得的BoundsJobData。 |
TextureAwakeFromLoad | 根據(jù)texture的settingData,計(jì)算出GPU渲染所需的texture數(shù)據(jù),并根據(jù)情況,將texture scale至power of two之后上傳GPU,或按照original size,上傳GPU。 |
Physics2DDestroyShapes | 刪除collider,即刪除fixture、重置參數(shù)、從該collider相關(guān)聯(lián)的composite中移除。另外根據(jù)傳入的bool來確定操作:若collider需要重新生成則將之標(biāo)記給contact,否則將contact同時(shí)刪除。 |
Physics2DPolygonColliderPrepareShapes | 檢查collider是否是激活狀態(tài),獲得的多邊形是否非空,path是否非空,然后調(diào)用gPhysics2DProfilePolygonColliderPrepareShapesDecomposition。 |
Physics2DPolygonColliderPrepareCompositePaths | 檢查collider是否是激活狀態(tài),collider是否非空,path是否非空。將path轉(zhuǎn)換為composite。在此之前,若sprite renderer處于tiled的繪制模式,則先調(diào)用gPrepareTilingSegment,獲得“九宮格”信息,然后計(jì)算tile的數(shù)據(jù)變化,調(diào)用gGenerateTilingArea生成結(jié)果。 |
Physics2DPolygonColliderPrepareShapesDecomposition | 將傳入的polygon path進(jìn)行tessellation。在此之前,若sprite renderer處于tiled的繪制模式,則先調(diào)用gPrepareTilingSegment,獲得“九宮格”信息,然后計(jì)算tile的數(shù)據(jù)變化,調(diào)用gGenerateTilingArea生成結(jié)果,最后將結(jié)果轉(zhuǎn)換為composite再轉(zhuǎn)換為polygon。 |
Physics2DBoxColliderPrepareShapes | 檢查collider是否是激活狀態(tài),根據(jù)長(zhǎng)寬和坐標(biāo)換算為box的4個(gè)點(diǎn),檢驗(yàn)這4個(gè)點(diǎn)是否有效,然后賦值在shape上,并添加該shape。 |
Physics2DEdgeColliderPrepareShapes | 檢查collider是否是激活狀態(tài),將距離小于最低要求的點(diǎn)合并,檢查剩余節(jié)點(diǎn)數(shù)是否不少于2個(gè),然后賦值在shape上,并添加該shape。 |
Physics2DCircleColliderPrepareShapes | 檢查collider是否是激活狀態(tài),計(jì)算圓心和半徑,然后賦值在shape上,并添加該shape。 |
TerrainUpdateTreeBillboardTexture2 | 若camera的角度變化超過一定值或等待的幀數(shù)超過一定值,若當(dāng)前平臺(tái)為WIN/OSX/LINUX,則先后將albedoShader和normalShader設(shè)置到treeData的prototype的material中進(jìn)行渲染,否則,只對(duì)material當(dāng)前pass的mesh進(jìn)行常規(guī)渲染。 |
TerrainFlushDirty | 根據(jù)當(dāng)前terrain的dirtyFlag,判斷terrain發(fā)生變化的屬性有哪些(trees、heightMap等屬性),并分別針對(duì)各個(gè)屬性的變化對(duì)terrain數(shù)據(jù)進(jìn)行reload。 |
TerrainHeightmapRenderStep1 | 遞歸遍歷terrainRenderer中的劃分的節(jié)點(diǎn),根據(jù)節(jié)點(diǎn)到camera到距離等因素,標(biāo)記節(jié)點(diǎn)的可見性等信息。 |
TerrainHeightmapRenderStep2 | 遞歸遍歷terrainRenderer中的劃分的節(jié)點(diǎn),根據(jù)節(jié)點(diǎn)之間想相鄰關(guān)系/父子關(guān)系,進(jìn)一步優(yōu)化劃分節(jié)點(diǎn)的visible狀態(tài)(self visible 、some children visible)。 |
TerrainHeightmapRenderStep3 | 遞歸遍歷terrainRenderer中的劃分的節(jié)點(diǎn),根據(jù)每個(gè)節(jié)點(diǎn)的visible狀態(tài),生成相應(yīng)的mesh或刪除不需要的mesh;根據(jù)以上結(jié)果,創(chuàng)建為需要渲染的node創(chuàng)建renderer。 |
TerrainDetailsRender | 為DetailRenderer下的prototypes生成一個(gè)atlasTexture上傳GPU;對(duì)terrian劃分的patches做視錐剔除、深度剔除,為篩選出的可見的patch生成IntermediateRenderer,加入管理器中。 |
TerrainTreesRender | 根據(jù)烘焙數(shù)據(jù)更新terrain中樹節(jié)點(diǎn)的probe的enable狀態(tài);根據(jù)需要,重新統(tǒng)計(jì)或刷新treeRenderer的渲染信息;按照由遠(yuǎn)及近,分別對(duì)遠(yuǎn)處的樹合批渲染,近處的樹按照billboard或fullTree的形式單獨(dú)渲染。 |
TerrainTreesOnWillRender | 在play狀態(tài)下,遍歷裁剪結(jié)果中的可見的treeNode,若treeRendererVisiblility位圖中未標(biāo)可見,則更新位圖狀態(tài),并更新此treeNode中的renderer的wind(風(fēng))數(shù)據(jù)。 |
QuadTreeNodeRender | 根據(jù)RenderNode的renderingData,生成GfxDevice可使用的渲染數(shù)據(jù),然后執(zhí)行Draw操作。 |
TerrainRecomputeInvalidPatches | 遍歷篩選出的patch,重新計(jì)算此patch采樣高度最大誤差,以及此patch范圍內(nèi)高度的min/max值。 |
TerrainUpdateHeightmapTexture | 把HeightMap的高度信息,寫入一張指定格式的紋理中,然后把紋理數(shù)據(jù)寫入HeightMap的RenderTexture。 |
QuadTreeBatchNodeRender | 首先將此RenderNode的shader properties,設(shè)置到GfxDevice當(dāng)前環(huán)境;然后遍歷node中的batch數(shù)組,將數(shù)據(jù)push入待渲染隊(duì)列,當(dāng)隊(duì)列中instance數(shù)量達(dá)到max值,則提交渲染,如此循環(huán)直至數(shù)組末端。 |
TerrainUpdateMaterials | 若terrain的shader或material發(fā)生變化,則根據(jù)當(dāng)前的terrainData,重新生成splat material,并更新其他渲染相關(guān)數(shù)據(jù)。 |
TerrainUpdateTreeBillboardTexture | 若camera的角度變化超過一定值或等待的幀數(shù)超過一定值,則遍歷treeData中的所有prototype的material,并對(duì)material的當(dāng)前pass數(shù)據(jù)進(jìn)行渲染。 |
Physics2DPrepareTilingSegment | 傳入“九宮格”的位置信息,并以path中的節(jié)點(diǎn)根據(jù)其位置所在的區(qū)間分別填入數(shù)據(jù);若path中的兩個(gè)節(jié)點(diǎn)不在同一區(qū)間,則需要計(jì)算它們的連接線段與區(qū)間分界線的交點(diǎn),并將交點(diǎn)填入。 |