## history
- SGI最早提出,用来在terrain上用超高精度贴图,不过要特殊hardware支持。
## 原理
- texture分2部分,能完整存下来的部分(一般是非常糙的几级mip)+ 不能完整存下来,只能存部分的
- 所以DX的实现就是用1个有mip的texture+一个只有1级mip的texture array
- 需要自己手动算mip,去采array中的某个
## 实现细节
- 存不下的mip的当前贴图碎片放在stack中,每层的碎片的大小stacksize是固定的
- toroidal addressing:更新的时候有进有出、用这种寻址方式可以让新进的pixel正好使用老pixel的位置
- 算实际需要sample的位置
- 对于一个uv,如果在完整的mipmap上,就是直接用这个uv sample就对
- 实际的sample的贴图是mipmap的一部分,所以uv需要scale(先不考虑是否要offset,其实不用),scale的大小是这部分占完整mipmap的比例的倒数
- 对于stack里的每一块,像素尺寸是StackSize,对于miplevel的那层的完整大小应该是OriginalSize / pow(2, miplevel)
- 实际计算的时候就是clipTexCoord = input.TexCoord * ((OriginalSize / pow(2, mipLevel)) / StackSize)
- white paper上为了让采的时候能采在像素的中心,用的是
```
float2 clipTexCoord = (input.texCoord) / pow(2, iMipLevel);
clipTexCoord.x *= scaleFactor.x + 0.5f;
clipTexCoord.y *= scaleFactor.y + 0.5f;
```
这里为啥加上0.5f我想不通。。。考虑iMipLevel = 0, scaleFactor=(1,1)的情况,clipTexCoord就是input.texCoord*1.5f,这个是不是打错了,应该是乘完了scaleFactor再 + 0.5f
## resource
- nvidia white paper: http://developer.download.nvidia.com/SDK/10/direct3d/Source/Clipmaps/doc/Clipmaps.pdf
- SGI最早提出,用来在terrain上用超高精度贴图,不过要特殊hardware支持。
## 原理
- texture分2部分,能完整存下来的部分(一般是非常糙的几级mip)+ 不能完整存下来,只能存部分的
- 所以DX的实现就是用1个有mip的texture+一个只有1级mip的texture array
- 需要自己手动算mip,去采array中的某个
## 实现细节
- 存不下的mip的当前贴图碎片放在stack中,每层的碎片的大小stacksize是固定的
- toroidal addressing:更新的时候有进有出、用这种寻址方式可以让新进的pixel正好使用老pixel的位置
- 算实际需要sample的位置
- 对于一个uv,如果在完整的mipmap上,就是直接用这个uv sample就对
- 实际的sample的贴图是mipmap的一部分,所以uv需要scale(先不考虑是否要offset,其实不用),scale的大小是这部分占完整mipmap的比例的倒数
- 对于stack里的每一块,像素尺寸是StackSize,对于miplevel的那层的完整大小应该是OriginalSize / pow(2, miplevel)
- 实际计算的时候就是clipTexCoord = input.TexCoord * ((OriginalSize / pow(2, mipLevel)) / StackSize)
- white paper上为了让采的时候能采在像素的中心,用的是
```
float2 clipTexCoord = (input.texCoord) / pow(2, iMipLevel);
clipTexCoord.x *= scaleFactor.x + 0.5f;
clipTexCoord.y *= scaleFactor.y + 0.5f;
```
这里为啥加上0.5f我想不通。。。考虑iMipLevel = 0, scaleFactor=(1,1)的情况,clipTexCoord就是input.texCoord*1.5f,这个是不是打错了,应该是乘完了scaleFactor再 + 0.5f
## resource
- nvidia white paper: http://developer.download.nvidia.com/SDK/10/direct3d/Source/Clipmaps/doc/Clipmaps.pdf