Skip to main content

Practical Particle Lighting


Bitsquid
- High-end licensed engine
- 10 titles
- "War of Roses"

Particle lighting
- Billboard lighting
- Support dynamic local lights
- Cheap to be used on all emissive particles ( minimum PS work )

Vertex Lighting
- Super cheap
- Better than nothing but looks very flat

HL2-basis

-Project lighting environment to HL2-basis
- Align HL2-basis vectors with billboard(i.e.. view space)

Lighting using HL2-basis
- prepare normal map


View space HL2-basis
-Good enough
-Cheap
Improvement
- shadow map look-up in VS
-Recycling of shadow map RTs can cause problems
  - Deferred CSM: Render the biggest slice
Increasing light sampling frequency
- DX11 use tessellation to increase sampling frequency of shadow map

Domain shader???

performance: VS, DS, PS

Shadow casting
- use the same tech as Crysis2
 - Render particle back-front, accumulate translucency in single 8-bit channel RT
- Use opaque shadow map as DST with depth test enabled to avoid back-projection

Conclusion:
- vertex lighting better than nothing
- HW tessellation  more stuff than displacement mapping

Comments

Popular posts from this blog

tex2D vs. tex2Dproj

texCoord(  texX, texY, texZ , texW ) means texture coordinate after transforming from the texture matrix [ position goes through world, view, projection, and texture ] . We can use texCoord to fetch texture: 1.  float4 color = tex2D( sampler,  float2( texX / texW, texY/texW ); 2.  float4 color = tex2Dporj( sampler, float4( texX, texY, texZ, texW ) ); The top-two methods will have the same result. Because tex2Dproj operator supports divide w in its interface. http://www.gamedev.net/community/forums/topic.asp?topic_id=408894 http://bbs.gameres.com/showthread.asp?threadid=104316

Fast subsurface scattering

Fig.1 - Fast Subsurface scattering of Stanford Bunny Based on the implementation of three.js . It provides a cheap, fast, and convincing approach to do ray-tracing in translucent surfaces. It refers the sharing in GDC 2011  [1], and the approach is used by Frostbite 2 and Unity engines [1][2][3]. Traditionally, when a ray intersects with surfaces, it needs to calculate the bouncing result after intersections. Materials can be divided into three types roughly.  Opaque , lights can't go through its geometry and the ray will be bounced back.  Transparency , the ray passes and allow it through the surface totally, it probably would loose a little energy after leaving.  Translucency , the ray after entering the surface will be bounced internally like below Fig. 2. Fig.2 - BSSRDF [1] In the case of translucency, we have several subsurface scattering approaches to solve our problem. When a light is traveling inside the shape, that needs to consider the diffuse value influe

Bringing Large Scale Console Game to iOS

Y8ObbsOsNQEhMCEhMCEt The Bard's Tale Why? Device are fast enough Market segment is not as crowded Hugh potential user base Rich back data log of content Potentially very low cost Session1: port process - application framework  - development workflow Session 2 port-port - performance/memory opt. OpenGL Cocoa Touch App Bring it all together Workflow: Data deployment OpenAL limit 32 active sources, DirectSound 256 channels on XBOX -Sluggish -5.8G -> 2Glimited on iOS 60Hz?    - terriable for battery life 30 Hz   - Game may depend on 60Hz Hybrid    -   60hz, functionsliity intact   - 30hz : low GPU/ save energy    -60hz, at 5th device is optional VFP?? Candidate for NEON SIMD SGX GPUs: a few stats Render opt. -minimal vertex format size -texture size and mipmapping Alpha test and SGX - Fragment discard expensive -huge impact on fill rate -use alpha blend at all costs Eliminating Alpha blend