class in UnityEngine.Experimental.TerrainAPI
切换到手册可能跨多个相连地形瓦片的绘制操作的上下文。
此类用于对可能跨多个地形瓦片的地形区域应用编辑操作。
PaintContext 可用于编辑高度贴图或泼溅贴图数据,也可用于以只读模式收集正常数据(不能写入法线,因为它们来自高度贴图)。
PaintContext 将计算每个地形上的相关区域,并将原始数据采集到单个 sourceRenderTarget 中。
随后编辑操作可以从 sourcerenderTarget 读取并将修改的数据写入 destinationRenderTarget 中。
应用编辑操作后,PaintContext 还可以将 destinationRenderTarget 中的已修改数据写回到每个地形,确保其间无缝接合。
使用 PaintContext 的最简单方法是通过 TerrainPaintUtility 中的 helper 函数:
TerrainPaintUtility.BeginPaintHeightmap、TerrainPaintUtility.EndPaintHeightmap、TerrainPaintUtility.BeginPaintTexture、TerrainPaintUtility.EndPaintTexture、TerrainPaintUtility.CollectNormals 和 TerrainPaintUtility.ReleaseContextResources。
还可以通过成员函数更直接地使用 PaintContext。一般情况下,按以下顺序使用这些函数
1) 构造函数,PaintContext.CreateFromBounds - 构造一个 PaintContext 以及要编辑的目标地形和区域
2) PaintContext.CreateRenderTargets - 创建源和目标 RenderTargets
3) PaintContext.GatherHeightmap、PaintContext.GatherAlphamap、PaintContext.GatherNormals - 从地形瓦片读取到sourceRenderTarget
4) 应用编辑操作,从 sourceRenderTarget 读取,并写入 destinationRenderTarget
5) PaintContext.ScatterHeightmap、PaintContext.ScatterAlphamap - 从 destinationRenderTarget 写入到地形瓦片中(可选)
6) PaintContext.Cleanup - 销毁 RenderTarget 资源(如果调用了 CreateRenderTargets 则需要)
7) PaintContext.ApplyDelayedActions - 应用任何执行成本高昂的更新的延迟操作
另请参阅:TerrainPaintTool<T0>
kNormalizedHeightScale | Unity 在内部使用此值将 [0, 1] 高度值变换为纹素值(存储在 TerrainData.heightmapTexture 中)。 |
destinationRenderTexture | (只读)写入编辑操作以修改数据的 RenderTexture。 |
heightWorldSpaceMin | 此 PaintContext 在世界空间中接触的所有地形瓦片的最小高度。 |
heightWorldSpaceSize | 此 PaintContext 在世界空间中接触的所有地形瓦片的高度范围(从最小值到最大值)。 |
oldRenderTexture | (只读)调用 CreateRenderTargets 时的 RenderTexture.active 值。 |
originTerrain | (只读)用于构建 PaintContext 的地形。 |
pixelRect | (只读)此 PaintContext 代表的像素矩形。 |
pixelSize | (只读)PaintContext 像素的大小(采用地形单位,正如 originTerrain 所定义。) |
sourceRenderTexture | (只读)用于存储地形瓦片原始数据的渲染目标。 |
targetTextureHeight | (只读)目标地形纹理的高度。这是单个地形的分辨率。 |
targetTextureWidth | (只读)目标地形纹理的宽度。这是单个地形的分辨率。 |
terrainCount | (只读)此 PaintContext 中的地形瓦片数量。 |
PaintContext | 创建新的 PaintContext,从而编辑 pixelRect 所定义区域中的地形上的目标纹理。 |
Cleanup | 释放此 PaintContext 的已分配资源。 |
CreateRenderTargets | 创建 sourceRenderTexture 和 /destinationRenderTexture/。 |
Gather | 将用户指定的纹理数据收集到 sourceRenderTexture 中。 |
GatherAlphamap | 将 Alpha 贴图信息收集到 sourceRenderTexture 中。 |
GatherHeightmap | 将高度贴图信息收集到 sourceRenderTexture 中。 |
GatherHoles | 将地形孔洞信息收集到 sourceRenderTexture 中。 |
GatherNormals | 将法线信息收集到 sourceRenderTexture 中。 |
GetClippedPixelRectInRenderTexturePixels | 相对于 PaintContext 渲染纹理,检索地形的已裁剪像素矩形。 |
GetClippedPixelRectInTerrainPixels | 检索地形的已裁剪像素矩形。 |
GetTerrain | 从 PaintContext 检索地形。 |
Scatter | 通过将修改复制回用户为源地形瓦片指定的 RenderTextures,应用已编辑的 PaintContext。 |
ScatterAlphamap | 通过将修改复制回源地形瓦片,应用已编辑的 Alpha 贴图 PaintContext。 |
ScatterHeightmap | 通过将修改复制回源地形瓦片,应用已编辑的高度贴图 PaintContext。 |
ScatterHoles | 通过将修改复制回源地形瓦片,应用已编辑的地形孔洞 PaintContext。 |
ApplyDelayedActions | 刷新由 PaintContext 高度贴图和 Alpha 贴图修改项创建的延迟操作。 |
CreateFromBounds | 构造一个 PaintContext 以用于编辑 boundsInTerrainSpace 和 extraBorderPixels 所定义区域中的地形上的纹理。 |
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.