[toc]本篇讨论SRP中的RenderTexture

RT的用途

我们在很多地方都用到了RT,RT是主要的存储渲染数据的手段,下面是一些例举: cmd.SetRenderTarget(…); //作为颜色和深度的写入目标 float4 color = tex2D(MainTex, i.uv0); //作为颜色读取目标 采样 将RT保存为图片 序列化 cmd.GetTemporaryRT(…); //申请一个临时RT 作为读写目标 RenderTexture:用于引用一个RT实例 RenderTextureDescriptor:用于描述一个RT,可用来准确创建一个RT。

属性名

RenderTexture

RenderTextureDescriptor

像素宽度

width

width

像素高度

height

height

保存在Gamma空间

sRGB

sRGB

动态分辨率

useDynamicScale

useDynamicScale

MSAA级别

antiAliasing

msaaSamples

?

volumeDepth

volumeDepth

mipmap数量

自构时指定

mipCount

直接采样MS贴图

bindTextureMS

bindMS

颜色缓冲格式

format

graphicsFormat/colorFormat

深度缓冲格式

depth

depthBufferBits

stencil data格式

stencilFormat

stencilFormat

纹理类型

dimension

dimension

?

?

shadowSamplingMode

?

vrUsage

vrUsage

?

?

flags

不保存到RAM

memorylessMode

memoryless

标记为拥有mipmap

useMipMap

useMipMap

自动生成mipmap

autoGenerateMips

autoGenerateMips

(SM4.5)随机读写

enableRandomWrite

enableRandomWrite

是否为当前读写目标

active

?

转化为描述

descriptor

?

采样时过滤方式

Bilear??Point??

-

重复模式

repeat?clamp?

-

动态分辨率

当GPU繁忙时,降低RT分辨率,提高渲染速度,需要开启性能分析。 参考:动态分辨率系统允许根据GPU的负载动态缩放RT的分辨率,在相机组件开启;

stencilFormat

设置stencil data的格式 设置stencilFormat将导致stencil data可以作为Texture采样(在受支持的平台); 受支持的格式有:R8_UInt(dx11/dx12),R8_UNorm(PS4) 并不设置stencil buffer的格式,stencil buffer由RenderTexture.depth决定

纹理类型(TextureDimension) 默认值Tex2D

一般我们使用的都是Tex2D类型,其他类型可能用于特殊情况(VR/探针); 参考:dimension

mipmap相关

autoGenerateMips 默认值true 当开启了mipmap(useMipMap = true),此RT结束被绘制(更换active RT)时自动生成mipmap。 useMipMap 默认值false 是否生成mipmap,要求RT宽高为2的指数。

MSAA

开启MSAA会导致贴图的格式产生变化,需要转化为正常纹理,或者使用MSAA贴图的采样语法: LOAD_TEXTURE2D_MSAA(_CameraDepthAttachment, uv, sampleIndex)