Enviar pesquisa
Carregar
Hable John Uncharted2 Hdr Lighting
•
Transferir como PPTX, PDF
•
82 gostaram
•
64,295 visualizações
O
ozlael ozlael
Seguir
http://ozlael.egloos.com
Leia menos
Leia mais
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 313
Baixar agora
Recomendados
D2 Hdr
D2 Hdr
Youpyo Choi
Graphics Gems from CryENGINE 3 (Siggraph 2013)
Graphics Gems from CryENGINE 3 (Siggraph 2013)
Tiago Sousa
Ndc11 이창희_hdr
Ndc11 이창희_hdr
changehee lee
Screen Space Reflections in The Surge
Screen Space Reflections in The Surge
Michele Giacalone
A Bit More Deferred Cry Engine3
A Bit More Deferred Cry Engine3
guest11b095
Lighting Shading by John Hable
Lighting Shading by John Hable
Naughty Dog
Penner pre-integrated skin rendering (siggraph 2011 advances in real-time r...
Penner pre-integrated skin rendering (siggraph 2011 advances in real-time r...
JP Lee
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
MinGeun Park
Recomendados
D2 Hdr
D2 Hdr
Youpyo Choi
Graphics Gems from CryENGINE 3 (Siggraph 2013)
Graphics Gems from CryENGINE 3 (Siggraph 2013)
Tiago Sousa
Ndc11 이창희_hdr
Ndc11 이창희_hdr
changehee lee
Screen Space Reflections in The Surge
Screen Space Reflections in The Surge
Michele Giacalone
A Bit More Deferred Cry Engine3
A Bit More Deferred Cry Engine3
guest11b095
Lighting Shading by John Hable
Lighting Shading by John Hable
Naughty Dog
Penner pre-integrated skin rendering (siggraph 2011 advances in real-time r...
Penner pre-integrated skin rendering (siggraph 2011 advances in real-time r...
JP Lee
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
[Ndc12] 누구나 알기쉬운 hdr과 톤맵핑 박민근
MinGeun Park
Bindless Deferred Decals in The Surge 2
Bindless Deferred Decals in The Surge 2
Philip Hammer
Physically Based and Unified Volumetric Rendering in Frostbite
Physically Based and Unified Volumetric Rendering in Frostbite
Electronic Arts / DICE
Five Rendering Ideas from Battlefield 3 & Need For Speed: The Run
Five Rendering Ideas from Battlefield 3 & Need For Speed: The Run
Electronic Arts / DICE
DirectX 11 Rendering in Battlefield 3
DirectX 11 Rendering in Battlefield 3
Electronic Arts / DICE
Frostbite on Mobile
Frostbite on Mobile
Electronic Arts / DICE
Motion blur
Motion blur
changehee lee
【Unite Tokyo 2019】Unityプログレッシブライトマッパー2019
【Unite Tokyo 2019】Unityプログレッシブライトマッパー2019
UnityTechnologiesJapan002
Lighting the City of Glass
Lighting the City of Glass
Electronic Arts / DICE
The Rendering Technology of 'Lords of the Fallen' (Game Connection Europe 2014)
The Rendering Technology of 'Lords of the Fallen' (Game Connection Europe 2014)
Philip Hammer
Stochastic Screen-Space Reflections
Stochastic Screen-Space Reflections
Electronic Arts / DICE
Rendering Technologies from Crysis 3 (GDC 2013)
Rendering Technologies from Crysis 3 (GDC 2013)
Tiago Sousa
An introduction to Realistic Ocean Rendering through FFT - Fabio Suriano - Co...
An introduction to Realistic Ocean Rendering through FFT - Fabio Suriano - Co...
Codemotion
Filmic Tonemapping for Real-time Rendering - Siggraph 2010 Color Course
Filmic Tonemapping for Real-time Rendering - Siggraph 2010 Color Course
hpduiker
Frostbite Rendering Architecture and Real-time Procedural Shading & Texturing...
Frostbite Rendering Architecture and Real-time Procedural Shading & Texturing...
Johan Andersson
Moving Frostbite to Physically Based Rendering
Moving Frostbite to Physically Based Rendering
Electronic Arts / DICE
Secrets of CryENGINE 3 Graphics Technology
Secrets of CryENGINE 3 Graphics Technology
Tiago Sousa
4K Checkerboard in Battlefield 1 and Mass Effect Andromeda
4K Checkerboard in Battlefield 1 and Mass Effect Andromeda
Electronic Arts / DICE
High Dynamic Range color grading and display in Frostbite
High Dynamic Range color grading and display in Frostbite
Electronic Arts / DICE
Volumetric Lighting for Many Lights in Lords of the Fallen
Volumetric Lighting for Many Lights in Lords of the Fallen
Benjamin Glatzel
Star Ocean 4 - Flexible Shader Managment and Post-processing
Star Ocean 4 - Flexible Shader Managment and Post-processing
umsl snfrzb
Hdr Meets Black And White 2
Hdr Meets Black And White 2
Francesco Carucci
A Bizarre Way to do Real-Time Lighting
A Bizarre Way to do Real-Time Lighting
Steven Tovey
Mais conteúdo relacionado
Mais procurados
Bindless Deferred Decals in The Surge 2
Bindless Deferred Decals in The Surge 2
Philip Hammer
Physically Based and Unified Volumetric Rendering in Frostbite
Physically Based and Unified Volumetric Rendering in Frostbite
Electronic Arts / DICE
Five Rendering Ideas from Battlefield 3 & Need For Speed: The Run
Five Rendering Ideas from Battlefield 3 & Need For Speed: The Run
Electronic Arts / DICE
DirectX 11 Rendering in Battlefield 3
DirectX 11 Rendering in Battlefield 3
Electronic Arts / DICE
Frostbite on Mobile
Frostbite on Mobile
Electronic Arts / DICE
Motion blur
Motion blur
changehee lee
【Unite Tokyo 2019】Unityプログレッシブライトマッパー2019
【Unite Tokyo 2019】Unityプログレッシブライトマッパー2019
UnityTechnologiesJapan002
Lighting the City of Glass
Lighting the City of Glass
Electronic Arts / DICE
The Rendering Technology of 'Lords of the Fallen' (Game Connection Europe 2014)
The Rendering Technology of 'Lords of the Fallen' (Game Connection Europe 2014)
Philip Hammer
Stochastic Screen-Space Reflections
Stochastic Screen-Space Reflections
Electronic Arts / DICE
Rendering Technologies from Crysis 3 (GDC 2013)
Rendering Technologies from Crysis 3 (GDC 2013)
Tiago Sousa
An introduction to Realistic Ocean Rendering through FFT - Fabio Suriano - Co...
An introduction to Realistic Ocean Rendering through FFT - Fabio Suriano - Co...
Codemotion
Filmic Tonemapping for Real-time Rendering - Siggraph 2010 Color Course
Filmic Tonemapping for Real-time Rendering - Siggraph 2010 Color Course
hpduiker
Frostbite Rendering Architecture and Real-time Procedural Shading & Texturing...
Frostbite Rendering Architecture and Real-time Procedural Shading & Texturing...
Johan Andersson
Moving Frostbite to Physically Based Rendering
Moving Frostbite to Physically Based Rendering
Electronic Arts / DICE
Secrets of CryENGINE 3 Graphics Technology
Secrets of CryENGINE 3 Graphics Technology
Tiago Sousa
4K Checkerboard in Battlefield 1 and Mass Effect Andromeda
4K Checkerboard in Battlefield 1 and Mass Effect Andromeda
Electronic Arts / DICE
High Dynamic Range color grading and display in Frostbite
High Dynamic Range color grading and display in Frostbite
Electronic Arts / DICE
Volumetric Lighting for Many Lights in Lords of the Fallen
Volumetric Lighting for Many Lights in Lords of the Fallen
Benjamin Glatzel
Star Ocean 4 - Flexible Shader Managment and Post-processing
Star Ocean 4 - Flexible Shader Managment and Post-processing
umsl snfrzb
Mais procurados
(20)
Bindless Deferred Decals in The Surge 2
Bindless Deferred Decals in The Surge 2
Physically Based and Unified Volumetric Rendering in Frostbite
Physically Based and Unified Volumetric Rendering in Frostbite
Five Rendering Ideas from Battlefield 3 & Need For Speed: The Run
Five Rendering Ideas from Battlefield 3 & Need For Speed: The Run
DirectX 11 Rendering in Battlefield 3
DirectX 11 Rendering in Battlefield 3
Frostbite on Mobile
Frostbite on Mobile
Motion blur
Motion blur
【Unite Tokyo 2019】Unityプログレッシブライトマッパー2019
【Unite Tokyo 2019】Unityプログレッシブライトマッパー2019
Lighting the City of Glass
Lighting the City of Glass
The Rendering Technology of 'Lords of the Fallen' (Game Connection Europe 2014)
The Rendering Technology of 'Lords of the Fallen' (Game Connection Europe 2014)
Stochastic Screen-Space Reflections
Stochastic Screen-Space Reflections
Rendering Technologies from Crysis 3 (GDC 2013)
Rendering Technologies from Crysis 3 (GDC 2013)
An introduction to Realistic Ocean Rendering through FFT - Fabio Suriano - Co...
An introduction to Realistic Ocean Rendering through FFT - Fabio Suriano - Co...
Filmic Tonemapping for Real-time Rendering - Siggraph 2010 Color Course
Filmic Tonemapping for Real-time Rendering - Siggraph 2010 Color Course
Frostbite Rendering Architecture and Real-time Procedural Shading & Texturing...
Frostbite Rendering Architecture and Real-time Procedural Shading & Texturing...
Moving Frostbite to Physically Based Rendering
Moving Frostbite to Physically Based Rendering
Secrets of CryENGINE 3 Graphics Technology
Secrets of CryENGINE 3 Graphics Technology
4K Checkerboard in Battlefield 1 and Mass Effect Andromeda
4K Checkerboard in Battlefield 1 and Mass Effect Andromeda
High Dynamic Range color grading and display in Frostbite
High Dynamic Range color grading and display in Frostbite
Volumetric Lighting for Many Lights in Lords of the Fallen
Volumetric Lighting for Many Lights in Lords of the Fallen
Star Ocean 4 - Flexible Shader Managment and Post-processing
Star Ocean 4 - Flexible Shader Managment and Post-processing
Semelhante a Hable John Uncharted2 Hdr Lighting
Hdr Meets Black And White 2
Hdr Meets Black And White 2
Francesco Carucci
A Bizarre Way to do Real-Time Lighting
A Bizarre Way to do Real-Time Lighting
Steven Tovey
CS 354 Understanding Color
CS 354 Understanding Color
Mark Kilgard
Computer Graphics Part1
Computer Graphics Part1
qpqpqp
Analyzing color imaging failure on consumer-grade cameras
Analyzing color imaging failure on consumer-grade cameras
SaiTedla1
“CMOS Image Sensors: A Guide to Building the Eyes of a Vision System,” a Pres...
“CMOS Image Sensors: A Guide to Building the Eyes of a Vision System,” a Pres...
Edge AI and Vision Alliance
Shooting High Dynamic Range
Shooting High Dynamic Range
Jessica Young
Real-time Shadowing Techniques: Shadow Volumes
Real-time Shadowing Techniques: Shadow Volumes
Mark Kilgard
Hdr magic
Hdr magic
SunRidge Photo
Deferred shading
Deferred shading
Frank Chao
Scratch a pixel - Reflection
Scratch a pixel - Reflection
Yiwei Gong
new_age_graphics_android_x86
new_age_graphics_android_x86
Droidcon Berlin
Image processing Presentation
Image processing Presentation
Valia koonambaikulathamma college of engineering and technology
HPG 2018 - Game Ray Tracing: State-of-the-Art and Open Problems
HPG 2018 - Game Ray Tracing: State-of-the-Art and Open Problems
Electronic Arts / DICE
Unity: Next Level Rendering Quality
Unity: Next Level Rendering Quality
Unity Technologies
Rendering basics
Rendering basics
icedmaster
Crysis 2-key-rendering-features
Crysis 2-key-rendering-features
Raimundo Renato
Chapter01 (2)
Chapter01 (2)
shabanam tamboli
A Practical and Robust Bump-mapping Technique for Today’s GPUs (slides)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (slides)
Mark Kilgard
COM2304: Intensity Transformation and Spatial Filtering – I (Intensity Transf...
COM2304: Intensity Transformation and Spatial Filtering – I (Intensity Transf...
Hemantha Kulathilake
Semelhante a Hable John Uncharted2 Hdr Lighting
(20)
Hdr Meets Black And White 2
Hdr Meets Black And White 2
A Bizarre Way to do Real-Time Lighting
A Bizarre Way to do Real-Time Lighting
CS 354 Understanding Color
CS 354 Understanding Color
Computer Graphics Part1
Computer Graphics Part1
Analyzing color imaging failure on consumer-grade cameras
Analyzing color imaging failure on consumer-grade cameras
“CMOS Image Sensors: A Guide to Building the Eyes of a Vision System,” a Pres...
“CMOS Image Sensors: A Guide to Building the Eyes of a Vision System,” a Pres...
Shooting High Dynamic Range
Shooting High Dynamic Range
Real-time Shadowing Techniques: Shadow Volumes
Real-time Shadowing Techniques: Shadow Volumes
Hdr magic
Hdr magic
Deferred shading
Deferred shading
Scratch a pixel - Reflection
Scratch a pixel - Reflection
new_age_graphics_android_x86
new_age_graphics_android_x86
Image processing Presentation
Image processing Presentation
HPG 2018 - Game Ray Tracing: State-of-the-Art and Open Problems
HPG 2018 - Game Ray Tracing: State-of-the-Art and Open Problems
Unity: Next Level Rendering Quality
Unity: Next Level Rendering Quality
Rendering basics
Rendering basics
Crysis 2-key-rendering-features
Crysis 2-key-rendering-features
Chapter01 (2)
Chapter01 (2)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (slides)
A Practical and Robust Bump-mapping Technique for Today’s GPUs (slides)
COM2304: Intensity Transformation and Spatial Filtering – I (Intensity Transf...
COM2304: Intensity Transformation and Spatial Filtering – I (Intensity Transf...
Mais de ozlael ozlael
Unity & VR (Unity Roadshow 2016)
Unity & VR (Unity Roadshow 2016)
ozlael ozlael
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
ozlael ozlael
Optimizing mobile applications - Ian Dundore, Mark Harkness
Optimizing mobile applications - Ian Dundore, Mark Harkness
ozlael ozlael
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
ozlael ozlael
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.
ozlael ozlael
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
ozlael ozlael
Infinity Blade and beyond
Infinity Blade and beyond
ozlael ozlael
스티브잡스처럼 프레젠테이션하기
스티브잡스처럼 프레젠테이션하기
ozlael ozlael
유니티의 라이팅이 안 이쁘다구요? (A to Z of Lighting)
유니티의 라이팅이 안 이쁘다구요? (A to Z of Lighting)
ozlael ozlael
Introduce coco2dx with cookingstar
Introduce coco2dx with cookingstar
ozlael ozlael
Deferred rendering case study
Deferred rendering case study
ozlael ozlael
Kgc make stereo game on pc
Kgc make stereo game on pc
ozlael ozlael
mssao presentation
mssao presentation
ozlael ozlael
Modern gpu optimize blog
Modern gpu optimize blog
ozlael ozlael
Modern gpu optimize
Modern gpu optimize
ozlael ozlael
Bickerstaff benson making3d games on the playstation3
Bickerstaff benson making3d games on the playstation3
ozlael ozlael
DOF Depth of Field
DOF Depth of Field
ozlael ozlael
Hable uncharted2(siggraph%202010%20 advanced%20realtime%20rendering%20course)
Hable uncharted2(siggraph%202010%20 advanced%20realtime%20rendering%20course)
ozlael ozlael
Deferred rendering in_leadwerks_engine[1]
Deferred rendering in_leadwerks_engine[1]
ozlael ozlael
Deferred shading
Deferred shading
ozlael ozlael
Mais de ozlael ozlael
(20)
Unity & VR (Unity Roadshow 2016)
Unity & VR (Unity Roadshow 2016)
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
뭣이 중헌디? 성능 프로파일링도 모름서 - 유니티 성능 프로파일링 가이드 (IGC16)
Optimizing mobile applications - Ian Dundore, Mark Harkness
Optimizing mobile applications - Ian Dundore, Mark Harkness
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) Unite Seoul Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
유니티 그래픽 최적화, 어디까지 해봤니 (Optimizing Unity Graphics) NDC15 Ver.
Infinity Blade and beyond
Infinity Blade and beyond
스티브잡스처럼 프레젠테이션하기
스티브잡스처럼 프레젠테이션하기
유니티의 라이팅이 안 이쁘다구요? (A to Z of Lighting)
유니티의 라이팅이 안 이쁘다구요? (A to Z of Lighting)
Introduce coco2dx with cookingstar
Introduce coco2dx with cookingstar
Deferred rendering case study
Deferred rendering case study
Kgc make stereo game on pc
Kgc make stereo game on pc
mssao presentation
mssao presentation
Modern gpu optimize blog
Modern gpu optimize blog
Modern gpu optimize
Modern gpu optimize
Bickerstaff benson making3d games on the playstation3
Bickerstaff benson making3d games on the playstation3
DOF Depth of Field
DOF Depth of Field
Hable uncharted2(siggraph%202010%20 advanced%20realtime%20rendering%20course)
Hable uncharted2(siggraph%202010%20 advanced%20realtime%20rendering%20course)
Deferred rendering in_leadwerks_engine[1]
Deferred rendering in_leadwerks_engine[1]
Deferred shading
Deferred shading
Hable John Uncharted2 Hdr Lighting
1.
Uncharted 2: HDR
Lighting John Hable Naughty Dog
2.
Agenda Gamma/Linear-Space Lighting
Filmic Tonemapping SSAO Rendering Architecture/How it all fits together.
3.
4.
Ucap Project
5.
I.e. Tiger Woods's
Face
6.
Also used to
work for EA Los Angeles
7.
LMNO (Spielberg Project)
8.
Not PQRS (Boom
Blox)
9.
Now at Naughty
Dog
10.
11.
12.
Never heard about
it in college
13.
George Borshukov taught
it to me back at EA
14.
Matrix Sequels
15.
Issue is getting
more traction now
16.
17.
Suppose we show
alternating light/dark lines.
18.
19.
20.
That’s the box
on the top.128
21.
22.
WTF?128 187
23.
24.
25.
26.
27.
28.
So if you
output the left image to the framebuffer, it will actually look like the one right.2.2
29.
30.
31.
32.
This is stored
on your hard drive.
33.
You never see
this image, but it’s on your hard drive.2.2
34.
35.
36.
37.
On a scale
from 0-255
38.
0 would equal
0
39.
1 would equal
our current value of 20
40.
2 would equal
our current value of 28
41.
3 would equal
our current value of 33
42.
43.
44.
45.
color = pow(
tex2D( Sampler, Uv ), 2.2 )
46.
Do your lighting
calculations
47.
Account for gamma
on color output
48.
49.
50.
51.
52.
Hardware does sampling
for free
53.
For Texture read:
54.
D3DSAMP_SRGBTEXTURE
55.
For RenderTarget write:
56.
57.
58.
59.
60.
Gamma-Space
61.
Use sRGB hardware
or pow(2.2) on read
62.
128 ~= 0.2
63.
Linear-Space
64.
Don’t use sRGB
or pow(2.2) on read
65.
66.
Definitely Gamma
67.
Normal Map
68.
69.
Uncharted 2 had
them as Linear
70.
Artists have trouble
tweaking them to look right
71.
72.
Technically, it’s a
mathematical value like a normal map.
73.
But artists tweak
them a lot and bake extra lighting into them.
74.
Uncharted 2 had
them as Linear
75.
76.
sRGB: PC and
PS3 gamma
77.
78.
Way too bright
at the low end.
79.
HDR the Bungie
Way, Chris Tchou
80.
Post Processing in
The Orange Box, Alex Vlachos
81.
Output curve is
extra contrasty
82.
Henry LaBounta was
going to talk about it.
83.
Try hooking up
your Xenon to a waveform monitor and display a test pattern. Prepare to be mortified.
84.
85.
Part 2: Filmic
Tonemaping
86.
87.
Full Auto settings.
88.
Outside blown out.
89.
Cello case looks
empty.
90.
91.
Note: 1 F-Stop
is a power of two
92.
93.
Good News: HDR
Image
94.
Bad News: Now
what?
95.
96.
Photomatix
97.
This one is
local
98.
99.
Simulate the Iris
100.
Dynamic Range in
different shots
101.
Tunnel vs. Daylight
102.
Simulate the Retina
103.
Different Range within
a shot
104.
105.
Within a Shot
– HDR Tonemapping
106.
Different Shots –
Choosing the correct exposure?
107.
Video Games
108.
Within a Shot
– HDR Tonemapping
109.
110.
Within a Shot
– HDR Tonemapping
111.
Different Shots
112.
Automatic Exposure Adjustment
113.
114.
Creative Director, Microsoft
Game Studios
115.
116.
Simplest version is:
117.
F(x) = x/(x+1)
118.
119.
The crisper, more
saturated blacks of improper gamma.
120.
The nice soft
highlights of Reinhard
121.
122.
CG Supervisor at
Digital Domain
123.
124.
125.
126.
Film vs. Digital
purists.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
Filmic > Linear
> Reinhard
138.
In terms of
“Soft Highights” vs. “Clamped Highlights”
139.
140.
What happens if
we go down?
141.
142.
143.
144.
Three texture lookups
145.
146.
Replaces the entire
Lin/Log and Texture LUT
147.
Includes the pow(x,1/2.2)x
= max(0, LinearColor-0.004); GammaColor = (x*(6.2*x+0.5))/(x*(6.2*x+1.7)+0.06);
148.
149.
Toe arguably too
strong
150.
Most monitors are
too contrasty, strong toe makes it worse
151.
May want less
shoulder
152.
The more range,
the more shoulder
153.
154.
Filmic Tonemapping Shoulder
Strength = 0.22 Linear Strength = 0.30 Linear Angle = 0.10 Toe Strength = 0.20 Toe Numerator = 0.01 Toe Denominator = 0.30 Linear White Point Value = 11.2 These numbers DO NOT have the pow(x,1/2.2) baked in
155.
156.
IMO: The most
important post effect
157.
Changes your life
completely
158.
Once you have
it, you can't live without it
159.
If you implement
it, you have to redo all your lighting
160.
161.
Part 3: SSAO
162.
163.
Time for stage
3.
164.
165.
But if you
are already in shadow, you need something else...
166.
It's the AO
that grounds the car in those shots.
167.
So what if
we took the AO out?
168.
169.
170.
171.
172.
173.
How to use
AO?
174.
How to use
AO?
175.
How to use
AO?
176.
How to use
AO?
177.
Sunlight Q) Why
not have it affect sunlight? A) It does the exact opposite of what you want it to do.
178.
179.
SSAO Darkens Sunlight
– BAD
180.
Reduces perceived contrast
181.
Makes lighting look
flatter
182.
183.
No normals
184.
No special filtering
(I.e. Bilateral)
185.
Processed in 64x64
blocks
186.
187.
Dilate Horizontal
188.
Dilate Vertical
189.
190.
SSAO Passes 1)
Base SSAO
191.
SSAO Passes 2)
Dilate Horizontal
192.
SSAO Passes 3)
Dilate Vertical
193.
SSAO Passes 4)
Low Pass Filter (I.e. blur the $&%@ out of it)
194.
195.
Uses half-res depth
buffer
196.
197.
198.
199.
200.
201.
202.
203.
204.
Benefits outweigh drawbacks
205.
Have option to
turn it off per surface
206.
Most snow fades
at distance
207.
Some objects apply
sqrt() to brighten it
208.
209.
Deepens our Blacks
210.
Artifacts are not
too bad
211.
Could use better
filtering for halos
212.
213.
214.
Here is the
base overview.
215.
216.
217.
218.
219.
Say you have
5 loads to do
220.
221.
Load 1 in
Dryer
222.
Load 2 in
Washer
223.
Load 2 in
Dryer
224.
Load 3 in
Washer
225.
Load 3 in
Dryer
226.
Load 4 in
Washer
227.
Load 4 in
Dryer
228.
Load 5 in
Washer
229.
230.
Load 2 in
Washer, Load 1 in Dryer
231.
Load 3 in
Washer, Load 2 in Dryer
232.
Load 4 in
Washer, Load 3 in Dryer
233.
Load 5 in
Washer, Load 4 in Dryer
234.
235.
Called “Software Pipelining”
236.
It’s how we
optimize SPU code by hand
237.
Pal Engstad (our
Lead Graphics Programmer) will be putting a doc online explaining the full process.
238.
Should be online:
look for the post on the blog
239.
Direct links:
240.
www.naughtydog.com/docs/gdc2010/intro-spu-optimizations-part-1.pdf
241.
242.
SPU Assembly 1/2
EVEN ODD loop: {nop} {o6} lqxcurrAo, pvColor, colorOffset {nop} {o4} shufb prevAo0, currAo, currAo, s_AAAA {nop} {o4} shufb ao_n30, prevAo0, currAo, s_BCDa {nop} {o4} shufb ao_n20, prevAo0, currAo, s_CDab {nop} {o4} shufb ao_n10, prevAo0, currAo, s_Dabc {e2} selb ao_n4, ao_n4, prevAo0, endLineMask {lnop} {e2} selb ao_n3, ao_n3, ao_n30, endLineMask {lnop} {e2} selb ao_n2, ao_n2, ao_n20, endLineMask {lnop} {e2} selb ao_n1, ao_n1, ao_n10, endLineMask {lnop} {nop} {o6} lqxnextAo, pvNextColor, colorOffset {nop} {o4} shufb ao_p1, currAo, nextAo, s_BCDa {nop} {o4} shufb ao_p2, currAo, nextAo, s_CDab {nop} {o4} shufb ao_p3, currAo, nextAo, s_Dabc {e6} fa ao_n4, ao_n4, nextAo {lnop} {e6} fa ao_n3, ao_n3, ao_p3 {lnop} {e6} fa ao_n2, ao_n2, ao_p2 {lnop} {e6} fa ao_n1, ao_n1, ao_p1 {lnop}
243.
SPU Assembly 2/2
EVEN ODD {e6} fm blurAo, ao_n4, w4 {lnop} {e6} fma blurAo, ao_n3, w3, blurAo {lnop} {e6} fma blurAo, ao_n2, w2, blurAo {lnop} {e6} fma blurAo, ao_n1, w1, blurAo {lnop} {e6} fmablurAo, currAo, w0, blurAo {lnop} {nop} {o6} stqxblurAo, pvColor, colorOffset {nop} {o4} shlqbii ao_n4, currAo, 0 {nop} {o4} shlqbii ao_n3, ao_p1, 0 {nop} {o4} shlqbii ao_n2, ao_p2, 0 {nop} {o4} shlqbii ao_n1, ao_p3, 0 {e2} ceqendLineMask, colorOffset, endLineOffset {lnop} {e2} ceqendBlockMask, colorOffset, endOffset {lnop} {e2} selbendLineOffsetIncr, zero, colorLineBytes, endLineMask {lnop} {e2} selbcolorOffsetIncr, defOffsetIncr, endColorOffsetIncr, endLineMask {lnop} {e2} a endLineOffset, endLineOffset, endLineOffsetIncr {lnop} {e2} a colorOffset, colorOffset, colorOffsetIncr {lnop} {nop} branch: {o?} brzendBlockMask, loop
244.
245.
SPUs issue one
even and odd instruction per cycle
246.
One line =
One cycle
247.
e6 = even,
6 cycle latency
248.
249.
Iteration 1 loop:
nop lnop nop {o6:0} lqx currAo, pvColor, colorOffset nop {o6:0} lqx nextAo, pvNextColor, colorOffset nop {o4:0} shlqbiiendLineMask_, endLineMask, 0 nop lnop nop lnop nop lnop nop {o4:0} shufb prevAo0, currAo, currAo, s_AAAA {e2:0} ceqendLineMask, colorOffset, endLineOffset {o4:0} shufb ao_p1, currAo, nextAo, s_BCDa {e2:0} ceqendBlockMask, colorOffset_, endOffset {o4:0} shufb ao_p2, currAo, nextAo, s_CDab {e2:0} selbendLineOffsetIncr, zero, colorLineBytes, endLineMask {o4:0} shufb ao_p3, currAo, nextAo, s_Dabc {e2:0} selb ao_n4, currAo_, prevAo0, endLineMask_ {o4:0} shufb ao_n30, prevAo0, currAo, s_BCDa nop {o4:0} shufb ao_n20, prevAo0, currAo, s_CDab nop {o4:0} shufb ao_n10, prevAo0, currAo, s_Dabc {e2:0} selbcolorOffsetIncr, defOffsetIncr, endColorOffsetIncr, endLineMask lnop {e2:0} selb ao_n3, ao_p1_, ao_n30, endLineMask_ {o4:0} shufbcolorOffset_, colorOffset_, colorOffset, s_BCa0 {e2:0} selb ao_n2, ao_p2_, ao_n20, endLineMask_lnop {e2:0} selb ao_n1, ao_p3_, ao_n10, endLineMask_ lnop {e2:0} a colorOffset, colorOffset, colorOffsetIncrlnop {e2:0} a endLineOffset, endLineOffset, endLineOffsetIncrbranch: {o?:0} brzendBlockMask, loop
250.
Iteration 1 loop:
nop lnop nop {o6:0} lqx currAo, pvColor, colorOffset nop {o6:0} lqx nextAo, pvNextColor, colorOffset nop {o4:0} shlqbiiendLineMask_, endLineMask, 0 nop lnop nop lnop nop lnop nop {o4:0} shufb prevAo0, currAo, currAo, s_AAAA {e2:0} ceqendLineMask, colorOffset, endLineOffset {o4:0} shufb ao_p1, currAo, nextAo, s_BCDa {e2:0} ceqendBlockMask, colorOffset_, endOffset {o4:0} shufb ao_p2, currAo, nextAo, s_CDab {e2:0} selbendLineOffsetIncr, zero, colorLineBytes, endLineMask {o4:0} shufb ao_p3, currAo, nextAo, s_Dabc {e2:0} selb ao_n4, currAo_, prevAo0, endLineMask_ {o4:0} shufb ao_n30, prevAo0, currAo, s_BCDa nop {o4:0} shufb ao_n20, prevAo0, currAo, s_CDab nop {o4:0} shufb ao_n10, prevAo0, currAo, s_Dabc {e2:0} selbcolorOffsetIncr, defOffsetIncr, endColorOffsetIncr, endLineMask lnop {e2:0} selb ao_n3, ao_p1_, ao_n30, endLineMask_ {o4:0} shufbcolorOffset_, colorOffset_, colorOffset, s_BCa0 {e2:0} selb ao_n2, ao_p2_, ao_n20, endLineMask_lnop {e2:0} selb ao_n1, ao_p3_, ao_n10, endLineMask_ lnop {e2:0} a colorOffset, colorOffset, colorOffsetIncrlnop {e2:0} a endLineOffset, endLineOffset, endLineOffsetIncrbranch: {o?:0} brzendBlockMask, loop
251.
252.
Next instruction needs
currAo
253.
currAo won’t be
ready yet
254.
255.
Iteration 1 loop:
nop lnop nop {o6:0} lqx currAo, pvColor, colorOffset nop {o6:0} lqx nextAo, pvNextColor, colorOffset nop {o4:0} shlqbiiendLineMask_, endLineMask, 0 nop lnop nop lnop nop lnop nop {o4:0} shufb prevAo0, currAo, currAo, s_AAAA {e2:0} ceqendLineMask, colorOffset, endLineOffset {o4:0} shufb ao_p1, currAo, nextAo, s_BCDa {e2:0} ceqendBlockMask, colorOffset_, endOffset {o4:0} shufb ao_p2, currAo, nextAo, s_CDab {e2:0} selbendLineOffsetIncr, zero, colorLineBytes, endLineMask {o4:0} shufb ao_p3, currAo, nextAo, s_Dabc {e2:0} selb ao_n4, currAo_, prevAo0, endLineMask_ {o4:0} shufb ao_n30, prevAo0, currAo, s_BCDa nop {o4:0} shufb ao_n20, prevAo0, currAo, s_CDab nop {o4:0} shufb ao_n10, prevAo0, currAo, s_Dabc {e2:0} selbcolorOffsetIncr, defOffsetIncr, endColorOffsetIncr, endLineMask lnop {e2:0} selb ao_n3, ao_p1_, ao_n30, endLineMask_ {o4:0} shufbcolorOffset_, colorOffset_, colorOffset, s_BCa0 {e2:0} selb ao_n2, ao_p2_, ao_n20, endLineMask_lnop {e2:0} selb ao_n1, ao_p3_, ao_n10, endLineMask_ lnop {e2:0} a colorOffset, colorOffset, colorOffsetIncrlnop {e2:0} a endLineOffset, endLineOffset, endLineOffsetIncrbranch: {o?:0} brzendBlockMask, loop
256.
Iteration 2 loop:
nop lnop {e6:1} fa ao_n4, ao_n4, nextAo {o6:0} lqx currAo, pvColor, colorOffset {e6:1} fa ao_n3, ao_n3, ao_p3{o6:0} lqx nextAo, pvNextColor, colorOffset nop{o4:0} shlqbiiendLineMask_, endLineMask, 0 {e6:1} fa ao_n1_, ao_n1, ao_p1 lnop {e6:1} fa ao_n2_, ao_n2, ao_p2 lnop noplnop {e6:1} fm blurAo, ao_n4, w4 {o4:0} shufb prevAo0, currAo, currAo, s_AAAA {e2:0} ceqendLineMask, colorOffset, endLineOffset {o4:0} shufb ao_p1, currAo, nextAo, s_BCDa {e2:0} ceqendBlockMask, colorOffset_, endOffset {o4:0} shufb ao_p2, currAo, nextAo, s_CDab {e2:0} selbendLineOffsetIncr, zero, colorLineBytes, endLineMask {o4:0} shufb ao_p3, currAo, nextAo, s_Dabc {e2:0} selb ao_n4, currAo_, prevAo0, endLineMask_ {o4:0} shufb ao_n30, prevAo0, currAo, s_BCDa nop{o4:0} shufb ao_n20, prevAo0, currAo, s_CDab {e6:1} fma blurAo, ao_n3, w3, blurAo {o4:0} shufb ao_n10, prevAo0, currAo, s_Dabc {e2:0} selbcolorOffsetIncr, defOffsetIncr, endColorOffsetIncr, endLineMasklnop {e2:0} selb ao_n3, ao_p1_, ao_n30, endLineMask_ {o4:0} shufbcolorOffset_, colorOffset_, colorOffset, s_BCa0 {e2:0} selb ao_n2, ao_p2_, ao_n20, endLineMask_lnop {e2:0} selb ao_n1, ao_p3_, ao_n10, endLineMask_ lnop {e2:0} a colorOffset, colorOffset, colorOffsetIncrlnop {e2:0} a endLineOffset, endLineOffset, endLineOffsetIncrbranch: {o?:0} brzendBlockMask, loop
257.
Iteration 3 loop:
nop lnop {e6:1} fa ao_n4, ao_n4, nextAo {o6:0} lqx currAo, pvColor, colorOffset {e6:1} fa ao_n3, ao_n3, ao_p3{o6:0} lqx nextAo, pvNextColor, colorOffset {e6:2} fmablurAo_, ao_n2_, w2, blurAo{o4:0} shlqbiiendLineMask_, endLineMask, 0 {e6:1} fa ao_n1_, ao_n1, ao_p1 lnop {e6:1} fa ao_n2_, ao_n2, ao_p2 lnop nop lnop {e6:1} fm blurAo, ao_n4, w4 {o4:0} shufb prevAo0, currAo, currAo, s_AAAA {e2:0} ceqendLineMask, colorOffset, endLineOffset {o4:0} shufb ao_p1, currAo, nextAo, s_BCDa {e2:0} ceqendBlockMask, colorOffset_, endOffset {o4:0} shufb ao_p2, currAo, nextAo, s_CDab {e2:0} selbendLineOffsetIncr, zero, colorLineBytes, endLineMask {o4:0} shufb ao_p3, currAo, nextAo, s_Dabc {e2:0} selb ao_n4, currAo_, prevAo0, endLineMask_ {o4:0} shufb ao_n30, prevAo0, currAo, s_BCDa {e6:2} fma blurAo__, ao_n1__, w1, blurAo_{o4:0} shufb ao_n20, prevAo0, currAo, s_CDab {e6:1} fma blurAo, ao_n3, w3, blurAo {o4:0} shufb ao_n10, prevAo0, currAo, s_Dabc {e2:0} selbcolorOffsetIncr, defOffsetIncr, endColorOffsetIncr, endLineMasklnop {e2:0} selb ao_n3, ao_p1_, ao_n30, endLineMask_ {o4:0} shufbcolorOffset_, colorOffset_, colorOffset, s_BCa0 {e2:0} selb ao_n2, ao_p2_, ao_n20, endLineMask_lnop {e2:0} selb ao_n1, ao_p3_, ao_n10, endLineMask_ lnop {e2:0} a colorOffset, colorOffset, colorOffsetIncrlnop {e2:0} a endLineOffset, endLineOffset, endLineOffsetIncrbranch: {o?:0} brzendBlockMask, loop
258.
Iteration 4 loop:
nop lnop {e6:1} fa ao_n4, ao_n4, nextAo {o6:0} lqx currAo, pvColor, colorOffset {e6:1} fa ao_n3, ao_n3, ao_p3{o6:0} lqx nextAo, pvNextColor, colorOffset {e6:2} fmablurAo_, ao_n2_, w2, blurAo{o4:0} shlqbiiendLineMask_, endLineMask, 0 {e6:1} fa ao_n1_, ao_n1, ao_p1 lnop {e6:1} fa ao_n2_, ao_n2, ao_p2 lnop {e6:3} fmablurAo___, currAo___, w0, blurAo__lnop {e6:1} fm blurAo, ao_n4, w4 {o4:0} shufb prevAo0, currAo, currAo, s_AAAA {e2:0} ceqendLineMask, colorOffset, endLineOffset {o4:0} shufb ao_p1, currAo, nextAo, s_BCDa {e2:0} ceqendBlockMask, colorOffset_, endOffset {o4:0} shufb ao_p2, currAo, nextAo, s_CDab {e2:0} selbendLineOffsetIncr, zero, colorLineBytes, endLineMask {o4:0} shufb ao_p3, currAo, nextAo, s_Dabc {e2:0} selb ao_n4, currAo_, prevAo0, endLineMask_ {o4:0} shufb ao_n30, prevAo0, currAo, s_BCDa {e6:2} fma blurAo__, ao_n1__, w1, blurAo_{o4:0} shufb ao_n20, prevAo0, currAo, s_CDab {e6:1} fma blurAo, ao_n3, w3, blurAo {o4:0} shufb ao_n10, prevAo0, currAo, s_Dabc {e2:0} selbcolorOffsetIncr, defOffsetIncr, endColorOffsetIncr, endLineMask{o6:3} stqxblurAo___, pvColor, colorOffset_ {e2:0} selb ao_n3, ao_p1_, ao_n30, endLineMask_ {o4:0} shufbcolorOffset_, colorOffset_, colorOffset, s_BCa0 {e2:0} selb ao_n2, ao_p2_, ao_n20, endLineMask_lnop {e2:0} selb ao_n1, ao_p3_, ao_n10, endLineMask_ lnop {e2:0} a colorOffset, colorOffset, colorOffsetIncrlnop {e2:0} a endLineOffset, endLineOffset, endLineOffsetIncrbranch: {o?:0} brzendBlockMask, loop
259.
Copy Operations loop:
{e2:x} ai ao_n1__, ao_n1_, 0 {o4:x} shlqbii currAo_, currAo, 0 {e6:1} fa ao_n4, ao_n4, nextAo {o6:0} lqx currAo, pvColor, colorOffset {e6:1} fa ao_n3, ao_n3, ao_p3{o6:0} lqx nextAo, pvNextColor, colorOffset {e6:2} fmablurAo_, ao_n2_, w2, blurAo{o4:0} shlqbiiendLineMask_, endLineMask, 0 {e6:1} fa ao_n1_, ao_n1, ao_p1 {o4:x} shlqbii ao_p1_, ao_p1, 0 {e6:1} fa ao_n2_, ao_n2, ao_p2 {o4:x} shlqbii ao_p2_, ao_p2, 0 {e6:3} fmablurAo___, currAo___, w0, blurAo__ {o4:x} shlqbii ao_p3_, ao_p3, 0 {e6:1} fm blurAo, ao_n4, w4 {o4:0} shufb prevAo0, currAo, currAo, s_AAAA {e2:0} ceqendLineMask, colorOffset, endLineOffset {o4:0} shufb ao_p1, currAo, nextAo, s_BCDa {e2:0} ceqendBlockMask, colorOffset_, endOffset {o4:0} shufb ao_p2, currAo, nextAo, s_CDab {e2:0} selbendLineOffsetIncr, zero, colorLineBytes, endLineMask {o4:0} shufb ao_p3, currAo, nextAo, s_Dabc {e2:0} selb ao_n4, currAo_, prevAo0, endLineMask_ {o4:0} shufb ao_n30, prevAo0, currAo, s_BCDa {e6:2} fma blurAo__, ao_n1__, w1, blurAo_{o4:0} shufb ao_n20, prevAo0, currAo, s_CDab {e6:1} fma blurAo, ao_n3, w3, blurAo {o4:0} shufb ao_n10, prevAo0, currAo, s_Dabc {e2:0} selbcolorOffsetIncr, defOffsetIncr, endColorOffsetIncr, endLineMask{o6:3} stqxblurAo___, pvColor, colorOffset_ {e2:0} selb ao_n3, ao_p1_, ao_n30, endLineMask_ {o4:0} shufbcolorOffset_, colorOffset_, colorOffset, s_BCa0 {e2:0} selb ao_n2, ao_p2_, ao_n20, endLineMask_{o4:x} shlqbii currAo___, currAo__, 0 {e2:0} selb ao_n1, ao_p3_, ao_n10, endLineMask_ {o4:x} shlqbii currAo__, currAo_, 0 {e2:0} a colorOffset, colorOffset, colorOffsetIncrlnop {e2:0} a endLineOffset, endLineOffset, endLineOffsetIncrbranch: {o?:0} brzendBlockMask, loop
260.
Optimized loop: {e2:x}
ai ao_n1__, ao_n1_, 0 {o4:x} shlqbii currAo_, currAo, 0 {e6:1} fa ao_n4, ao_n4, nextAo {o6:0} lqx currAo, pvColor, colorOffset {e6:1} fa ao_n3, ao_n3, ao_p3 {o6:0} lqx nextAo, pvNextColor, colorOffset {e6:2} fmablurAo_, ao_n2_, w2, blurAo {o4:0} shlqbiiendLineMask_, endLineMask, 0 {e6:1} fa ao_n1_, ao_n1, ao_p1 {o4:x} shlqbii ao_p1_, ao_p1, 0 {e6:1} fa ao_n2_, ao_n2, ao_p2 {o4:x} shlqbii ao_p2_, ao_p2, 0 {e6:3} fmablurAo___, currAo___, w0, blurAo__ {o4:x} shlqbii ao_p3_, ao_p3, 0 {e6:1} fm blurAo, ao_n4, w4 {o4:0} shufb prevAo0, currAo, currAo, s_AAAA {e2:0} ceqendLineMask, colorOffset, endLineOffset {o4:0} shufb ao_p1, currAo, nextAo, s_BCDa {e2:0} ceqendBlockMask, colorOffset_, endOffset {o4:0} shufb ao_p2, currAo, nextAo, s_CDab {e2:0} selbendLineOffsetIncr, zero, colorLineBytes, endLineMask {o4:0} shufb ao_p3, currAo, nextAo, s_Dabc {e2:0} selb ao_n4, currAo_, prevAo0, endLineMask_ {o4:0} shufb ao_n30, prevAo0, currAo, s_BCDa {e6:2} fma blurAo__, ao_n1__, w1, blurAo_ {o4:0} shufb ao_n20, prevAo0, currAo, s_CDab {e6:1} fma blurAo, ao_n3, w3, blurAo {o4:0} shufb ao_n10, prevAo0, currAo, s_Dabc {e2:0} selbcolorOffsetIncr, defOffsetIncr, endColorOffsetIncr, endLineMask {o6:3} stqxblurAo___, pvColor, colorOffset_ {e2:0} selb ao_n3, ao_p1_, ao_n30, endLineMask_ {o4:0} shufbcolorOffset_, colorOffset_, colorOffset, s_BCa0 {e2:0} selb ao_n2, ao_p2_, ao_n20, endLineMask_ {o4:x} shlqbii currAo___, currAo__, 0 {e2:0} selb ao_n1, ao_p3_, ao_n10, endLineMask_ {o4:x} shlqbii currAo__, currAo_, 0 {e2:0} a colorOffset, colorOffset, colorOffsetIncrlnop {e2:0} a endLineOffset, endLineOffset, endLineOffsetIncr branch: {o?:0} brzendBlockMask, loop
261.
Optimized EVEN ODD
loop: {e2:x} ai ao_n1__, ao_n1_, 0 {o4:x} shlqbii currAo_, currAo, 0 {e6:1} fa ao_n4, ao_n4, nextAo {o6:0} lqx currAo, pvColor, colorOffset {e6:1} fa ao_n3, ao_n3, ao_p3 {o6:0} lqx nextAo, pvNextColor, colorOffset {e6:2} fmablurAo_, ao_n2_, w2, blurAo {o4:0} shlqbiiendLineMask_, endLineMask, 0 {e6:1} fa ao_n1_, ao_n1, ao_p1 {o4:x} shlqbii ao_p1_, ao_p1, 0 {e6:1} fa ao_n2_, ao_n2, ao_p2 {o4:x} shlqbii ao_p2_, ao_p2, 0 {e6:3} fmablurAo___, currAo___, w0, blurAo__ {o4:x} shlqbii ao_p3_, ao_p3, 0 {e6:1} fm blurAo, ao_n4, w4 {o4:0} shufb prevAo0, currAo, currAo, s_AAAA {e2:0} ceqendLineMask, colorOffset, endLineOffset {o4:0} shufb ao_p1, currAo, nextAo, s_BCDa {e2:0} ceqendBlockMask, colorOffset_, endOffset {o4:0} shufb ao_p2, currAo, nextAo, s_CDab {e2:0} selbendLineOffsetIncr, zero, colorLineBytes, endLineMask {o4:0} shufb ao_p3, currAo, nextAo, s_Dabc {e2:0} selb ao_n4, currAo_, prevAo0, endLineMask_ {o4:0} shufb ao_n30, prevAo0, currAo, s_BCDa {e6:2} fma blurAo__, ao_n1__, w1, blurAo_ {o4:0} shufb ao_n20, prevAo0, currAo, s_CDab {e6:1} fma blurAo, ao_n3, w3, blurAo {o4:0} shufb ao_n10, prevAo0, currAo, s_Dabc {e2:0} selbcolorOffsetIncr, defOffsetIncr, endColorOffsetIncr, endLineMask {o6:3} stqxblurAo___, pvColor, colorOffset_ {e2:0} selb ao_n3, ao_p1_, ao_n30, endLineMask_ {o4:0} shufbcolorOffset_, colorOffset_, colorOffset, s_BCa0 {e2:0} selb ao_n2, ao_p2_, ao_n20, endLineMask_ {o4:x} shlqbii currAo___, currAo__, 0 {e2:0} selb ao_n1, ao_p3_, ao_n10, endLineMask_ {o4:x} shlqbii currAo__, currAo_, 0 {e2:0} a colorOffset, colorOffset, colorOffsetIncrlnop {e2:0} a endLineOffset, endLineOffset, endLineOffsetIncr branch: {o?:0} brzendBlockMask, loop
262.
Optimized EVEN ODD
loop: {e2:x} ai ao_n1__, ao_n1_, 0 {o4:x} shlqbii currAo_, currAo, 0 {e6:1} fa ao_n4, ao_n4, nextAo {o6:0} lqx currAo, pvColor, colorOffset {e6:1} fa ao_n3, ao_n3, ao_p3 {o6:0} lqx nextAo, pvNextColor, colorOffset {e6:2} fmablurAo_, ao_n2_, w2, blurAo {o4:0} shlqbiiendLineMask_, endLineMask, 0 {e6:1} fa ao_n1_, ao_n1, ao_p1 {o4:x} shlqbii ao_p1_, ao_p1, 0 {e6:1} fa ao_n2_, ao_n2, ao_p2 {o4:x} shlqbii ao_p2_, ao_p2, 0 {e6:3} fmablurAo___, currAo___, w0, blurAo__ {o4:x} shlqbii ao_p3_, ao_p3, 0 {e6:1} fm blurAo, ao_n4, w4 {o4:0} shufb prevAo0, currAo, currAo, s_AAAA {e2:0} ceqendLineMask, colorOffset, endLineOffset {o4:0} shufb ao_p1, currAo, nextAo, s_BCDa {e2:0} ceqendBlockMask, colorOffset_, endOffset {o4:0} shufb ao_p2, currAo, nextAo, s_CDab {e2:0} selbendLineOffsetIncr, zero, colorLineBytes, endLineMask {o4:0} shufb ao_p3, currAo, nextAo, s_Dabc {e2:0} selb ao_n4, currAo_, prevAo0, endLineMask_ {o4:0} shufb ao_n30, prevAo0, currAo, s_BCDa {e6:2} fma blurAo__, ao_n1__, w1, blurAo_ {o4:0} shufb ao_n20, prevAo0, currAo, s_CDab {e6:1} fma blurAo, ao_n3, w3, blurAo {o4:0} shufb ao_n10, prevAo0, currAo, s_Dabc {e2:0} selbcolorOffsetIncr, defOffsetIncr, endColorOffsetIncr, endLineMask {o6:3} stqxblurAo___, pvColor, colorOffset_ {e2:0} selb ao_n3, ao_p1_, ao_n30, endLineMask_ {o4:0} shufbcolorOffset_, colorOffset_, colorOffset, s_BCa0 {e2:0} selb ao_n2, ao_p2_, ao_n20, endLineMask_ {o4:x} shlqbii currAo___, currAo__, 0 {e2:0} selb ao_n1, ao_p3_, ao_n10, endLineMask_ {o4:x} shlqbii currAo__, currAo_, 0 {e2:0} a colorOffset, colorOffset, colorOffsetIncrlnop {e2:0} a endLineOffset, endLineOffset, endLineOffsetIncr branch: {o?:0} brzendBlockMask, loop
263.
Optimized EVEN ODD
loop: {e2:x} ai ao_n1__, ao_n1_, 0 {o4:x} shlqbii currAo_, currAo, 0 {e6:1} fa ao_n4, ao_n4, nextAo {o6:0} lqx currAo, pvColor, colorOffset {e6:1} fa ao_n3, ao_n3, ao_p3 {o6:0} lqx nextAo, pvNextColor, colorOffset {e6:2} fmablurAo_, ao_n2_, w2, blurAo {o4:0} shlqbiiendLineMask_, endLineMask, 0 {e6:1} fa ao_n1_, ao_n1, ao_p1 {o4:x} shlqbii ao_p1_, ao_p1, 0 {e6:1} fa ao_n2_, ao_n2, ao_p2 {o4:x} shlqbii ao_p2_, ao_p2, 0 {e6:3} fmablurAo___, currAo___, w0, blurAo__ {o4:x} shlqbii ao_p3_, ao_p3, 0 {e6:1} fm blurAo, ao_n4, w4 {o4:0} shufb prevAo0, currAo, currAo, s_AAAA {e2:0} ceqendLineMask, colorOffset, endLineOffset {o4:0} shufb ao_p1, currAo, nextAo, s_BCDa {e2:0} ceqendBlockMask, colorOffset_, endOffset {o4:0} shufb ao_p2, currAo, nextAo, s_CDab {e2:0} selbendLineOffsetIncr, zero, colorLineBytes, endLineMask {o4:0} shufb ao_p3, currAo, nextAo, s_Dabc {e2:0} selb ao_n4, currAo_, prevAo0, endLineMask_ {o4:0} shufb ao_n30, prevAo0, currAo, s_BCDa {e6:2} fma blurAo__, ao_n1__, w1, blurAo_ {o4:0} shufb ao_n20, prevAo0, currAo, s_CDab {e6:1} fma blurAo, ao_n3, w3, blurAo {o4:0} shufb ao_n10, prevAo0, currAo, s_Dabc {e2:0} selbcolorOffsetIncr, defOffsetIncr, endColorOffsetIncr, endLineMask {o6:3} stqxblurAo___, pvColor, colorOffset_ {e2:0} selb ao_n3, ao_p1_, ao_n30, endLineMask_ {o4:0} shufbcolorOffset_, colorOffset_, colorOffset, s_BCa0 {e2:0} selb ao_n2, ao_p2_, ao_n20, endLineMask_ {o4:x} shlqbii currAo___, currAo__, 0 {e2:0} selb ao_n1, ao_p3_, ao_n10, endLineMask_ {o4:x} shlqbii currAo__, currAo_, 0 {e2:0} a colorOffset, colorOffset, colorOffsetIncrlnop {e2:0} a endLineOffset, endLineOffset, endLineOffsetIncr branch: {o?:0} brzendBlockMask, loop
264.
265.
Sometimes more or
less
266.
SSAO went from
2ms on all 6 SPUs to 1ms on all 6 SPUs
267.
With practice, can
do about 1-2 loops per day.
268.
SSAO has 6
loops, and took a little over a week.
269.
Same process for:
270.
PostFX
271.
Fullscreen Lighting
272.
Ambient Cubemaps
273.
274.
275.
Architecture Conclusions “So,
you are the scheduler that has been nipping at my heels...”
276.
277.
Filmic Tonemapping changes
your life.
278.
SSAO is cool,
and keep it out of your sunlight.
279.
SPUs are awesome.
280.
They don’t optimize
themselves.
281.
282.
We’re also looking
for
283.
Senior Lighting Artist.
284.
Baixar agora