resistance: fall of man - public debriefing
TRANSCRIPT
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
1/38
Resistance: Fall ofResistance: Fall of
ManManInsomniac GamesInsomniac Games
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
2/38
DevelopmentDevelopment
Started on PC with a small prototype teamStarted on PC with a small prototype teamconcurrent with PS2 developmentconcurrent with PS2 development Good for prototyping shaders little changeGood for prototyping shaders little change
Good for prototyping lighting, tools and buildGood for prototyping lighting, tools and buildprocessprocess
Bad for code development, systems were not writtenBad for code development, systems were not writtenwith the Cell in mindwith the Cell in mind
ater on, small group handled porting code baseater on, small group handled porting code baseto PS! while others continued wor"ing on PCto PS! while others continued wor"ing on PC
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
3/38
DevelopmentDevelopment
#any concepts shared from PS2#any concepts shared from PS2 $sset types named the same to "eep artists happy$sset types named the same to "eep artists happy
Structure of the engine is similarStructure of the engine is similar
Similar tool chainSimilar tool chain %o runtime code shared from PS2%o runtime code shared from PS2
PS! &esistance and PS2 &atchet had little in commonPS! &esistance and PS2 &atchet had little in common
ots of $S# on PS2 so not much to use on PS!ots of $S# on PS2 so not much to use on PS!
#ost PS2 systems were considered too simple for PS!#ost PS2 systems were considered too simple for PS!
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
4/38
Programmer ToolsProgrammer Tools
PerforcePerforce
Pro'GPro'G
S% 'BSS% 'BS (isual Studio(isual Studio
In house asset control systemIn house asset control system
In house build serverIn house build server In house world toolIn house world tool
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
5/38
Art ToolsArt Tools
#aya#aya
#ental &ay#ental &ay
#icrowave#icrowave PhotoshopPhotoshop
) Brush) Brush
Speed*reeSpeed*ree
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
6/38
Asset TypesAsset Types
+ept the same asset names to "eep the process+ept the same asset names to "eep the processfamiliarfamiliar -.rags-.rags
*ies*ies #obys#obys ShrubsShrubs
.oliage.oliage S"iesS"ies ShadersShaders
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
7/38
U-FragsU-Frags
#ost basic - fastest to render#ost basic - fastest to render
Completely static geometryCompletely static geometry
(ertices stored in world space as locally compressed(ertices stored in world space as locally compressed
fragments to "eep the precision as high as possible fragments to "eep the precision as high as possible
real positions computed in the verte/ programsreal positions computed in the verte/ programs
%on-instanceable%on-instanceable
ightmapped or verte/ ba"edightmapped or verte/ ba"ed #emory efficient#emory efficient
P(S occlusionP(S occlusion
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
8/38
TiesTies
Conceptually the same as -.rag but instanced -Conceptually the same as -.rag but instanced -vertices defined in local spacevertices defined in local space
Completely static geometryCompletely static geometry
Can be nested within each other in the tools, invisibleCan be nested within each other in the tools, invisibleto runtimeto runtime
ightmapped or verte/ ba"edightmapped or verte/ ba"ed #ade up the ma0ority of a typical scene#ade up the ma0ority of a typical scene Stored as two &S1 streams, a master and a per instanceStored as two &S1 streams, a master and a per instance
stream with the lighting infostream with the lighting info P(S occlusionP(S occlusion
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
9/38
MobysMobys
'ynamic geometry, most e/pensive'ynamic geometry, most e/pensive
Can have physics, animations, etcCan have physics, animations, etc
#ay be rigid 34 bone5 or s"inned 36 bones5#ay be rigid 34 bone5 or s"inned 36 bones5 Static lighting from pre-computed spatialStatic lighting from pre-computed spatial
lighting volumeslighting volumes
'ynamic lighting from runtime lights'ynamic lighting from runtime lights Crude static 7'Crude static 7'
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
10/38
ShrubsShrubs
(ery fast to render, used to fill scene(ery fast to render, used to fill scene evels would have 48"-28" instancesevels would have 48"-28" instances (ery basic geometry(ery basic geometry Simple lightingSimple lighting 'idn9t cast shadows but could receive them'idn9t cast shadows but could receive them Basic wind li"e animationBasic wind li"e animation .ade out in distance.ade out in distance P(S occlusionP(S occlusion
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
11/38
FoliageFoliage
sed for leaves on treessed for leaves on trees
Camera facing billboardsCamera facing billboards
sed Speed*ree for data generation but wrotesed Speed*ree for data generation but wroteour own custom renderer for runtimeour own custom renderer for runtime
Could cast and receive shadowsCould cast and receive shadows
Basic wind li"e animation similar to shrubsBasic wind li"e animation similar to shrubs P(S occlusionP(S occlusion
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
12/38
SiesSies
#ultiple fre:uencies of cloud layers composited#ultiple fre:uencies of cloud layers composited
togethertogether
$rtist driven animation parameters to procedurally$rtist driven animation parameters to procedurally
control cloud turbulence, drift, formation rates, etccontrol cloud turbulence, drift, formation rates, etc Simplified geometry could be rendered before or afterSimplified geometry could be rendered before or after
cloud layerscloud layers
Bloom geometry layersBloom geometry layers 'rawn after opa:ue geometry'rawn after opa:ue geometry
P(S occlusionP(S occlusion
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
13/38
Sha!ersSha!ers
Base color map, $lpha;Bloom, %ormal, Gloss, Incandescence, Paralla/, andBase color map, $lpha;Bloom, %ormal, Gloss, Incandescence, Paralla/, and'etail'etail
.ine grain control e/posed to artists te/ture format, filtering modes, etc.ine grain control e/posed to artists te/ture format, filtering modes, etc (erte/ programs abstracted the asset type(erte/ programs abstracted the asset type $ll assets shared fragment programs - consistent lighting$ll assets shared fragment programs - consistent lighting
&untime has specific shader programs to optimally handle the various&untime has specific shader programs to optimally handle the variouscombinations of shader featurescombinations of shader features
sed simple pre-processor
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
14/38
Sha!ersSha!ers
*he alpha type is part of the shader*he alpha type is part of the shader 7pa:ue 3updates >57pa:ue 3updates >5 Blended 3does not update >5Blended 3does not update >5 $dditive 3does not update >5$dditive 3does not update >5
Cutout 3uses alpha test5Cutout 3uses alpha test5 'estination alpha used for bloom'estination alpha used for bloom Shader 7' removed e/pensive featuresShader 7' removed e/pensive features Shaders use the hardware features of the te/ture samplersShaders use the hardware features of the te/ture samplers
Swi>>le to get the inputs in to the place where the fragment programSwi>>le to get the inputs in to the place where the fragment programe/pects theme/pects them se the sign e/tend and force >ero;one featurese the sign e/tend and force >ero;one feature
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
15/38
"uil! Process"uil! Process
?ach asset type has a stand alone builder?ach asset type has a stand alone builder PC Command line tool, integrated with our asset controlPC Command line tool, integrated with our asset control
systemsystem
Single platform, assets are built directly in hardware formatSingle platform, assets are built directly in hardware format PS! viewer that shows individual built assetsPS! viewer that shows individual built assets
Good for debugging assetsGood for debugging assets
Good for rough stats on a single assetGood for rough stats on a single asset
(iewers show all physics and collision info(iewers show all physics and collision info
(iewers allow artists to light and animate out of the conte/t(iewers allow artists to light and animate out of the conte/t
of a levelof a level
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
16/38
"uil! Process"uil! Process
?ngine 'ata evel Pac"er?ngine 'ata evel Pac"er $ level is a group of assets of different types pac"ed$ level is a group of assets of different types pac"ed
together by the pac"ing tooltogether by the pac"ing tool
*he level pac" tool is what lays optimally in the final*he level pac" tool is what lays optimally in the final
format, resolves duplicates, partitions memory, etcformat, resolves duplicates, partitions memory, etc
7n load, very little copying is done, we 0ust need to7n load, very little copying is done, we 0ust need to
patch up pointerspatch up pointers &S1 data is pac"ed into two chun"s, one that ends&S1 data is pac"ed into two chun"s, one that ends
up in main memory and one in local memoryup in main memory and one in local memory
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
17/38
"uil! Process"uil! Process
ProblemsProblems %o bac"wards;forwards compatibility of data%o bac"wards;forwards compatibility of data
formatsformats
Slow asset buildsSlow asset builds
ive dataive data
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
18/38
Static #ightingStatic #ighting
?nvironments use simplified @2 style light maps -?nvironments use simplified @2 style light maps -directional luminance in the lightmaps and a shareddirectional luminance in the lightmaps and a sharedchrominance per verte/chrominance per verte/
?nvironments could also use verte/ lighting, in which?nvironments could also use verte/ lighting, in whichcase there was no lightmaps and the luminance andcase there was no lightmaps and the luminance andchrominance are stored per verte/chrominance are stored per verte/
*he lightmaps, (s and verte/ components for lighting*he lightmaps, (s and verte/ components for lighting
are stored per instanceare stored per instance $ll lighting computed through #ental &ay$ll lighting computed through #ental &ay Interactive lightmap resolution and format twea"ingInteractive lightmap resolution and format twea"ing
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
19/38
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
20/38
Dynamic #ightingDynamic #ighting
'ynamic lights are rendered as a separate pass per light'ynamic lights are rendered as a separate pass per light 7nly the individual geometry fragments affected by the7nly the individual geometry fragments affected by the
lights are rendered in the light passeslights are rendered in the light passes $ll lighting is per pi/el, typical light types supported$ll lighting is per pi/el, typical light types supported
3Point, spot, etc53Point, spot, etc5 ighting model is the same for all assets so they all lightighting model is the same for all assets so they all light
the samethe same Shadow maps are pre-rendered at the start of the frame,Shadow maps are pre-rendered at the start of the frame,
there is an mb limit for shadow mapsthere is an mb limit for shadow maps Shadow maps are 4A-bit linear depth and rangeShadow maps are 4A-bit linear depth and range
controlled for best accuracycontrolled for best accuracy
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
21/38
Static occlusionStatic occlusion
Static occlusion is a P(S systemStatic occlusion is a P(S system 'atabase is computed offline using the PS! to render'atabase is computed offline using the PS! to render
the scene using :ueries and the PC to :uanti>e;pac"the scene using :ueries and the PC to :uanti>e;pac"
the results usually an overnight processthe results usually an overnight process $t runtime given a camera position you get a bit array$t runtime given a camera position you get a bit array
of the visible nodes and the ma/ visible distanceof the visible nodes and the ma/ visible distance ?ach asset fragment belongs to a node and a simple?ach asset fragment belongs to a node and a simple
runtime logic op determines if the node is visibleruntime logic op determines if the node is visible *here is a limited number of nodes, each represented*here is a limited number of nodes, each represented
by a single bitby a single bit
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
22/38
Frame "uffer SetupFrame "uffer Setup
'isplay Buffers'isplay Buffers 2 / 428/28 !2-bit &GB$2 / 428/28 !2-bit &GB$
Both display buffers share a single tile to reduce wastedBoth display buffers share a single tile to reduce wasted
memorymemory De did not support 488, couldn9t afford the memoryDe did not support 488, couldn9t afford the memory
&ender Buffer&ender Buffer 428/28, !2bit, 2/#S$$428/28, !2bit, 2/#S$$
!2-bit depth buffer!2-bit depth buffer
Color and depth in their own tiles with compression enabledColor and depth in their own tiles with compression enabled
$lways render 428/28 down sample for %*SC and P$$lways render 428/28 down sample for %*SC and P$
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
23/38
Frame "uffer SetupFrame "uffer Setup
$lternate &ender Buffer$lternate &ender Buffer 428/86, !2bit, 2/#S$$428/86, !2bit, 2/#S$$
86 is the magic height as it obeys all the restrictions86 is the magic height as it obeys all the restrictions
of depth and color tilesof depth and color tiles
Center on the 28 front buffer, giving pi/els ofCenter on the 28 front buffer, giving pi/els of
blac" top and bottomblac" top and bottom
%o wasted memory due to alignment 7ver 4#b%o wasted memory due to alignment 7ver 4#bsaved from using 428/28 and 2E fastersaved from using 428/28 and 2E faster
Idea was too late to be useful on &esistanceIdea was too late to be useful on &esistance
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
24/38
Frame Ren!er $r!erFrame Ren!er $r!er
Statically lit opa:ue geometryStatically lit opa:ue geometry S"yS"y Statically lit alpha geometryStatically lit alpha geometry 'ynamically lighting passes on opa:ue geometry'ynamically lighting passes on opa:ue geometry
'ynamically lighting passes on alpha geometry'ynamically lighting passes on alpha geometry ?ffects, Dater, Ground fog?ffects, Dater, Ground fog &esolve multisampling to display buffer, apply color correction&esolve multisampling to display buffer, apply color correction
3contrast, brightness and saturation53contrast, brightness and saturation5 $pply post effects on the off screen display buffer$pply post effects on the off screen display buffer 'raw @' directly to display'raw @' directly to display 'raw the system 7S''raw the system 7S' .lip the display buffers.lip the display buffers
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
25/38
%i!eo Memory "u!get%i!eo Memory "u!get
(ram is almost e/clusively pi/el data, some verts(ram is almost e/clusively pi/el data, some vertsmay be in vram for memory balancingmay be in vram for memory balancing 24#b .rame buffers24#b .rame buffers
=42+ .ragment programs=42+ .ragment programs #b Scratch memory 3non-tiled5#b Scratch memory 3non-tiled5 =8-8#b ightmaps=8-8#b ightmaps
44=-4!=#b *e/tures44=-4!=#b *e/tures Scratch memory is used for shadow buffers,Scratch memory is used for shadow buffers,
effects, and post effect wor"ing buffers etceffects, and post effect wor"ing buffers etc
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
26/38
Main MemoryMain Memory
%o C&* allocations%o C&* allocations
$llocate our own memory segment$llocate our own memory segment
$llocate all free memory as 4mb pages$llocate all free memory as 4mb pages Individually commit pages to the segmentIndividually commit pages to the segment
#ap everything in the segment to the &S1#ap everything in the segment to the &S1
De do leave a couple of #b slop for the C&*De do leave a couple of #b slop for the C&*because its used by other C&* functions 3printf5because its used by other C&* functions 3printf5
and networ"ing codeand networ"ing code
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
27/38
Memory AllocatorsMemory Allocators
ow level allocator is an Fallocate at end9 type allocatorow level allocator is an Fallocate at end9 type allocatorwith no ability to free memorywith no ability to free memory
*he allocator has chec"points which we can use to*he allocator has chec"points which we can use torollbac" main and video memoryrollbac" main and video memory
&eliable clean up without concern about destructors&eliable clean up without concern about destructorsbeing calledbeing called
*here are chec"points inserted at the various points*here are chec"points inserted at the various pointsduring load so we can :uic"ly reload when a player diesduring load so we can :uic"ly reload when a player dies
or restarts the levelor restarts the level Systems that needed true dynamic memory dealt with itSystems that needed true dynamic memory dealt with it
with an optimal allocator specific to that systemwith an optimal allocator specific to that system
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
28/38
Main Memory "u!getMain Memory "u!get
?lfSystem Setup?lfSystem Setup Code and 'ataCode and 'ata 4#b4#b
2mb of embedded SP elf data2mb of embedded SP elf data
2mb of P&1 modules2mb of P&1 modules
BSSBSS #b#b
C&* @eapC&* @eap 4#b4#b
SP *hread group swap spaceSP *hread group swap space 2#b2#b
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
29/38
Main Memory "u!getMain Memory "u!get
Core engineCore engine Push buffersPush buffers A-48#bA-48#b
Scratch memoryScratch memory H#bH#b
Global *e/tures and @'Global *e/tures and @' #b#b
#isc#isc 2#b2#b SP '#$ buffers, verte/ programs, &* light setupSP '#$ buffers, verte/ programs, &* light setup
buffers, .I7S init, Sound init etcbuffers, .I7S init, Sound init etc
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
30/38
Main Memory "u!getMain Memory "u!get
evel 'ataevel 'ata ?ffects?ffects 44#b44#b GeometryGeometry =8#b=8#b CollisionCollision H#bH#b
$nim$nim !8#b!8#b ?nviroment Instance?nviroment Instance 2#b2#b 7cclusion;P(S7cclusion;P(S 6#b6#b SoundSound !8#b!8#b 'ialog'ialog 42#b42#b
PhysicsPhysics H#bH#b %av$I%av$I 6#b6#b #oby Instance#oby Instance A#bA#b Gameplay;ScriptsGameplay;Scripts 48#b48#b
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
31/38
SPU &onfigurationSPU &onfiguration
2 &aw mode SPs2 &aw mode SPs 7ne SP running broad collision7ne SP running broad collision 7ne SP running narrow collision7ne SP running narrow collision *hese run all the time*hese run all the time
! Job #anagerK SPs! Job #anagerK SPs In a thread group running SP&SIn a thread group running SP&S Job #anagerK policy moduleJob #anagerK policy module $ll 0obs go on these$ll 0obs go on these
4 nused4 nused *his is for the 7S to steal for $C! ?ncode etc*his is for the 7S to steal for $C! ?ncode etc *his should be used with its own 0ob manager instance in the*his should be used with its own 0ob manager instance in the
future for 0obs that don9t mind getting interrupted by the 7Sfuture for 0obs that don9t mind getting interrupted by the 7S
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
32/38
SPU &onfigurationSPU &onfiguration
Initially we had Job #anagerK using 6 SPsInitially we had Job #anagerK using 6 SPs
Dhen we finally got a 7S that was stealing an SP itDhen we finally got a 7S that was stealing an SP it
was more e/pensive to have Job #anagerK on 6 SPswas more e/pensive to have Job #anagerK on 6 SPs
than on !than on ! Dith $C! ?ncode activeDith $C! ?ncode active
*otal SP *ime for Job #anagerK of 6*otal SP *ime for Job #anagerK of 6 686 ms686 ms
*otal SP *ime for Job #anagerK of !*otal SP *ime for Job #anagerK of ! !H26 ms!H26 ms
#ultiple instances of SP&S;Job #anagerK came too#ultiple instances of SP&S;Job #anagerK came too
late for us to uselate for us to use
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
33/38
SPU SystemsSPU Systems
$nimation$nimation $udio 3%e/tSynth and &45$udio 3%e/tSynth and &45 Buc"eter sortBuc"eter sort Collision 3separate broad and narrow5Collision 3separate broad and narrow5 'ynamic 'B'ynamic 'B 'ynamic 0oint'ynamic 0oint .1 update.1 update Geom Cull Clip 3for shadows and decals5Geom Cull Clip 3for shadows and decals5 GlassGlass #oby constants#oby constants Physics collisionPhysics collision
Physics simulationPhysics simulation Particle 3weather f/5Particle 3weather f/5 &ender mats&ender mats Static 'BStatic 'B Dater 3..*5Dater 3..*5
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
34/38
SPUsSPUs
$ll our systems started off as &$D mode$ll our systems started off as &$D mode *he only long term 3not finished this frame5 asynchronous*he only long term 3not finished this frame5 asynchronous
processing is the collision on the raw SPsprocessing is the collision on the raw SPs De use Job #anagerK but not all systems use it in the typical wayDe use Job #anagerK but not all systems use it in the typical way
of fire and forget #ost of our system re:uire the SP to beof fire and forget #ost of our system re:uire the SP to berunning a particular system at the same time as the PPrunning a particular system at the same time as the PP
*o ensure the SP is doing what we want at the correct time we*o ensure the SP is doing what we want at the correct time wesend Job #anagerK the 0ob and use our own thinsend Job #anagerK the 0ob and use our own thinsynchroni>ation and 0ob buffering schemes using the loc"ed-linesynchroni>ation and 0ob buffering schemes using the loc"ed-linefor communicationfor communication
48-28E total SP utili>ation48-28E total SP utili>ation
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
35/38
&ollision $vervie'&ollision $vervie'
'edicated 2 raw SPs one for broad and narrow phases'edicated 2 raw SPs one for broad and narrow phases De support immediate and deferred :ueriesDe support immediate and deferred :ueries PP can directly issue broad or narrow :ueriesPP can directly issue broad or narrow :ueries Broad and narrow overlap, so narrow is processing as soon asBroad and narrow overlap, so narrow is processing as soon as
the first broad phase result is availablethe first broad phase result is available *here are two "inds of deferred collision operations, standard*here are two "inds of deferred collision operations, standard
priority which has to done this frame and low priority which haspriority which has to done this frame and low priority which hasuntil the end of the ne/t frameuntil the end of the ne/t frame
Immediate re:uests from the PP are higher priority than anyImmediate re:uests from the PP are higher priority than anydeferred collisiondeferred collision
Getting game code to optimally use the deferred collision was anGetting game code to optimally use the deferred collision was anissueissue
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
36/38
Animation $vervie'Animation $vervie'
$ppro/ 688 Joint limit, 4= blended clips$ppro/ 688 Joint limit, 4= blended clips .ull body animations or partials with per 0oint weights.ull body animations or partials with per 0oint weights Stac" driven system similar to IC?Stac" driven system similar to IC? %o blend shapes or set driven "ey support at present%o blend shapes or set driven "ey support at present Dhile the SP is computing the animation for a given moby theDhile the SP is computing the animation for a given moby the
PP is updating the ne/t moby and computing its anim stac"PP is updating the ne/t moby and computing its anim stac" $nimation time is typically completely hidden, only time we stall$nimation time is typically completely hidden, only time we stall
is when waiting for the last anim to completeis when waiting for the last anim to complete
$nimation data is compressed in memory and temporarily$nimation data is compressed in memory and temporarilydecompressed before use by SPdecompressed before use by SP
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
37/38
Animation $vervie'Animation $vervie'
ow level animation system is driven by a high level Fmove9ow level animation system is driven by a high level Fmove9system which builds the anim stac"system which builds the anim stac"
?nd result of the animation is a set of local space matrices?nd result of the animation is a set of local space matrices Subset of s"eletal 0oints called Fdynamic 0oints9 which can beSubset of s"eletal 0oints called Fdynamic 0oints9 which can be
modified on post animated data physics, I+, rag doll, gameplaymodified on post animated data physics, I+, rag doll, gameplayprocedural movement, etc operate on theseprocedural movement, etc operate on these
$ny modifications are multiplied bac" down the hierarchy only$ny modifications are multiplied bac" down the hierarchy onlyfor those leaves of the tree by an SP 0obfor those leaves of the tree by an SP 0ob
.inally all resultant local space matrices are sent to another SP.inally all resultant local space matrices are sent to another SP0ob which builds the world space matrices and pushbuffer which0ob which builds the world space matrices and pushbuffer whichuploads them to &S1uploads them to &S1
$ll s"inning is done on the &S1$ll s"inning is done on the &S1
-
8/11/2019 Resistance: Fall of Man - Public Debriefing
38/38
The (n!The (n!
LuestionsMLuestionsM