unity 和ue都做了
https://docs.unity3d.com/Manual/TextureStreaming.html
https://docs.unrealengine.com/en-US/Engine/Content/Types/Textures/Streaming/Overview/index.html
mip-based texture streaming
用这个在没loading到的时候会糊 不然没loading到的时候没有tex就更过分了
还有一种 virtual texture streaming
https://docs.unrealengine.com/en-US/Engine/Rendering/VirtualTexturing/index.html
https://docs.unrealengine.com/en-US/Engine/Rendering/VirtualTexturing/Streaming/index.html
并不是说后者 在没有loading到的时候 就不是先加载high level的mipmap
而是说 包含没用到的mipmap texture资源 一部分在virtual texutre 池子里 用哪块把哪块加载进来
可以是一个大的tex 的一部分
应该也是texture 延迟bind技术
这里需要research
virtual texture 的支持平台
https://docs.unity3d.com/2020.1/Documentation/Manual/svt-requirements-compatibility.html
https://docs.unity3d.com/2020.1/Documentation/Manual/svt-how-it-works.html
- It samples an indirection texture, calculates the non-virtual UVs, and samples a cache texture with these UVs.
- It translates the virtual UVs to a tile ID, and binds an additional render target that receives these tile IDs. The CPU copies this render target back to main memory asynchronously,
- and processes it on a separate thread, to create requests for the asynchronous read manager to load these tiles from disk into a cache of GPU memory (if they are not already present).
是啥
https://www.gdcvault.com/play/1021761/Adaptive-Virtual-Texture-Rendering-in
https://www.youtube.com/watch?v=SVPMhGteeuE
http://mrelusive.com/publications/papers/Software-Virtual-Textures.pdf
procedural virtual texture 这个和adaptive virtual texture不同
https://media.contentapi.ea.com/content/dam/eacom/frostbite/files/gdc12-terrain-in-battlefield3.pdf
要配gpu read back
https://www.youtube.com/watch?v=thpn2VjbkPE
Virtual texturing in software and hardware (SIGGRAPH 2012 Courses)
以下是硬件的virtual texture
DirectX叫Tiled Resource,Vulkan叫Sparse Partially-Resident Images,OpenGL叫ARB_sparse_texture,Metal叫Sparse Texture,为每个API做适配也是一个成本。引用自--
https://zhuanlan.zhihu.com/p/138484024
上面这两种基本上是一回事
===========
bindless texture 是另外一种事情 是为了 不用bind texture 用别的方法访问贴图
https://www.khronos.org/opengl/wiki/Bindless_Texture
http://www.opengl.org/registry/specs/ARB/bindless_texture.txt
https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_bindless_texture.txt
https://www.khronos.org/registry/OpenGL/extensions/NV/NV_bindless_texture.txt
https://www.slideshare.net/tlorach/opengl-nvidia-commandlistapproaching-zerodriveroverhead
看下来是为了 一开始全部资源绑定 之后从内存里面拿数据 而不是每次draw之前bind到context上才能用
opengl dx12支持
看上去更像是为了 突破一个shader绑定贴图个数限制的一个功能 丰富材质