?????????????????Unity3D?????PC?????????????????????????????????????????????????GDC 2017 Ghost Recon Wildlands Terrain Tools and Technology?
Ghost Recon Wildlands Terrain Tools and Technologywww.youtube.com
??????????????????????????????????????????????
??????????????????Unity3D??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????5?????????????????
1. ??????
2. ????????
3. ?????????
4. ????
5. ??
???????
????????? + ???????????????????????????DX11?????Hull Domain Shader???????????????????????
x1, x32, x64 ???
?????????????????????????????????????????????????????PC??????????????????????????????????????????????????????????Quad Plane + Tessellation?????GPU Instance?????Tessellation????64?????????????????64 * 64?????????????????????????????????????
?LOD?????????????????????
??????????????????????????????????????????????????????????????????MipMap????????????????????????????????????????????????????????????????????????????????????????
?????????????????Virtual Texture???????????????Virtual Texture????
MaxwellGeng?Virtual Texture Tools & Practices
??????????Shader???????????????????
?????Fragment Shader????????????Standard PBR Shader???????????????????????????????Virtual Texture?
???????Shader??????????????Virtual Texture??????????????Ghost Recon????????????????
???32?PBR??????Texture Array???????8??Mask Map??????????????????
????Bilinear???????????
??Ghost Recon?????????????????????????????????????????????32????????????Indirect Buffer??????????????????????????????????????????????????????
??????????????????????????Indirect Buffer??????????????????
????????Mask????????????????Mask Texture?Bilinear Interpolation???Mask?????????????Virtual Texture?
????????????
??????Bilinear??????????????????????????????????????????????????????????????????????Compute Shader Kernel??????????
?????
??????????????????????????????????????????????????????????????????????????????????????????
????????VT????????????????????????????????????????????Shader???????????Virtual Texture?????????????????????????????????????
??????????????????????????????????????????????????????????????????????????????Pixel Offset?????Early Z???????????????????????????????Shader??????????????????????Virtual Texture Terrain?????????????????????????UV?????????Uniform???Shader?
???????????????????????????????????????C#???????64????????????????Shader????????????????????????floor frac???????????????TerrainVTOffset????????????????????????????????5km?????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????UV???????????????UV?????????????????Virtual Texture???????
?????????????????????????????????????????????????????????Virtual Texture??????????????????????????????Deferred Shading?Geometry Pass???????????????VT?????????????Rendering Pass?????Albedo?PBR???????????Heightmap?????PBR??????????Heightmap????????????MRT Pass?????????????????Shader???Shader????????????
Shader??????????????????????????
?????SRP ???API?????RenderQueue??TerrainDisplacement Pass???????????RenderTarget?????????????????????BlendOP Max?????????????????????????????????????Double Buffer?????Frag Shader?????????????_VirtualHeightmap?_OffsetIndex???????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????Substance Designer?????????????????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????Alpha Blend????Virtual Texture????????????????????????????????????Alpha???????????
????????????
???????????????????????????????????????????????????????????
?????????????????????PBR??????????
??PBR??
?????
????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????
????????:
???????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????????1km?LOD????????1/2??????1/4?????????????
?????????8KM??????????8KM?????4km?2km?????????????????????????????????????LOD????????????????????????
????????????1km??????????????????????Virtual Texture???Mask map???Ghost Recon????Mask Map???? 2pixel / m????????????2048 * 2048??????Mask?????????????????????????????????Virtual Texture????????????????Mask Map????????????????????256x256?????????????????????????????????????????????????????????????????????????????8KM?????????????????
LOD0: 8 * 8 * 256x256
LOD1: 16 * 16 * 256x256
LOD2: 32 * 32 * 256x256
LODX: 2^(3 + X)^2 * 256x256
??????????????????????????????????
1. ??LODLevel M????Level?????O?
2. ??????????????????P?
??????????????????????Mipmap???????????????????????????4D Texture?
??????????????????????????????????????????Mask Map????????????????????????2048 * 2048 * 8 bit????4M?????????????1km????????????????????????????????????????????????????????????????????????????????????0.1ms?????????????????????????????????????????????
??????????????????????????????DCC??????1km??????LOD??????????????????????????????????DCC???????HeightMap_X_Y???X?Y????????????Editor?????????????????????????????????????FileStream???????????????????????????????????????
?????????1km??????????????????????????MipMap???????????4?????????2?????RT????????????????????????LOD?
?????????????????????????DCC??????????????????????????????????????????
????????????????????????????????????????4????????????????????????????????????UV???
??????????????????Prefab?GameObject??????????????????????????????????????????????????Addressable???API?????????????
Addressable????Load Unload?????InstantiateAsync??API????????????????????????????????????????????????Unity???????Package???????????????????????????????????????????API?????GameObject?????????Destroy?????????????????API???????????????????????
??????????????????????????????????????????????????????????????????????????????????????????????????LOD????????????LOD???????????????????????LOD???????????????????????????????????LOD??????LOD???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????LOD????LOD???????????????????????????????????????????????????????????????
????????????????????????????2km????????????????????????????????????????????????????????????????????????????????????????????????????????????256x256???????2048x2048?Atlas?????64??????????????????????????????????????????????????????????????????
???????1km?LOD0?512m?LOD1????????????????LayerMask????????????????????Culling Layer???????????????????????LOD???Layer?
??????????????????
????????????????Prefab????Addressable?
?????????????????????GameObject????????Prefab????????????????Prefab???????????????Instantiate??????????????????
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????:
?????????????????????????????????????????????
??????????????????????????????????????????????(0,1,0)????????????????TBN Matrix????????????????????????????????????????????????????????????????????DX?OpenGL????????????????????????????????
????????????????????????????????????????Tangent???(1,0,0)??????????????????Normal???????Normal?Tangent????????????Binormal????????Binormal?Normal???????Tangent??????
???????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????Bilinear Interpolation??????????????????????????????Blend Mask?????Mask????????4????????????????????????Mask???????????????????????????????TGDC? Trace Yang ????????????????????????????????????????????????????????????Mask Blend???????????????????
?????????????????????????????????????????Albedo, Normal, Smoothness, Metallic, Occlusion, Height?4??????Height??????Displacement??Smoothness, Metallic, Occlusion????????R8G8B8A8_UNorm???Render Texture??8????????????????????????????????????????????Height????????????????????GPU????????????
????????Int32
????????Int32
?????Float32
?????Float32
?????????????????????????????????????????????????????
??????????????????????????????????????
??????????????????????????????????????????????????????????????????????????????????????????Mask?????????????????????????????????????
?????????????????????????????????????????????
??????
???????????????????????????????????????????????????????????Index map?????????????????FBM Noise Map???????????????????????????????????????O(logN)?????O(n)???????????????????????????????????Indexmap??????????????????????????????????????????????????????????Virtual Texture?????????????????Mask map?????
???????Mask map????Virtual Texture?????????????????????????VT????????Texture Array?????????????????????Texture Element????????Render Target????????????PCG????????????????????????????????????????????????1??????0? ????????????????
???????????????????????????????????????????????
??????????????????????????
??????????????????????????????????????????Virtual Texture???????????????????????????????????????????????????????????????????????????????LOD?????????????????????????????????????????????????????????????????????????????????UV Map??????????????0???????????????
??????????LOD??????8m???????2048m?1024pixel/8m??????????????????????????????????????????????????????????????????160?????????????1.55G?????PC??8G?????????????????????????????Virtual Texture?????????????????????????????????????????????LOD?????????????????????????????????????????????????????????????????????????????????????????????????????????????LOD?????????????????????????????LOD?????????????GDC?????????????????????????????????????????????????
?????????????????????????Y????????????????????????????????????????????????????0.33??LOD????????????30m?????????10m?????????????????????????128-133???????????????????????????????LOD??????????????????????????????????0.3??????????LOD????????????????????????????????????????+??????????3-5?????????????????????????????????????????????(si)?(bi)?
????:
??????????????????GTX1070?????????????
?????/??????2048m * 2048m
Material Index Map: 2048 * 2048 / 1km^2
HeightMap: 256x256 / 8m^2
????????????????????????????????????????????????2km?????????????????????????????????
????????????
??????<0.1ms
?????< 1.1ms
??????< 0.2ms
?????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????Virtual Texture????????????????????????????????????????????????????????????????????????????????????????????
??:
???????????????????????Virtual Texture???????????????????????????????????????????????????????????????????????????????GPU Driven Rendering Pipeline????????????????????????Ubisoft???????????????????????????????????????????????????????????????????????
???MaxwellGeng
?????https://zhuanlan.zhihu.com/p/85417843
|