際際滷

際際滷Share a Scribd company logo
SKYFORGE: 丐亠仆仂仍仂亞亳亳 亠仆亟亠亳仆亞舒 
弌亠亞亠亶 舒从亠亠于, 亠仆亳亠从亳亶 亟亳亠从仂
仍舒仆 
! 丼仂 舒从仂亠 Skyforge? 
! 舒亳亠从亳亠 亠仆仂仍仂亞亳亳, 亳仗仂仍亰仂于舒仆仆亠 仗亳 
舒亰舒弍仂从亠 亞舒亳亠从仂亞仂 亟于亳亢从舒 Skyforge 
! Physically Based Shading 
! Deferred Shading 
! Reversed Depth buffer 
! 于仂亟 
! Q&A
Skyforge rendering tech (KRI 2014)
Skyforge 亟仍 仗仂亞舒仄仄亳舒 
! Fantasy + Sci-fi 
! 弌于仂亶 亟于亳亢仂从 
! Nextgen 亞舒亳从舒 于 MMO 
! 弌亳仍亳亰仂于舒仆仆舒 亠舒仍仆仂 
! 亞仂仄仆亠 仂从亠 仍仂从舒亳亳 
! 舒亠亳舒仍 亳 仂于亠亠仆亳亠 仄舒从亳仄舒仍仆仂 亠亠于亠仆仆 
! 4 亞舒亳亠从亳 仗仂亞舒仄仄亳舒
Skyforge rendering tech (KRI 2014)
Skyforge rendering tech (KRI 2014)
Skyforge rendering tech (KRI 2014)
Skyforge rendering tech (KRI 2014)
Skyforge rendering tech (KRI 2014)
Skyforge rendering tech (KRI 2014)
Skyforge rendering tech (KRI 2014)
Physically Based Shading
舒亠仄 ? 
! 舒亠仄 仆亢亠仆 亠亶亟亳仆亞, 仂仆仂于舒仆仆亶 仆舒 亳亰亳从亠? 
! 仂仍亠亠 亠舒仍亳亳仆舒 亳 于亠亟亠仆仆舒 从舒亳仆从舒  仄亠仆亠 
仆舒舒亳于舒 
! 舒亠亳舒仍 亳 于亠 舒亰亟亠仍亠仆  仄亠仆亠 仆舒舒亳于舒 
! 亠仆亠 仗舒舒仄亠仂于 于 仄舒亠亳舒仍亠  仄亠仆亠 仆舒舒亳于舒 
! 弌仂弍仍ミ莞夷却 亰舒从仂仆 仂舒仆亠仆亳 仆亠亞亳亳  仄亠仆亠 
仆舒舒亳于舒 
! 个亳亰亳亠从亳 从仂亠从仆仂 仆亠 亰仆舒亳 仂仂亠舒仍亳亳仆仂 
(仄. 舒弍仂 Disney, Pixar 亳 .亟.)
个亳亰亳从舒 仗仂亠舒 
!  亠舒仍仆仂亶 亢亳亰仆亳 仗仂于亠仆仂 仆亠 亞仍舒亟从舒 
! 仂于亠仆仂 仂弍亠从仂于 仂仂亳 亳亰 仄仆仂亢亠于舒 仄舒仍亠仆从亳 
仆亠仂于仆仂亠亶. 亅亳 仆亠仂于仆仂亳 仆舒仂仍从仂 仄舒仍亠仆从亳亠, 仂 仆亠 于亳亟仆 
仆亠于仂仂亢亠仆仆仄 亞仍舒亰仂仄 
! 舒亰仄亠 仄亳从仂仆亠仂于仆仂亠亶 弍仂仍亠 亟仍亳仆 于仂仍仆 亳 仂仆亳 于仍亳ム 仆舒 
仂舒亢亠仆亳亠 于亠舒 仂 仗仂于亠仆仂亳
仄舒亞舒 仗仂亟 仍亠从仂仆仆仄 仄亳从仂从仂仗仂仄
仄舒亞舒 仗仂亟 仍亠从仂仆仆仄 仄亳从仂从仂仗仂仄
亳从仂亞亠仂仄亠亳 仗仂于亠仆仂亳 
! 丼舒 于亠舒 仂舒亢舒亠 仂 仗仂于亠仆仂亳 
! 丼舒 仗仂仆亳从舒亠 于仆 仗仂于亠仆仂亳 亳 
仗亠亠亳亰仍舒亠 亳仍亳 仗仂亞仍仂舒亠
亳从仂亞亠仂仄亠亳 仗仂于亠仆仂亳 
!  仂仗亠亳亠仄 仆舒 仂于仆亠 仗亳从亠仍亠亶 
! 亢仆仂 亳于舒 仂舒亢亠仆仆亶 亳 仗亠亠亳亰仍亠仆仆亶 于亠
BRDF 
! BRDF 
! Bidirectional 
! Reflection 
! Distribution 
! Function 
! 丶亠仍: 舒亳舒 从仂仍亳亠于仂 仆亠亞亳亳, 亳亰仍舒亠仄仂亶 于 仂仂仆 仆舒弍仍ミ莞委亠仍, 
仗亳 亰舒亟舒仆仆仂仄 于仂亟亠仄 亳亰仍亠仆亳亳 
!  亠仂亳亳, 仄仆仂亞仂仄亠仆舒 仆从亳 - 3D, 4D, 6D 
! 舒 仗舒从亳从亠, 仄 弍亟亠仄 舒仄舒亳于舒 仆从亳 仂 亟于 仗舒舒仄亠仂于
舒亠礌仆亶 于亠 (diffuse) 
! 仂亢仆仂 仗亠仆亠弍亠 仂从仂亶 于仂亟舒 亳 于仂亟舒 仍舒 
! 弌亳舒亠仄, 仂 于亠 舒亠礌仆亶 于亠 
舒仗亠亟亠仍磳 舒于仆仂仄亠仆仂
舒亠礌仆亶 于亠 (diffuse) 
! 个仆从亳 亟仍 舒亠舒 舒亠礌仆仂亞仂 于亠舒 
! l  仆舒仗舒于仍亠仆亳亠 于亠舒 
! v  仆舒仗舒于仍亠仆亳亠 于亰亞仍磲舒 (仆亠 亳仗仂仍亰亠 于 亟舒仆仆仂亶 仄仂亟亠仍亳) 
! albedo  于亠从仂仆亶 仗舒舒仄亠, 从仂仂亶 仂仗亠亟亠仍磳 从仂仍从仂 仆亠亞亳亳 舒亠亳于舒亠, 舒 从仂仍从仂 仗仂亞仍仂舒亠 仄舒亠亳舒仍仂仄 
! n  仆仂仄舒仍 仗仂于亠仆仂亳 
! 亠仍亠仆亳亠 仆舒 PI 亰舒从仂仆 仂舒仆亠仆亳 仆亠亞亳亳 
! 亠仄 亳亰于亠仆亶 dot ( N, L ) 
! dot ( N, L ) 仂 cos 仄亠亢亟 于亠从仂舒仄亳 N, L
舒亠礌仆亶 于亠 (diffuse) 
! 仍仂舒亟 仗仂亠从亳亳 亰舒于亳亳 仂 亞仍舒 仗舒亟亠仆亳 
!  舒于仆舒 cos(N, L)
舒亠礌仆亶 于亠 (diffuse) 
! 舒 仗仂于亠仆仂 仗仂仗舒亟舒亠 仄亠仆亠 仆亠亞亳亳 于 
亰舒于亳亳仄仂亳 仂 亞仍舒 仗舒亟亠仆亳
舒亢亠仆仆亶 于亠 (specular) 
! 舒亢亠仆亳亠 于亠舒 
! 舒仗舒于仍亠仆亳亠 仂舒亢亠仆亳 仄亠仆磳 
亳亰-亰舒 仄亳从仂亞舒仆亠亶
舒亢亠仆仆亶 于亠 (specular) 
! 舒亢亠仆亳亠 于亠舒 
! 亠仆亠亠 亞仍舒亟从舒 仗仂于亠仆仂
亳从仂亞亠仂仄亠亳 仗仂于亠仆仂亳 
! Microfacet theory 
! 仂亟亠仍亳亠 仗仂于亠仆仂 从舒从 仄仆仂亢亠于仂 
仄亳从仂亞舒仆亠亶 
! 舒亢亟舒 仄亳从仂亞舒仆 - 亳亟亠舒仍仆仂 仂舒亢舒ム亠亠 
亰亠从舒仍仂 
! 舒仄 仆亢仆舒 仄仄舒 于从仍舒亟舒 从舒亢亟仂亶 仄亳从仂亞舒仆亳 于 
仂于亠亠仆亳亠 (亳仆亠亞舒仍) 
! 弌仍亳从仂仄 仄仆仂亞仂 于亳仍亠仆亳亶, 仂弍 亠亳 
亳仍亠仆仆仂
Microfacet BRDF 
! 个仆从亳 亟仍 舒亠舒 仂舒亢亠仆仆仂亞仂 于亠舒 (microfacet theory) 
! D  仆从亳 舒仗亠亟亠仍亠仆亳 仆仂仄舒仍亳. 仗亠亟亠仍磳, 从舒从 仄亳从仂亞舒仆亳 舒仗亠亟亠仍亠仆 于亟仂仍 
仆舒仗舒于仍亠仆亳 h (仂 仂亶 仆从亳亳 仄亠仆磳 仂仄舒 弍仍亳从舒) 
! F  仂仄仍舒 个亠仆亠仍 
! G  仆从亳 亰舒亠仆亠仆亳 仄亳从仂亞舒仆礆亳 亟亞 亟亞舒 
! l  仆舒仗舒于仍亠仆亳亠 于亠舒 
! v  仆舒仗舒于仍亠仆亳亠 于亰亞仍磲舒 
! n  仆仂仄舒仍 仗仂于亠仆仂亳 
! h  于亠从仂 仄亠亢亟 于亠从仂舒仄亳 l and v (half vector)
Half vector 
! Half vector, 于亠从仂 仄亠亢亟 L 亳 V 
! 个亳亰亳亠从亳亶 仄仍 half vector 
! 个亳仍舒亳 仄亳从仂亞舒仆亠亶, 从仂仂亠 于仆仂 于从仍舒亟 于 BRDF 
! h = m 亰仆舒亳 仄亳从仂亞舒仆 仂舒亢舒亠 于亠, 于亳亟亳仄亶 仆舒弍仍ミ莞委亠仍
Microfacet BRDF 
! 个仆从亳 亟仍 舒亠舒 仂舒亢亠仆仆仂亞仂 于亠舒 (microfacet theory) 
! D  仆从亳 舒仗亠亟亠仍亠仆亳 仆仂仄舒仍亳. 仗亠亟亠仍磳, 从舒从 仄亳从仂亞舒仆亳 舒仗亠亟亠仍亠仆 于亟仂仍 
仆舒仗舒于仍亠仆亳 h (仂 仂亶 仆从亳亳 仄亠仆磳 仂仄舒 弍仍亳从舒) 
! F  仂仄仍舒 个亠仆亠仍 
! G  仆从亳 亰舒亠仆亠仆亳 仄亳从仂亞舒仆礆亳 亟亞 亟亞舒 
! l  仆舒仗舒于仍亠仆亳亠 于亠舒 
! v  仆舒仗舒于仍亠仆亳亠 于亰亞仍磲舒 
! n  仆仂仄舒仍 仗仂于亠仆仂亳 
! h  于亠从仂 仄亠亢亟 于亠从仂舒仄亳 l and v (half vector)
舒仗亠亟亠仍亠仆亳亠 仄亳从仂亞舒仆亠亶 
! 弌亠仗亠仆 从仂亳仆舒 于 从舒亠于亠 仆从亳亳 
舒仗亠亟亠仍亠仆亳 仄亳从仂亞舒仆亠亶 (Blinn-Phong) 
! 弌亠仗亠仆 0.25 .. 65536
Microfacet BRDF 
! 个仆从亳 亟仍 舒亠舒 仂舒亢亠仆仆仂亞仂 于亠舒 (microfacet theory) 
! D  仆从亳 舒仗亠亟亠仍亠仆亳 仆仂仄舒仍亳. 仗亠亟亠仍磳, 从舒从 仄亳从仂亞舒仆亳 舒仗亠亟亠仍亠仆 于亟仂仍 
仆舒仗舒于仍亠仆亳 h (仂 仂亶 仆从亳亳 仄亠仆磳 仂仄舒 弍仍亳从舒) 
! F  仂仄仍舒 个亠仆亠仍 
! G  仆从亳 亰舒亠仆亠仆亳 仄亳从仂亞舒仆礆亳 亟亞 亟亞舒 
! l  仆舒仗舒于仍亠仆亳亠 于亠舒 
! v  仆舒仗舒于仍亠仆亳亠 于亰亞仍磲舒 
! n  仆仂仄舒仍 仗仂于亠仆仂亳 
! h  于亠从仂 仄亠亢亟 于亠从仂舒仄亳 l and v (half vector)
个亠仆亠仍 
!仍仂
个亠仆亠仍
个亠仆亠仍 
! 仗仗仂从亳仄舒亳 丿仍亳从舒 
! f0  仄仂亢仆仂 仗仂仍亳 亳亰 IOR (Index of refraction)
个亠仆亠仍 
! 个亠仆亠仍: 亰舒亟舒亠, 从仂仍从仂 于亠舒 弍亟亠 仗仂亞仍仂亠仆仂, 舒 从仂仍从仂 
仂舒亢亠仆仂 仗仂亟 舒亰仆仄亳 亞仍舒仄亳 
! 个亳亰亳亠从亳亶 仄仍 f0: 仗仂亠仆 于亠舒, 仂舒亢亠仆仆亶 仂 
仄舒亠亳舒仍舒 仗仂亟 仗礆仄 亞仍仂仄 
! 弍仆仂亠 亰仆舒亠仆亳亠 f0 亟仍 亟亳仍亠从亳从仂于 2% - 5% 
! 亠舒仍仍 舒亠亳于舒ム 仄舒仍仂 于亠舒, 于 仂仆仂于仆仂仄 仂舒亢舒ム
Microfacet BRDF 
! 个仆从亳 亟仍 舒亠舒 仂舒亢亠仆仆仂亞仂 于亠舒 (microfacet theory) 
! D  仆从亳 舒仗亠亟亠仍亠仆亳 仆仂仄舒仍亳. 仗亠亟亠仍磳, 从舒从 仄亳从仂亞舒仆亳 舒仗亠亟亠仍亠仆 于亟仂仍 
仆舒仗舒于仍亠仆亳 h (仂 仂亶 仆从亳亳 仄亠仆磳 仂仄舒 弍仍亳从舒) 
! F  仂仄仍舒 个亠仆亠仍 
! G  仆从亳 亰舒亠仆亠仆亳 仄亳从仂亞舒仆礆亳 亟亞 亟亞舒 
! l  仆舒仗舒于仍亠仆亳亠 于亠舒 
! v  仆舒仗舒于仍亠仆亳亠 于亰亞仍磲舒 
! n  仆仂仄舒仍 仗仂于亠仆仂亳 
! h  于亠从仂 仄亠亢亟 于亠从仂舒仄亳 l and v (half vector)
Microfacet BRDF 
! 亳仄亠 仂亞仂, 从舒从舒 舒 于亠舒 从于舒亠 仄亳从仂亞舒仆礆亳
亳亟亳仄仂 仄亳从仂亞舒仆亠亶 
! 仗仂仍亰亠仄 仗仂亠亶 仆从亳 于亳亟亳仄仂亳
舒亢亠仆仆亶 于亠 (specular) 
! 个仆从亳 仂舒亢亠仆仆仂亞仂 于亠舒 
! 弌仂仂于亠于亠 normalized Blinn-Phong model
亰仄亠仆亠仆亳亠 仗舒舒仄亠仂于 
! 亰仄亠仆亠仆亳亠 F0 ( IOR ) 
! 亰仄亠仆亠仆亳亠 亠仂仂于舒仂亳
弌仂舒仆亠仆亳亠 仆亠亞亳亳 
! 舒从仂仆 仂舒仆亠仆亳 仆亠亞亳亳 
! 仂仍亳亠于仂 仂舒亢亠仆仆仂亞仂 于亠舒 <= 1 
! 丐.亠. 舒亠礌仆亶 + 仂舒亢亠仆仆亶 于亠 <= 1 
! 亰 仂亞仂 仍亠亟亠: 从仂 亳 仗仍仂舒亟 弍仍亳从舒 仂 
亳仂仆亳从舒 于亠舒 于磶舒仆
丿亠仂仂于舒仂 100%
丿亠仂仂于舒仂 80%
丿亠仂仂于舒仂 50%
丿亠仂仂于舒仂 30%
丿亠仂仂于舒仂 10%
仆亠仆亳于仆仂 于亠舒 
! 仆亠仆亳于仆仂 于亠舒 仂弍舒仆仂 仗仂仗仂亳仂仆舒仍仆舒 从于舒亟舒 
舒仂礌亳 亟仂 亳仂仆亳从舒 于亠舒 
! 丱仂仂仂 仗仂亟仂亟亳 亟仍 仂亠仆 亳仂仆亳从仂于, 仆亠 亳仄亠ム亳 
仂弍亠仄舒 
!  仂亳仄 亳仂仆亳从 于亠舒,  从仂仂仂亞仂 亠 舒亰仄亠 (area light) 
! 弌亠仄亳 从 仆仍, 仆仂 仆亳从仂亞亟舒 亠亞仂 仆亠 亟仂亳亞舒亠
仆亠仆亳于仆仂 于亠舒 
! 亢仆仂 亠 亟于舒 舒亟亳舒 
! Rinner  舒亰仄亠 亳仂仆亳从舒 
! Router  亟亳舒仆亳, 仆舒 从仂仂仂亶 于从仍舒亟仂仄 于 仂于亠亠仆亳亠 
仄仂亢仆仂 仗亠仆亠弍亠
仆亠仆亳于仆仂 于亠舒 
! 舒舒 仆从亳 亰舒舒仆亳 
! 仂仆舒仆舒 于仆亳 Rinner 
! 舒 亟亳舒仆亳亳 Router 舒于仆舒 0 
float GetAttenuation(float distance, float lightInnerR, float invLightOuterR) 
{ 
float d = max(distance, lightInnerR); 
return saturate(1.0 - pow(d * invLightOuterR, 4.0)) / (d * d + 1.0); 
}
仆亠仆亳于仆仂 于亠舒 
! 舒亳从 亰舒舒仆亳 于亠舒
仂亟亠仍 仄舒亠亳舒仍舒 
! 仂亟亠仍 仄舒亠亳舒仍舒 
! Base color 
! Albedo 亟仍 亟亳仍亠从亳从舒 
! 亠从仂仆舒 舒 F0 亟仍 仗仂于仂亟仆亳从舒 
! Normal (仆仂仄舒仍 仗仂于亠仆仂亳, 仄舒从仂) 
! Roughness (亠仂仂于舒仂 仗仂于亠仆仂亳, 仄亳从仂) 
! Fresnel F0 (仗舒从亳亠从亳 于亠亞亟舒 从仂仆舒仆舒 亟仍 
亟亳仍亠从亳从舒, 从舒仍仆舒 舒 F0 亟仍 仄亠舒仍仍舒) 
! Metal (仄舒从舒: 仄亠舒仍仍 亳仍亳 亟亳仍亠从亳从)
Skyforge rendering tech (KRI 2014)
Base color ( Albedo )
Base color ( Albedo )
Normal map
Gloss (Roughness)
Specular ( F0 / IOR )
Metal
亳仄亠 仄舒亠亳舒仍舒
亳仄亠 仄舒亠亳舒仍舒
亳仄亠 仄舒亠亳舒仍舒
亳仄亠 仄舒亠亳舒仍舒
亳仄亠 仄舒亠亳舒仍舒
亳仄亠 仄舒亠亳舒仍舒
Deferred Shading
Deferred shading 
! 仍ム 
! 亠仂仄亠亳 仂亟亠仍亠仆舒 仂 仂于亠亠仆亳 
! 仆仂亞仂 亳仂仆亳从仂于 于亠舒 
! 亠 从仂仄弍亳仆舒仂仆仂亞仂 于亰于舒 于 亠亶亟亠舒 
! 亳仆 
! Bandwidth 
! 仂仆亳从亳 于亠舒  亠仆礆亳 仗仂-仗亠亢仆亠仄 亟仂仂亞亳亠 
! 弌仍仂亢仆仂  舒亰仆仄亳 BRDF 
! 仂亟亟亠亢从舒 仗仂亰舒仆仂亳
Deferred shading 
! Skyforge Gbuffer layout (2xRGBA8, 1xRGB10A2, 1xD24S8) 
! 96 bits + 24 bits + 8 bits = 128 bits per pixel
个亳仆舒仍仆亶 亠亰仍舒
Base color
仂仄舒仍亳 (world space)
丿亠仂仂于舒仂
Fresnel reflectance (F0)
Metallic
HDR: Global Illumination + Emissive
Ambient occlusion
亠亰 仍仂从舒仍仆仂亞仂 仂于亠亠仆亳 亳 于仂仍ミ斜却亳从仂于
个亳仆舒仍仆亶 亠亰仍舒
Tips & Tricks
亠从仂仆从亳 仗仂亰亳亳亳 
! 仍亞仂亳仄舒仄 仂于亠亠仆亳 仆亢仆舒 仗仂亰亳亳 
! world space 
! shadow space 
! view space 
! 亳 .亟. 
!  Gbuffer 舒仆亳 仂仍从仂 亞仍弍亳仆舒 
! 亳仗仂仍亰亠仄 INTZ (DX9) 
! 亞亳仗亠弍仂仍亳亠从仂亠 舒仗亠亟亠仍亠仆亳亠 " 
! 亢仆舒 亠从仂仆从亳 仗仂亰亳亳亳 亳亰 亞仍弍亳仆
亠从仂仆从亳 仗仂亰亳亳亳 
! 亠仂弍舒亰亠仄 depth 弍亠 于 仍亳仆亠亶仆亶 
! INTZ 于 R32F 
! 弌舒亰 仗仂仍亠 亰舒仗仂仍仆亠仆亳 Gbuffer 
// 个仆从亳 亟仍 仗亠仂弍舒亰仂于舒仆亳 亞仍弍亳仆  亞亳仗亠弍仂仍亳亠从亳仄 舒仗亠亟亠仍亠仆亳亠仄 于 仍亳仆亠亶仆 
float ConvertHyperbolicDepthToLinear(float hyperbolicDepth) 
{ 
return ((zNear / (zNear-zFar)) * zFar) / (hyperbolicDepth - (zFar / (zFar-zNear))); 
}
仂亟仂弍亳亠 亠亞仂仍仆亳从仂于 
! 丐亠亞仂仍仆亳从 P1, P2, P3 
仗仂亟仂弍亠仆 亠亞仂仍仆亳从 P1, P4, P5
仂亟仂弍亳亠 亠亞仂仍仆亳从仂于 
! 丐亠亞仂仍仆亳从 P1, P2, P3
仂亟仂弍亳亠 亠亞仂仍仆亳从仂于 
! 丐亠亞仂仍仆亳从 P1, P4, P5
亠从仂仆从亳 仗仂亰亳亳亳 
! 亠亳仆仆亶 亠亶亟亠 
! 弌亳舒亠仄 亠亞仂仍仆亳从 P1, P2, P3 于 于亠亳仆仆仂仄 亠亶亟亠亠 
! 亠亠亟舒亠仄 仂亠亰仂从 P1, P3 于 仗亳从亠仍仆亶 亠亶亟亠 
! 亳从亠仍仆亶 亠亶亟亠 
! 仂仍舒亠仄 亳仆亠仗仂仍亳仂于舒仆仆亶 于亠从仂 P1,P3 (rayDir) 亠亠亰 亳仆亠仗仂仍仂 
! 弌亳于舒亠仄 仍亳仆亠亶仆 亞仍弍亳仆 
! position = cameraPosition + rayDir * linearDepth 
! 亠仆 弍仂: mad + 亳仆亠仗仂仍仂 
! 仂亢仆仂 亠从仂仆亳仂于舒 仗仂亰亳亳 于 仍ミ頴笑 亟仂弍仆仂仄 仗仂舒仆于亠. 
world, view, shadow 亳 .亟. 
! HLSL 从仂亟 于 弍仂仆 仍舒亶亟舒
Reversed Depth Buffer
仂仍舒 亟舒仍仆仂 于亳亟亳仄仂亳
仂仍舒 亟舒仍仆仂 于亳亟亳仄仂亳
仂仍舒 亟舒仍仆仂 于亳亟亳仄仂亳
仂仍舒 亟舒仍仆仂 于亳亟亳仄仂亳
Reversed Depth Buffer 
! Reversed depth buffer 
near = 1 
far = 0 
! 舒弍仂舒亠  fixed point depth, 仂仄舒 D24S8 
! 亢仆仂 亳仆于亠亳仂于舒 D3DRS_ZFUNC 
D3DCMP_GREATEREQUAL 
! 亠亞亟舒 亳仆于亠亳亶亠 仄舒亳 仗仂亠从亳亳 
亠从仂亠从仆仂 亳仆于亠亳仂于舒 仆舒 舒亟亳亳 viewport舒 亳仍亳 于 亠亶亟亠亠
舒亳舒 仗仂亠从亳亳
舒亳舒 仗仂亠从亳亳 
! 舒从 仗仂仍舒亠 亞仍弍亳仆舒? 
! float4 p = mul( float4( pos, 1 ), mtxProjection ); 
! float depth = p.z / p.w;
弌舒于仆亠仆亳亠 仄亠仂亟仂于 
! Z near = 0.5 
! Z far = 50000.0
弌舒于仆亠仆亳亠 仄亠仂亟仂于 
! 弌舒仆亟舒仆亶 仄亠仂亟 
! Reversed depth buffer
弌舒于仆亠仆亳亠 仄亠仂亟仂于 
! 弌舒仆亟舒仆亶 仄亠仂亟 
! Reversed depth buffer
Numeric error  舒仆亟舒仆亶 仄亠仂亟
Numeric error  reversed depth buffer
Numeric error  reversed depth buffer
Reversed depth buffer : 于于仂亟 
! D24 仍亠亞从仂 仗仂从于舒亠 亟舒仍仆仂 于 50 从仄 
! Reverse depth 仗仂亟仂亟亳 亟仍 仍ミ頴笑覚 亟于亳亢从舒 
! 亠 亰舒从仍舒亟于舒  舒仄仂亞仂 仆舒舒仍舒 仗仂亠从舒 
! 亰于仍亠亠仆亳亠 仗仍仂从仂亠亶 仄舒 亳亰 仄舒亳 
! Bias  亠仆亠亶 
! 亳 .亟. 
! 亳 于仂亰仄仂亢仆仂亳 亳仗仂仍亰亶亠 float depth 弍亠
舒从仍ム亠仆亳亠 
! Nextgen 亞舒亳从舒 于 MMO 亢亠 亠舒仍仆仂 
! 亠 仄亠仆亠 仂仍亳亳亶 仂 
 从仂仆仂仍仆 舒亶仍仂于 
! 个亳亰亳仆亶 亠亶亟亳仆亞 仗仂舒亠 
仗仂亳亰于仂亟于仂 从仂仆亠仆舒 
! 舒仄 仆亢仆 亞舒亳亠从亳亠 仗仂亞舒仄仄亳 !
弌弌  ! 
弌乘? 
s.makeev@corp.mail.ru
Bonus
亠从仂仆从亳 仗仂亰亳亳亳: Vertex shader 
// 丼舒 仄舒亳 仗仂亠从亳亳 
float tanHalfVerticalFov; // invProjection.11; 
float tanHalfHorizontalFov; // invProjection.00; 
// 舒亰亳 从舒仄亠 于 仗仂舒仆于亠 亠从仂仆从亳亳 
float3 camBasisUp; 
float3 camBasisSide; 
float3 camBasisFront; 
// postProjectiveSpacePosition 于 homogeneous projection space 
float3 CreateRay(float4 postProjectiveSpacePosition) 
{ 
float3 leftRight = camBasisSide * -postProjectiveSpacePosition.x * tanHalfHorizontalFov; 
float3 upDown = camBasisUp * postProjectiveSpacePosition.y * tanHalfVerticalFov; 
float3 forward = camBasisFront; 
return (forward + leftRight + upDown); 
} 
void VertexShader(float4 inPos, out float4 outPos : POSITION, out float3 rayDir : TEXCOORD0) 
{ 
outPos = inPos; 
rayDir = CreateRay(inPos); 
}
亠从仂仆从亳 仗仂亰亳亳亳: Pixel shader 
// 仂亰亳亳 从舒仄亠 于 仗仂舒仆于亠 亠从仂仆从亳亳 
float3 camPosition; 
float4 PixelShader(float3 rayDir : TEXCOORD0) : COLOR0 
{ 
... 
float linearDepth = tex2D(linearDepthSampler, uv).r; 
float3 position = camPosition + rayDir * linearDepth; 
... 
} 
// 个仆从亳 亟仍 仗亠仂弍舒亰仂于舒仆亳 亞仍弍亳仆  亞亳仗亠弍仂仍亳亠从亳仄 舒仗亠亟亠仍亠仆亳亠仄 于 仍亳仆亠亶仆 
float ConvertHyperbolicDepthToLinear(float hyperbolicDepth) 
{ 
return ((zNear / (zNear-zFar)) * zFar) / (hyperbolicDepth - (zFar / (zFar-zNear))); 
}

More Related Content

What's hot (19)

CV2011-2. Lecture 03. Photomontage, part 2.
CV2011-2. Lecture 03.  Photomontage, part 2.CV2011-2. Lecture 03.  Photomontage, part 2.
CV2011-2. Lecture 03. Photomontage, part 2.
Anton Konushin
CV2011 Lecture 4. Image representation
CV2011 Lecture 4. Image representationCV2011 Lecture 4. Image representation
CV2011 Lecture 4. Image representation
Anton Konushin
CV2011-2. Lecture 10. Pose estimation.
CV2011-2. Lecture 10.  Pose estimation.CV2011-2. Lecture 10.  Pose estimation.
CV2011-2. Lecture 10. Pose estimation.
Anton Konushin
CV2011 Lecture 6. Fitting
CV2011 Lecture 6. FittingCV2011 Lecture 6. Fitting
CV2011 Lecture 6. Fitting
Anton Konushin
CV2011-2. Lecture 06. Structure from motion.
CV2011-2. Lecture 06.  Structure from motion.CV2011-2. Lecture 06.  Structure from motion.
CV2011-2. Lecture 06. Structure from motion.
Anton Konushin
亠 仂弍舒弍仂从舒 亳仂于 亳亰仂弍舒亢亠仆亳亶
亠 仂弍舒弍仂从舒 亳仂于 亳亰仂弍舒亢亠仆亳亶亠 仂弍舒弍仂从舒 亳仂于 亳亰仂弍舒亢亠仆亳亶
亠 仂弍舒弍仂从舒 亳仂于 亳亰仂弍舒亢亠仆亳亶
Dmitry Protopopov
CV2011-2. Lecture 08. Multi-view stereo.
CV2011-2. Lecture 08. Multi-view stereo.CV2011-2. Lecture 08. Multi-view stereo.
CV2011-2. Lecture 08. Multi-view stereo.
Anton Konushin
CV2011-2. Lecture 11. Face analysis.
CV2011-2. Lecture 11. Face analysis.CV2011-2. Lecture 11. Face analysis.
CV2011-2. Lecture 11. Face analysis.
Anton Konushin
CV2015. 亠从亳 2. 仆仂于 仂弍舒弍仂从亳 亳亰仂弍舒亢亠仆亳亶.
CV2015. 亠从亳 2. 仆仂于 仂弍舒弍仂从亳 亳亰仂弍舒亢亠仆亳亶.CV2015. 亠从亳 2. 仆仂于 仂弍舒弍仂从亳 亳亰仂弍舒亢亠仆亳亶.
CV2015. 亠从亳 2. 仆仂于 仂弍舒弍仂从亳 亳亰仂弍舒亢亠仆亳亶.
Anton Konushin
20111009 csseminar image feature detection and matching
20111009 csseminar image feature detection and matching20111009 csseminar image feature detection and matching
20111009 csseminar image feature detection and matching
Computer Science Club
亶 6.2. 1. 从 3
亶 6.2.  1. 从 3亶 6.2.  1. 从 3
亶 6.2. 1. 从 3
timorevel
50 仍亠 亳亰亳亠从仂亶 亠仂亳亳 亟亳舒从亳亳: 从仂仄仄亠仆舒亳亳 仆舒 亠 亳仂从亳 亳 舒亰于亳亳亠. 亠...
50 仍亠 亳亰亳亠从仂亶 亠仂亳亳 亟亳舒从亳亳: 从仂仄仄亠仆舒亳亳 仆舒 亠 亳仂从亳 亳 舒亰于亳亳亠. 亠...50 仍亠 亳亰亳亠从仂亶 亠仂亳亳 亟亳舒从亳亳: 从仂仄仄亠仆舒亳亳 仆舒 亠 亳仂从亳 亳 舒亰于亳亳亠. 亠...
50 仍亠 亳亰亳亠从仂亶 亠仂亳亳 亟亳舒从亳亳: 从仂仄仄亠仆舒亳亳 仆舒 亠 亳仂从亳 亳 舒亰于亳亳亠. 亠...
Alexander Dubynin
CV2011-2. Lecture 04. Semantic image segmentation
CV2011-2. Lecture 04.  Semantic image segmentationCV2011-2. Lecture 04.  Semantic image segmentation
CV2011-2. Lecture 04. Semantic image segmentation
Anton Konushin
亟亳舒从亳仂仆仆舒 亠亠从舒
亟亳舒从亳仂仆仆舒 亠亠从舒亟亳舒从亳仂仆仆舒 亠亠从舒
亟亳舒从亳仂仆仆舒 亠亠从舒
katyahg
亞亠仂仄亠亳亠从舒 仂仗亳从舒 亞仂从亳仆舒
亞亠仂仄亠亳亠从舒 仂仗亳从舒 亞仂从亳仆舒亞亠仂仄亠亳亠从舒 仂仗亳从舒 亞仂从亳仆舒
亞亠仂仄亠亳亠从舒 仂仗亳从舒 亞仂从亳仆舒
leshiy_AlisA
CV2011 Lecture 12. Action recognition
CV2011 Lecture 12. Action recognitionCV2011 Lecture 12. Action recognition
CV2011 Lecture 12. Action recognition
Anton Konushin
亞亠仂仄亠亳亠从舒 仂仗亳从舒
亞亠仂仄亠亳亠从舒 仂仗亳从舒亞亠仂仄亠亳亠从舒 仂仗亳从舒
亞亠仂仄亠亳亠从舒 仂仗亳从舒
DEC1990
L05 features
L05 featuresL05 features
L05 features
Victor Kulikov
CV2011-2. Lecture 03. Photomontage, part 2.
CV2011-2. Lecture 03.  Photomontage, part 2.CV2011-2. Lecture 03.  Photomontage, part 2.
CV2011-2. Lecture 03. Photomontage, part 2.
Anton Konushin
CV2011 Lecture 4. Image representation
CV2011 Lecture 4. Image representationCV2011 Lecture 4. Image representation
CV2011 Lecture 4. Image representation
Anton Konushin
CV2011-2. Lecture 10. Pose estimation.
CV2011-2. Lecture 10.  Pose estimation.CV2011-2. Lecture 10.  Pose estimation.
CV2011-2. Lecture 10. Pose estimation.
Anton Konushin
CV2011 Lecture 6. Fitting
CV2011 Lecture 6. FittingCV2011 Lecture 6. Fitting
CV2011 Lecture 6. Fitting
Anton Konushin
CV2011-2. Lecture 06. Structure from motion.
CV2011-2. Lecture 06.  Structure from motion.CV2011-2. Lecture 06.  Structure from motion.
CV2011-2. Lecture 06. Structure from motion.
Anton Konushin
亠 仂弍舒弍仂从舒 亳仂于 亳亰仂弍舒亢亠仆亳亶
亠 仂弍舒弍仂从舒 亳仂于 亳亰仂弍舒亢亠仆亳亶亠 仂弍舒弍仂从舒 亳仂于 亳亰仂弍舒亢亠仆亳亶
亠 仂弍舒弍仂从舒 亳仂于 亳亰仂弍舒亢亠仆亳亶
Dmitry Protopopov
CV2011-2. Lecture 08. Multi-view stereo.
CV2011-2. Lecture 08. Multi-view stereo.CV2011-2. Lecture 08. Multi-view stereo.
CV2011-2. Lecture 08. Multi-view stereo.
Anton Konushin
CV2011-2. Lecture 11. Face analysis.
CV2011-2. Lecture 11. Face analysis.CV2011-2. Lecture 11. Face analysis.
CV2011-2. Lecture 11. Face analysis.
Anton Konushin
CV2015. 亠从亳 2. 仆仂于 仂弍舒弍仂从亳 亳亰仂弍舒亢亠仆亳亶.
CV2015. 亠从亳 2. 仆仂于 仂弍舒弍仂从亳 亳亰仂弍舒亢亠仆亳亶.CV2015. 亠从亳 2. 仆仂于 仂弍舒弍仂从亳 亳亰仂弍舒亢亠仆亳亶.
CV2015. 亠从亳 2. 仆仂于 仂弍舒弍仂从亳 亳亰仂弍舒亢亠仆亳亶.
Anton Konushin
20111009 csseminar image feature detection and matching
20111009 csseminar image feature detection and matching20111009 csseminar image feature detection and matching
20111009 csseminar image feature detection and matching
Computer Science Club
亶 6.2. 1. 从 3
亶 6.2.  1. 从 3亶 6.2.  1. 从 3
亶 6.2. 1. 从 3
timorevel
50 仍亠 亳亰亳亠从仂亶 亠仂亳亳 亟亳舒从亳亳: 从仂仄仄亠仆舒亳亳 仆舒 亠 亳仂从亳 亳 舒亰于亳亳亠. 亠...
50 仍亠 亳亰亳亠从仂亶 亠仂亳亳 亟亳舒从亳亳: 从仂仄仄亠仆舒亳亳 仆舒 亠 亳仂从亳 亳 舒亰于亳亳亠. 亠...50 仍亠 亳亰亳亠从仂亶 亠仂亳亳 亟亳舒从亳亳: 从仂仄仄亠仆舒亳亳 仆舒 亠 亳仂从亳 亳 舒亰于亳亳亠. 亠...
50 仍亠 亳亰亳亠从仂亶 亠仂亳亳 亟亳舒从亳亳: 从仂仄仄亠仆舒亳亳 仆舒 亠 亳仂从亳 亳 舒亰于亳亳亠. 亠...
Alexander Dubynin
CV2011-2. Lecture 04. Semantic image segmentation
CV2011-2. Lecture 04.  Semantic image segmentationCV2011-2. Lecture 04.  Semantic image segmentation
CV2011-2. Lecture 04. Semantic image segmentation
Anton Konushin
亟亳舒从亳仂仆仆舒 亠亠从舒
亟亳舒从亳仂仆仆舒 亠亠从舒亟亳舒从亳仂仆仆舒 亠亠从舒
亟亳舒从亳仂仆仆舒 亠亠从舒
katyahg
亞亠仂仄亠亳亠从舒 仂仗亳从舒 亞仂从亳仆舒
亞亠仂仄亠亳亠从舒 仂仗亳从舒 亞仂从亳仆舒亞亠仂仄亠亳亠从舒 仂仗亳从舒 亞仂从亳仆舒
亞亠仂仄亠亳亠从舒 仂仗亳从舒 亞仂从亳仆舒
leshiy_AlisA
CV2011 Lecture 12. Action recognition
CV2011 Lecture 12. Action recognitionCV2011 Lecture 12. Action recognition
CV2011 Lecture 12. Action recognition
Anton Konushin
亞亠仂仄亠亳亠从舒 仂仗亳从舒
亞亠仂仄亠亳亠从舒 仂仗亳从舒亞亠仂仄亠亳亠从舒 仂仗亳从舒
亞亠仂仄亠亳亠从舒 仂仗亳从舒
DEC1990

Similar to Skyforge rendering tech (KRI 2014) (12)

亟亳舒从亳仂仆仆舒 亠亠从舒
亟亳舒从亳仂仆仆舒 亠亠从舒亟亳舒从亳仂仆仆舒 亠亠从舒
亟亳舒从亳仂仆仆舒 亠亠从舒
katyahg
亳舒从亳 于亠舒
亳舒从亳 于亠舒亳舒从亳 于亠舒
亳舒从亳 于亠舒
S-Petersburg University of Fire State Service
亞亠仂仄亠亳亠从舒 仂仗亳从舒
亞亠仂仄亠亳亠从舒 仂仗亳从舒亞亠仂仄亠亳亠从舒 仂仗亳从舒
亞亠仂仄亠亳亠从舒 仂仗亳从舒
DEC1990
亞亠仂仄亠亳亠从舒 仂仗亳从舒
亞亠仂仄亠亳亠从舒 仂仗亳从舒亞亠仂仄亠亳亠从舒 仂仗亳从舒
亞亠仂仄亠亳亠从舒 仂仗亳从舒
DEC1990
555
555555
555
ssusera868ff
弌弌 弌丱乘 个丶 丐亊 乖丐 弌 亊豫乂弌亊 ...
弌弌 弌丱乘 个丶 丐亊  乖丐 弌 亊豫乂弌亊 ...弌弌 弌丱乘 个丶 丐亊  乖丐 弌 亊豫乂弌亊 ...
弌弌 弌丱乘 个丶 丐亊 乖丐 弌 亊豫乂弌亊 ...
ITMO University
Shader magic: Breakdown of popular visual effects for games
Shader magic: Breakdown of popular visual effects for gamesShader magic: Breakdown of popular visual effects for games
Shader magic: Breakdown of popular visual effects for games
DevGAMM Conference
仆舒仂仄亳 仂亟仆仂亞仂 从舒亟舒 于 Unigine Engine (亠仂仆亳亟 弍亠仆从仂) - DEBUG TiME #3 2016
仆舒仂仄亳 仂亟仆仂亞仂 从舒亟舒 于 Unigine Engine (亠仂仆亳亟 弍亠仆从仂) - DEBUG TiME #3 2016仆舒仂仄亳 仂亟仆仂亞仂 从舒亟舒 于 Unigine Engine (亠仂仆亳亟 弍亠仆从仂) - DEBUG TiME #3 2016
仆舒仂仄亳 仂亟仆仂亞仂 从舒亟舒 于 Unigine Engine (亠仂仆亳亟 弍亠仆从仂) - DEBUG TiME #3 2016
Unigine Corp.
1
11
1
ssusera868ff
20100919 computer vision_konushin_lecture02
20100919 computer vision_konushin_lecture0220100919 computer vision_konushin_lecture02
20100919 computer vision_konushin_lecture02
Computer Science Club
11.8. 从 仍亠从亳亶 舒
11.8. 从 仍亠从亳亶 舒11.8. 从 仍亠从亳亶 舒
11.8. 从 仍亠从亳亶 舒
GKarina707
亳亰亳从舒 亠仄亳仆舒
亳亰亳从舒 亠仄亳仆舒亳亰亳从舒 亠仄亳仆舒
亳亰亳从舒 亠仄亳仆舒
Vladimir Vabischchevich
亟亳舒从亳仂仆仆舒 亠亠从舒
亟亳舒从亳仂仆仆舒 亠亠从舒亟亳舒从亳仂仆仆舒 亠亠从舒
亟亳舒从亳仂仆仆舒 亠亠从舒
katyahg
亞亠仂仄亠亳亠从舒 仂仗亳从舒
亞亠仂仄亠亳亠从舒 仂仗亳从舒亞亠仂仄亠亳亠从舒 仂仗亳从舒
亞亠仂仄亠亳亠从舒 仂仗亳从舒
DEC1990
亞亠仂仄亠亳亠从舒 仂仗亳从舒
亞亠仂仄亠亳亠从舒 仂仗亳从舒亞亠仂仄亠亳亠从舒 仂仗亳从舒
亞亠仂仄亠亳亠从舒 仂仗亳从舒
DEC1990
弌弌 弌丱乘 个丶 丐亊 乖丐 弌 亊豫乂弌亊 ...
弌弌 弌丱乘 个丶 丐亊  乖丐 弌 亊豫乂弌亊 ...弌弌 弌丱乘 个丶 丐亊  乖丐 弌 亊豫乂弌亊 ...
弌弌 弌丱乘 个丶 丐亊 乖丐 弌 亊豫乂弌亊 ...
ITMO University
Shader magic: Breakdown of popular visual effects for games
Shader magic: Breakdown of popular visual effects for gamesShader magic: Breakdown of popular visual effects for games
Shader magic: Breakdown of popular visual effects for games
DevGAMM Conference
仆舒仂仄亳 仂亟仆仂亞仂 从舒亟舒 于 Unigine Engine (亠仂仆亳亟 弍亠仆从仂) - DEBUG TiME #3 2016
仆舒仂仄亳 仂亟仆仂亞仂 从舒亟舒 于 Unigine Engine (亠仂仆亳亟 弍亠仆从仂) - DEBUG TiME #3 2016仆舒仂仄亳 仂亟仆仂亞仂 从舒亟舒 于 Unigine Engine (亠仂仆亳亟 弍亠仆从仂) - DEBUG TiME #3 2016
仆舒仂仄亳 仂亟仆仂亞仂 从舒亟舒 于 Unigine Engine (亠仂仆亳亟 弍亠仆从仂) - DEBUG TiME #3 2016
Unigine Corp.
20100919 computer vision_konushin_lecture02
20100919 computer vision_konushin_lecture0220100919 computer vision_konushin_lecture02
20100919 computer vision_konushin_lecture02
Computer Science Club
11.8. 从 仍亠从亳亶 舒
11.8. 从 仍亠从亳亶 舒11.8. 从 仍亠从亳亶 舒
11.8. 从 仍亠从亳亶 舒
GKarina707

Skyforge rendering tech (KRI 2014)

  • 1. SKYFORGE: 丐亠仆仂仍仂亞亳亳 亠仆亟亠亳仆亞舒 弌亠亞亠亶 舒从亠亠于, 亠仆亳亠从亳亶 亟亳亠从仂
  • 2. 仍舒仆 ! 丼仂 舒从仂亠 Skyforge? ! 舒亳亠从亳亠 亠仆仂仍仂亞亳亳, 亳仗仂仍亰仂于舒仆仆亠 仗亳 舒亰舒弍仂从亠 亞舒亳亠从仂亞仂 亟于亳亢从舒 Skyforge ! Physically Based Shading ! Deferred Shading ! Reversed Depth buffer ! 于仂亟 ! Q&A
  • 4. Skyforge 亟仍 仗仂亞舒仄仄亳舒 ! Fantasy + Sci-fi ! 弌于仂亶 亟于亳亢仂从 ! Nextgen 亞舒亳从舒 于 MMO ! 弌亳仍亳亰仂于舒仆仆舒 亠舒仍仆仂 ! 亞仂仄仆亠 仂从亠 仍仂从舒亳亳 ! 舒亠亳舒仍 亳 仂于亠亠仆亳亠 仄舒从亳仄舒仍仆仂 亠亠于亠仆仆 ! 4 亞舒亳亠从亳 仗仂亞舒仄仄亳舒
  • 13. 舒亠仄 ? ! 舒亠仄 仆亢亠仆 亠亶亟亳仆亞, 仂仆仂于舒仆仆亶 仆舒 亳亰亳从亠? ! 仂仍亠亠 亠舒仍亳亳仆舒 亳 于亠亟亠仆仆舒 从舒亳仆从舒 仄亠仆亠 仆舒舒亳于舒 ! 舒亠亳舒仍 亳 于亠 舒亰亟亠仍亠仆 仄亠仆亠 仆舒舒亳于舒 ! 亠仆亠 仗舒舒仄亠仂于 于 仄舒亠亳舒仍亠 仄亠仆亠 仆舒舒亳于舒 ! 弌仂弍仍ミ莞夷却 亰舒从仂仆 仂舒仆亠仆亳 仆亠亞亳亳 仄亠仆亠 仆舒舒亳于舒 ! 个亳亰亳亠从亳 从仂亠从仆仂 仆亠 亰仆舒亳 仂仂亠舒仍亳亳仆仂 (仄. 舒弍仂 Disney, Pixar 亳 .亟.)
  • 14. 个亳亰亳从舒 仗仂亠舒 ! 亠舒仍仆仂亶 亢亳亰仆亳 仗仂于亠仆仂 仆亠 亞仍舒亟从舒 ! 仂于亠仆仂 仂弍亠从仂于 仂仂亳 亳亰 仄仆仂亢亠于舒 仄舒仍亠仆从亳 仆亠仂于仆仂亠亶. 亅亳 仆亠仂于仆仂亳 仆舒仂仍从仂 仄舒仍亠仆从亳亠, 仂 仆亠 于亳亟仆 仆亠于仂仂亢亠仆仆仄 亞仍舒亰仂仄 ! 舒亰仄亠 仄亳从仂仆亠仂于仆仂亠亶 弍仂仍亠 亟仍亳仆 于仂仍仆 亳 仂仆亳 于仍亳ム 仆舒 仂舒亢亠仆亳亠 于亠舒 仂 仗仂于亠仆仂亳
  • 15. 仄舒亞舒 仗仂亟 仍亠从仂仆仆仄 仄亳从仂从仂仗仂仄
  • 16. 仄舒亞舒 仗仂亟 仍亠从仂仆仆仄 仄亳从仂从仂仗仂仄
  • 17. 亳从仂亞亠仂仄亠亳 仗仂于亠仆仂亳 ! 丼舒 于亠舒 仂舒亢舒亠 仂 仗仂于亠仆仂亳 ! 丼舒 仗仂仆亳从舒亠 于仆 仗仂于亠仆仂亳 亳 仗亠亠亳亰仍舒亠 亳仍亳 仗仂亞仍仂舒亠
  • 18. 亳从仂亞亠仂仄亠亳 仗仂于亠仆仂亳 ! 仂仗亠亳亠仄 仆舒 仂于仆亠 仗亳从亠仍亠亶 ! 亢仆仂 亳于舒 仂舒亢亠仆仆亶 亳 仗亠亠亳亰仍亠仆仆亶 于亠
  • 19. BRDF ! BRDF ! Bidirectional ! Reflection ! Distribution ! Function ! 丶亠仍: 舒亳舒 从仂仍亳亠于仂 仆亠亞亳亳, 亳亰仍舒亠仄仂亶 于 仂仂仆 仆舒弍仍ミ莞委亠仍, 仗亳 亰舒亟舒仆仆仂仄 于仂亟亠仄 亳亰仍亠仆亳亳 ! 亠仂亳亳, 仄仆仂亞仂仄亠仆舒 仆从亳 - 3D, 4D, 6D ! 舒 仗舒从亳从亠, 仄 弍亟亠仄 舒仄舒亳于舒 仆从亳 仂 亟于 仗舒舒仄亠仂于
  • 20. 舒亠礌仆亶 于亠 (diffuse) ! 仂亢仆仂 仗亠仆亠弍亠 仂从仂亶 于仂亟舒 亳 于仂亟舒 仍舒 ! 弌亳舒亠仄, 仂 于亠 舒亠礌仆亶 于亠 舒仗亠亟亠仍磳 舒于仆仂仄亠仆仂
  • 21. 舒亠礌仆亶 于亠 (diffuse) ! 个仆从亳 亟仍 舒亠舒 舒亠礌仆仂亞仂 于亠舒 ! l 仆舒仗舒于仍亠仆亳亠 于亠舒 ! v 仆舒仗舒于仍亠仆亳亠 于亰亞仍磲舒 (仆亠 亳仗仂仍亰亠 于 亟舒仆仆仂亶 仄仂亟亠仍亳) ! albedo 于亠从仂仆亶 仗舒舒仄亠, 从仂仂亶 仂仗亠亟亠仍磳 从仂仍从仂 仆亠亞亳亳 舒亠亳于舒亠, 舒 从仂仍从仂 仗仂亞仍仂舒亠 仄舒亠亳舒仍仂仄 ! n 仆仂仄舒仍 仗仂于亠仆仂亳 ! 亠仍亠仆亳亠 仆舒 PI 亰舒从仂仆 仂舒仆亠仆亳 仆亠亞亳亳 ! 亠仄 亳亰于亠仆亶 dot ( N, L ) ! dot ( N, L ) 仂 cos 仄亠亢亟 于亠从仂舒仄亳 N, L
  • 22. 舒亠礌仆亶 于亠 (diffuse) ! 仍仂舒亟 仗仂亠从亳亳 亰舒于亳亳 仂 亞仍舒 仗舒亟亠仆亳 ! 舒于仆舒 cos(N, L)
  • 23. 舒亠礌仆亶 于亠 (diffuse) ! 舒 仗仂于亠仆仂 仗仂仗舒亟舒亠 仄亠仆亠 仆亠亞亳亳 于 亰舒于亳亳仄仂亳 仂 亞仍舒 仗舒亟亠仆亳
  • 24. 舒亢亠仆仆亶 于亠 (specular) ! 舒亢亠仆亳亠 于亠舒 ! 舒仗舒于仍亠仆亳亠 仂舒亢亠仆亳 仄亠仆磳 亳亰-亰舒 仄亳从仂亞舒仆亠亶
  • 25. 舒亢亠仆仆亶 于亠 (specular) ! 舒亢亠仆亳亠 于亠舒 ! 亠仆亠亠 亞仍舒亟从舒 仗仂于亠仆仂
  • 26. 亳从仂亞亠仂仄亠亳 仗仂于亠仆仂亳 ! Microfacet theory ! 仂亟亠仍亳亠 仗仂于亠仆仂 从舒从 仄仆仂亢亠于仂 仄亳从仂亞舒仆亠亶 ! 舒亢亟舒 仄亳从仂亞舒仆 - 亳亟亠舒仍仆仂 仂舒亢舒ム亠亠 亰亠从舒仍仂 ! 舒仄 仆亢仆舒 仄仄舒 于从仍舒亟舒 从舒亢亟仂亶 仄亳从仂亞舒仆亳 于 仂于亠亠仆亳亠 (亳仆亠亞舒仍) ! 弌仍亳从仂仄 仄仆仂亞仂 于亳仍亠仆亳亶, 仂弍 亠亳 亳仍亠仆仆仂
  • 27. Microfacet BRDF ! 个仆从亳 亟仍 舒亠舒 仂舒亢亠仆仆仂亞仂 于亠舒 (microfacet theory) ! D 仆从亳 舒仗亠亟亠仍亠仆亳 仆仂仄舒仍亳. 仗亠亟亠仍磳, 从舒从 仄亳从仂亞舒仆亳 舒仗亠亟亠仍亠仆 于亟仂仍 仆舒仗舒于仍亠仆亳 h (仂 仂亶 仆从亳亳 仄亠仆磳 仂仄舒 弍仍亳从舒) ! F 仂仄仍舒 个亠仆亠仍 ! G 仆从亳 亰舒亠仆亠仆亳 仄亳从仂亞舒仆礆亳 亟亞 亟亞舒 ! l 仆舒仗舒于仍亠仆亳亠 于亠舒 ! v 仆舒仗舒于仍亠仆亳亠 于亰亞仍磲舒 ! n 仆仂仄舒仍 仗仂于亠仆仂亳 ! h 于亠从仂 仄亠亢亟 于亠从仂舒仄亳 l and v (half vector)
  • 28. Half vector ! Half vector, 于亠从仂 仄亠亢亟 L 亳 V ! 个亳亰亳亠从亳亶 仄仍 half vector ! 个亳仍舒亳 仄亳从仂亞舒仆亠亶, 从仂仂亠 于仆仂 于从仍舒亟 于 BRDF ! h = m 亰仆舒亳 仄亳从仂亞舒仆 仂舒亢舒亠 于亠, 于亳亟亳仄亶 仆舒弍仍ミ莞委亠仍
  • 29. Microfacet BRDF ! 个仆从亳 亟仍 舒亠舒 仂舒亢亠仆仆仂亞仂 于亠舒 (microfacet theory) ! D 仆从亳 舒仗亠亟亠仍亠仆亳 仆仂仄舒仍亳. 仗亠亟亠仍磳, 从舒从 仄亳从仂亞舒仆亳 舒仗亠亟亠仍亠仆 于亟仂仍 仆舒仗舒于仍亠仆亳 h (仂 仂亶 仆从亳亳 仄亠仆磳 仂仄舒 弍仍亳从舒) ! F 仂仄仍舒 个亠仆亠仍 ! G 仆从亳 亰舒亠仆亠仆亳 仄亳从仂亞舒仆礆亳 亟亞 亟亞舒 ! l 仆舒仗舒于仍亠仆亳亠 于亠舒 ! v 仆舒仗舒于仍亠仆亳亠 于亰亞仍磲舒 ! n 仆仂仄舒仍 仗仂于亠仆仂亳 ! h 于亠从仂 仄亠亢亟 于亠从仂舒仄亳 l and v (half vector)
  • 30. 舒仗亠亟亠仍亠仆亳亠 仄亳从仂亞舒仆亠亶 ! 弌亠仗亠仆 从仂亳仆舒 于 从舒亠于亠 仆从亳亳 舒仗亠亟亠仍亠仆亳 仄亳从仂亞舒仆亠亶 (Blinn-Phong) ! 弌亠仗亠仆 0.25 .. 65536
  • 31. Microfacet BRDF ! 个仆从亳 亟仍 舒亠舒 仂舒亢亠仆仆仂亞仂 于亠舒 (microfacet theory) ! D 仆从亳 舒仗亠亟亠仍亠仆亳 仆仂仄舒仍亳. 仗亠亟亠仍磳, 从舒从 仄亳从仂亞舒仆亳 舒仗亠亟亠仍亠仆 于亟仂仍 仆舒仗舒于仍亠仆亳 h (仂 仂亶 仆从亳亳 仄亠仆磳 仂仄舒 弍仍亳从舒) ! F 仂仄仍舒 个亠仆亠仍 ! G 仆从亳 亰舒亠仆亠仆亳 仄亳从仂亞舒仆礆亳 亟亞 亟亞舒 ! l 仆舒仗舒于仍亠仆亳亠 于亠舒 ! v 仆舒仗舒于仍亠仆亳亠 于亰亞仍磲舒 ! n 仆仂仄舒仍 仗仂于亠仆仂亳 ! h 于亠从仂 仄亠亢亟 于亠从仂舒仄亳 l and v (half vector)
  • 34. 个亠仆亠仍 ! 仗仗仂从亳仄舒亳 丿仍亳从舒 ! f0 仄仂亢仆仂 仗仂仍亳 亳亰 IOR (Index of refraction)
  • 35. 个亠仆亠仍 ! 个亠仆亠仍: 亰舒亟舒亠, 从仂仍从仂 于亠舒 弍亟亠 仗仂亞仍仂亠仆仂, 舒 从仂仍从仂 仂舒亢亠仆仂 仗仂亟 舒亰仆仄亳 亞仍舒仄亳 ! 个亳亰亳亠从亳亶 仄仍 f0: 仗仂亠仆 于亠舒, 仂舒亢亠仆仆亶 仂 仄舒亠亳舒仍舒 仗仂亟 仗礆仄 亞仍仂仄 ! 弍仆仂亠 亰仆舒亠仆亳亠 f0 亟仍 亟亳仍亠从亳从仂于 2% - 5% ! 亠舒仍仍 舒亠亳于舒ム 仄舒仍仂 于亠舒, 于 仂仆仂于仆仂仄 仂舒亢舒ム
  • 36. Microfacet BRDF ! 个仆从亳 亟仍 舒亠舒 仂舒亢亠仆仆仂亞仂 于亠舒 (microfacet theory) ! D 仆从亳 舒仗亠亟亠仍亠仆亳 仆仂仄舒仍亳. 仗亠亟亠仍磳, 从舒从 仄亳从仂亞舒仆亳 舒仗亠亟亠仍亠仆 于亟仂仍 仆舒仗舒于仍亠仆亳 h (仂 仂亶 仆从亳亳 仄亠仆磳 仂仄舒 弍仍亳从舒) ! F 仂仄仍舒 个亠仆亠仍 ! G 仆从亳 亰舒亠仆亠仆亳 仄亳从仂亞舒仆礆亳 亟亞 亟亞舒 ! l 仆舒仗舒于仍亠仆亳亠 于亠舒 ! v 仆舒仗舒于仍亠仆亳亠 于亰亞仍磲舒 ! n 仆仂仄舒仍 仗仂于亠仆仂亳 ! h 于亠从仂 仄亠亢亟 于亠从仂舒仄亳 l and v (half vector)
  • 37. Microfacet BRDF ! 亳仄亠 仂亞仂, 从舒从舒 舒 于亠舒 从于舒亠 仄亳从仂亞舒仆礆亳
  • 38. 亳亟亳仄仂 仄亳从仂亞舒仆亠亶 ! 仗仂仍亰亠仄 仗仂亠亶 仆从亳 于亳亟亳仄仂亳
  • 39. 舒亢亠仆仆亶 于亠 (specular) ! 个仆从亳 仂舒亢亠仆仆仂亞仂 于亠舒 ! 弌仂仂于亠于亠 normalized Blinn-Phong model
  • 40. 亰仄亠仆亠仆亳亠 仗舒舒仄亠仂于 ! 亰仄亠仆亠仆亳亠 F0 ( IOR ) ! 亰仄亠仆亠仆亳亠 亠仂仂于舒仂亳
  • 41. 弌仂舒仆亠仆亳亠 仆亠亞亳亳 ! 舒从仂仆 仂舒仆亠仆亳 仆亠亞亳亳 ! 仂仍亳亠于仂 仂舒亢亠仆仆仂亞仂 于亠舒 <= 1 ! 丐.亠. 舒亠礌仆亶 + 仂舒亢亠仆仆亶 于亠 <= 1 ! 亰 仂亞仂 仍亠亟亠: 从仂 亳 仗仍仂舒亟 弍仍亳从舒 仂 亳仂仆亳从舒 于亠舒 于磶舒仆
  • 47. 仆亠仆亳于仆仂 于亠舒 ! 仆亠仆亳于仆仂 于亠舒 仂弍舒仆仂 仗仂仗仂亳仂仆舒仍仆舒 从于舒亟舒 舒仂礌亳 亟仂 亳仂仆亳从舒 于亠舒 ! 丱仂仂仂 仗仂亟仂亟亳 亟仍 仂亠仆 亳仂仆亳从仂于, 仆亠 亳仄亠ム亳 仂弍亠仄舒 ! 仂亳仄 亳仂仆亳从 于亠舒, 从仂仂仂亞仂 亠 舒亰仄亠 (area light) ! 弌亠仄亳 从 仆仍, 仆仂 仆亳从仂亞亟舒 亠亞仂 仆亠 亟仂亳亞舒亠
  • 48. 仆亠仆亳于仆仂 于亠舒 ! 亢仆仂 亠 亟于舒 舒亟亳舒 ! Rinner 舒亰仄亠 亳仂仆亳从舒 ! Router 亟亳舒仆亳, 仆舒 从仂仂仂亶 于从仍舒亟仂仄 于 仂于亠亠仆亳亠 仄仂亢仆仂 仗亠仆亠弍亠
  • 49. 仆亠仆亳于仆仂 于亠舒 ! 舒舒 仆从亳 亰舒舒仆亳 ! 仂仆舒仆舒 于仆亳 Rinner ! 舒 亟亳舒仆亳亳 Router 舒于仆舒 0 float GetAttenuation(float distance, float lightInnerR, float invLightOuterR) { float d = max(distance, lightInnerR); return saturate(1.0 - pow(d * invLightOuterR, 4.0)) / (d * d + 1.0); }
  • 50. 仆亠仆亳于仆仂 于亠舒 ! 舒亳从 亰舒舒仆亳 于亠舒
  • 51. 仂亟亠仍 仄舒亠亳舒仍舒 ! 仂亟亠仍 仄舒亠亳舒仍舒 ! Base color ! Albedo 亟仍 亟亳仍亠从亳从舒 ! 亠从仂仆舒 舒 F0 亟仍 仗仂于仂亟仆亳从舒 ! Normal (仆仂仄舒仍 仗仂于亠仆仂亳, 仄舒从仂) ! Roughness (亠仂仂于舒仂 仗仂于亠仆仂亳, 仄亳从仂) ! Fresnel F0 (仗舒从亳亠从亳 于亠亞亟舒 从仂仆舒仆舒 亟仍 亟亳仍亠从亳从舒, 从舒仍仆舒 舒 F0 亟仍 仄亠舒仍仍舒) ! Metal (仄舒从舒: 仄亠舒仍仍 亳仍亳 亟亳仍亠从亳从)
  • 53. Base color ( Albedo )
  • 54. Base color ( Albedo )
  • 57. Specular ( F0 / IOR )
  • 58. Metal
  • 66. Deferred shading ! 仍ム ! 亠仂仄亠亳 仂亟亠仍亠仆舒 仂 仂于亠亠仆亳 ! 仆仂亞仂 亳仂仆亳从仂于 于亠舒 ! 亠 从仂仄弍亳仆舒仂仆仂亞仂 于亰于舒 于 亠亶亟亠舒 ! 亳仆 ! Bandwidth ! 仂仆亳从亳 于亠舒 亠仆礆亳 仗仂-仗亠亢仆亠仄 亟仂仂亞亳亠 ! 弌仍仂亢仆仂 舒亰仆仄亳 BRDF ! 仂亟亟亠亢从舒 仗仂亰舒仆仂亳
  • 67. Deferred shading ! Skyforge Gbuffer layout (2xRGBA8, 1xRGB10A2, 1xD24S8) ! 96 bits + 24 bits + 8 bits = 128 bits per pixel
  • 76. 亠亰 仍仂从舒仍仆仂亞仂 仂于亠亠仆亳 亳 于仂仍ミ斜却亳从仂于
  • 79. 亠从仂仆从亳 仗仂亰亳亳亳 ! 仍亞仂亳仄舒仄 仂于亠亠仆亳 仆亢仆舒 仗仂亰亳亳 ! world space ! shadow space ! view space ! 亳 .亟. ! Gbuffer 舒仆亳 仂仍从仂 亞仍弍亳仆舒 ! 亳仗仂仍亰亠仄 INTZ (DX9) ! 亞亳仗亠弍仂仍亳亠从仂亠 舒仗亠亟亠仍亠仆亳亠 " ! 亢仆舒 亠从仂仆从亳 仗仂亰亳亳亳 亳亰 亞仍弍亳仆
  • 80. 亠从仂仆从亳 仗仂亰亳亳亳 ! 亠仂弍舒亰亠仄 depth 弍亠 于 仍亳仆亠亶仆亶 ! INTZ 于 R32F ! 弌舒亰 仗仂仍亠 亰舒仗仂仍仆亠仆亳 Gbuffer // 个仆从亳 亟仍 仗亠仂弍舒亰仂于舒仆亳 亞仍弍亳仆 亞亳仗亠弍仂仍亳亠从亳仄 舒仗亠亟亠仍亠仆亳亠仄 于 仍亳仆亠亶仆 float ConvertHyperbolicDepthToLinear(float hyperbolicDepth) { return ((zNear / (zNear-zFar)) * zFar) / (hyperbolicDepth - (zFar / (zFar-zNear))); }
  • 81. 仂亟仂弍亳亠 亠亞仂仍仆亳从仂于 ! 丐亠亞仂仍仆亳从 P1, P2, P3 仗仂亟仂弍亠仆 亠亞仂仍仆亳从 P1, P4, P5
  • 82. 仂亟仂弍亳亠 亠亞仂仍仆亳从仂于 ! 丐亠亞仂仍仆亳从 P1, P2, P3
  • 83. 仂亟仂弍亳亠 亠亞仂仍仆亳从仂于 ! 丐亠亞仂仍仆亳从 P1, P4, P5
  • 84. 亠从仂仆从亳 仗仂亰亳亳亳 ! 亠亳仆仆亶 亠亶亟亠 ! 弌亳舒亠仄 亠亞仂仍仆亳从 P1, P2, P3 于 于亠亳仆仆仂仄 亠亶亟亠亠 ! 亠亠亟舒亠仄 仂亠亰仂从 P1, P3 于 仗亳从亠仍仆亶 亠亶亟亠 ! 亳从亠仍仆亶 亠亶亟亠 ! 仂仍舒亠仄 亳仆亠仗仂仍亳仂于舒仆仆亶 于亠从仂 P1,P3 (rayDir) 亠亠亰 亳仆亠仗仂仍仂 ! 弌亳于舒亠仄 仍亳仆亠亶仆 亞仍弍亳仆 ! position = cameraPosition + rayDir * linearDepth ! 亠仆 弍仂: mad + 亳仆亠仗仂仍仂 ! 仂亢仆仂 亠从仂仆亳仂于舒 仗仂亰亳亳 于 仍ミ頴笑 亟仂弍仆仂仄 仗仂舒仆于亠. world, view, shadow 亳 .亟. ! HLSL 从仂亟 于 弍仂仆 仍舒亶亟舒
  • 90. Reversed Depth Buffer ! Reversed depth buffer near = 1 far = 0 ! 舒弍仂舒亠 fixed point depth, 仂仄舒 D24S8 ! 亢仆仂 亳仆于亠亳仂于舒 D3DRS_ZFUNC D3DCMP_GREATEREQUAL ! 亠亞亟舒 亳仆于亠亳亶亠 仄舒亳 仗仂亠从亳亳 亠从仂亠从仆仂 亳仆于亠亳仂于舒 仆舒 舒亟亳亳 viewport舒 亳仍亳 于 亠亶亟亠亠
  • 92. 舒亳舒 仗仂亠从亳亳 ! 舒从 仗仂仍舒亠 亞仍弍亳仆舒? ! float4 p = mul( float4( pos, 1 ), mtxProjection ); ! float depth = p.z / p.w;
  • 93. 弌舒于仆亠仆亳亠 仄亠仂亟仂于 ! Z near = 0.5 ! Z far = 50000.0
  • 94. 弌舒于仆亠仆亳亠 仄亠仂亟仂于 ! 弌舒仆亟舒仆亶 仄亠仂亟 ! Reversed depth buffer
  • 95. 弌舒于仆亠仆亳亠 仄亠仂亟仂于 ! 弌舒仆亟舒仆亶 仄亠仂亟 ! Reversed depth buffer
  • 96. Numeric error 舒仆亟舒仆亶 仄亠仂亟
  • 97. Numeric error reversed depth buffer
  • 98. Numeric error reversed depth buffer
  • 99. Reversed depth buffer : 于于仂亟 ! D24 仍亠亞从仂 仗仂从于舒亠 亟舒仍仆仂 于 50 从仄 ! Reverse depth 仗仂亟仂亟亳 亟仍 仍ミ頴笑覚 亟于亳亢从舒 ! 亠 亰舒从仍舒亟于舒 舒仄仂亞仂 仆舒舒仍舒 仗仂亠从舒 ! 亰于仍亠亠仆亳亠 仗仍仂从仂亠亶 仄舒 亳亰 仄舒亳 ! Bias 亠仆亠亶 ! 亳 .亟. ! 亳 于仂亰仄仂亢仆仂亳 亳仗仂仍亰亶亠 float depth 弍亠
  • 100. 舒从仍ム亠仆亳亠 ! Nextgen 亞舒亳从舒 于 MMO 亢亠 亠舒仍仆仂 ! 亠 仄亠仆亠 仂仍亳亳亶 仂 从仂仆仂仍仆 舒亶仍仂于 ! 个亳亰亳仆亶 亠亶亟亳仆亞 仗仂舒亠 仗仂亳亰于仂亟于仂 从仂仆亠仆舒 ! 舒仄 仆亢仆 亞舒亳亠从亳亠 仗仂亞舒仄仄亳 !
  • 101. 弌弌 ! 弌乘? s.makeev@corp.mail.ru
  • 102. Bonus
  • 103. 亠从仂仆从亳 仗仂亰亳亳亳: Vertex shader // 丼舒 仄舒亳 仗仂亠从亳亳 float tanHalfVerticalFov; // invProjection.11; float tanHalfHorizontalFov; // invProjection.00; // 舒亰亳 从舒仄亠 于 仗仂舒仆于亠 亠从仂仆从亳亳 float3 camBasisUp; float3 camBasisSide; float3 camBasisFront; // postProjectiveSpacePosition 于 homogeneous projection space float3 CreateRay(float4 postProjectiveSpacePosition) { float3 leftRight = camBasisSide * -postProjectiveSpacePosition.x * tanHalfHorizontalFov; float3 upDown = camBasisUp * postProjectiveSpacePosition.y * tanHalfVerticalFov; float3 forward = camBasisFront; return (forward + leftRight + upDown); } void VertexShader(float4 inPos, out float4 outPos : POSITION, out float3 rayDir : TEXCOORD0) { outPos = inPos; rayDir = CreateRay(inPos); }
  • 104. 亠从仂仆从亳 仗仂亰亳亳亳: Pixel shader // 仂亰亳亳 从舒仄亠 于 仗仂舒仆于亠 亠从仂仆从亳亳 float3 camPosition; float4 PixelShader(float3 rayDir : TEXCOORD0) : COLOR0 { ... float linearDepth = tex2D(linearDepthSampler, uv).r; float3 position = camPosition + rayDir * linearDepth; ... } // 个仆从亳 亟仍 仗亠仂弍舒亰仂于舒仆亳 亞仍弍亳仆 亞亳仗亠弍仂仍亳亠从亳仄 舒仗亠亟亠仍亠仆亳亠仄 于 仍亳仆亠亶仆 float ConvertHyperbolicDepthToLinear(float hyperbolicDepth) { return ((zNear / (zNear-zFar)) * zFar) / (hyperbolicDepth - (zFar / (zFar-zNear))); }