目录
一、Render Target 的 Mipmap 需要数据
在纹理中使用 Mipmap 的方法很常见,其数据一般都是从纹理文件中读取而来。还有另一种带 Mipmap 的纹理,它就是 Render Target。在完成渲染到纹理之后,Render Target 可以被当成贴图再次使用。但是如果 Render Target 带有 Mipmap 则除了被渲染的那层 Mip 之外其他层都没有数据。在 D3D11 中提供了一个方法 ID3D11DeviceContext::GenerateMips 可以帮助 Render Target 生成指定 Mip 层的数据,但是这个好用的方法在 D3D12 中取消了,因为 D3D12 更底层,想要生成 Mipmap 的数据就需要自己动手。
二、生成 Mipmap 数据方法的原理
从一张原图生成 Mipmap 数据的方法很多,做起来都非常耗时,看看 nVidia 给 PS 做的纹理插件就知道生成 Mipmap 有多少道道。但是 Render Target 生成 Mipmap 数据都是需要在运行时实时生成的,不可能像 PS 插件那么精细,时间和效率都耗不起。所以我们只要解决 Mipmap 数据的有无问题就行。
一般来说 Render Target 分辨率最高的那层就是原图数据,其他每一层只要使用上一层的 Mipmap 作为纹理输入进行 Render To Texutre 就可以了,其实方法可以看作最简单后处理。注意,由于有 Cubemap 的存在,除了 Render Target 还需要对 Render Targe