Jump to content

  • Log In with Google      Sign In   
  • Create Account

Ep's tool-dev diary



Translucency maps

Posted by , 15 April 2016 - - - - - - · 652 views
baked, translucency

Hello,

 

A while ago I fiddled a bit with an offline translucency technique as discussed here: http://www.gamedev.net/topic/653094-baking-a-local-thickness-map/. Never officially made it part of the baking pipeline, even though it should only be a small extension - still just flip and ray test those normals.

 

Though instead of averaging all sampled ray distances, I split them up into small 4x4 8-bits precision sets, so as to break the uniform thickness up into several view dependent values. These grids snug nicely into a uint32[4] vertex map component and can be sampled in a vertex shader based on the camera-to-vertex view tangent.

 

 

Posted Image

 

 

Posted Image




Renderer bells and whistles

Posted by , 31 March 2016 - - - - - - · 486 views
Super, Mario, World

Hello again,

 

Updated my lightmapper to bake full indirect diffuse as opposed to only an ambient occlusion term. It now also captures a viewpoint dependent occlusion mask that lets the environment cast a silhouette onto any reflective surfaces:

 

Posted Image

 

 

Also added a 'bias & gain' option to the multitexturing interface that lets you shift the gradient ramp and contrast of vertex map masks. This makes them usable as e.g. damage/wear maps, even with their lo-res nature:

 

Posted Image

 




Bokeh to the Future

Posted by , 17 March 2016 - - - - - - · 521 views

Hi!

 

Wasted an entire week trying to salvage this plan I had for a new depth of field shader. To up the performance, I came up with this really awkward mipmapping scheme, because for some reason I was convinced the weighted blending filter needed wasn't separable. A few minutes reconsidering this just now and it turns out a two pass method is perfectly feasible - so a quick rewrite later and I have this:

 

 

Posted Image

 

 

This version gets rid of the worst bleeding artifacts in both the near and far field by adjusting any texel's circle-of-confusion radius based on the depth values of neighboring (and occluding) texels.

 

 

Posted Image

 

 

I apply a basic dilation filter to bring out the brighter values, but I think I'm probably going to have to render some small point sprites to really have those distinct iris blade patterns pop out.

 

 




Cloud.gen

Posted by , 24 October 2015 - - - - - - · 1,431 views
clouds, radiosity, skybox, IBL
'allo


Something I've vowed several times I'd never do again: hand-paint a skybox.

The outdoor cloud-ish type specifically:

Posted Image

Painting clouds is all fun and fulfilling, until you need to fill out a full 360 degree view with dozens of them.

I preferred to draw a cloud scene as a spherical environment map; stretch around the outer regions is somewhat easier to deal with than the discontinuities along borders of the six faces in a cube map. (I always do my painting in Painter, so no clever 3D painting across seams for me.) Then you get the obvious issues with lighting (time of day etc.), that often require a complete repaint if you do not plan properly.


Anyway, the interface of the 'cloud tracer'-tool as it is now: Posted Image
options = [

   "mesh"         => loadmesh([ "path" => "D:/Temp/Cloud.lxo", "mask" => "Bake" ]),
   "env"          => loadimg([ "path" => "D:/Temp/Cloud_Env_2048.exr", "gamma" => 1.0 ]),
   "coverage"     => loadimg([ "path" => "D:/Temp/Cloud_Coverage.png" ]),
   "normal"       => loadimg([ "path" => "D:/Temp/Cloud_Normal.png", "channelmap" => [ 0, 2, 1 ], "levelmin" => -1.0, "levelmax" => 1.0 ]),

   "density"      => 0.025,
   "densityhaze"  => 0.00025,
   "tilelevelmin" => 0.4,
   "tilelevelmax" => 1.0

];

saveimg([ "textures" => tracer(options) ]);
The "mesh":

Posted Image

CREEPY. Posted Image

I skipped the simulation pass I initially planned on implementing, and simply modelled and replicated a series of basic cloud shapes. These cloud parts are all made up of smaller convex elements, which makes ray-testing fast and robust (occlusion tests against translucent convex objects make up the bulk of the work). I've also been meaning to try and run a radiosity solver on a low-resolution proxy mesh and have its results mapped back onto higher detail geometry - these convex bits seemed like a good candidate.

"environment":

Posted Image

Illumination comes from a single light probe for now.

"coverage"/"normal":
http://www.dynamique.nl/grow/pst/cloudslab.png

I got to doodle some more clouds by hand: geometry is expanded using these normal mapped 'depth billboards', which then have results from the lighting pass projected onto them. They're cheaper to render than volumetric textures, as there's no ray-marching involved. Also, 2D textures are far more straightforward to produce. I might come back to volume textures for other reasons later though.

Then there's some stuff about global cloud density and fog values for space in the scene that's not occupied by cloud geometry.



LET'S RENDER AND SEE:

http://www.dynamique.nl/grow/pst/clouds4.png


k.

- Clouds need to be a bit more whispy here and there.
- The in-modeller point cloud replicator I used does a fairly good job at coming up with interesting cloud shapes, but I feel a custom distributor could still do better.
- The radiosity pass finishes pretty quickly as I had hoped, but tracing the final 2048 * 2048 image takes a while running on the cpu - needs more Compute.



Apologies for all the going back-and-forth with the camera.


Lastly, a bit of blatant self-promotion: I've been looking to do some graphics/tools programming for a U.S./European studio. If anyone can think of someone who might be interested, I'd love to hear (doesn't have to be game related per se).


A billion chimneys and more CSG fun

Posted by , 21 March 2015 - - - - - - · 997 views

The thing with architecture is that so much about it is up to whim and any procedural creation algorithm needs to be guided by a large amount of rules and grammars before it'll know how to churn out any remotely useable pieces of real-estate.

I got to the point where I could generate objects similar to these: Posted Image

These were actually the most acceptable out of several hundred bakes (only three front doors!) and I'm afraid getting the tool to generate acceptable output at all times is becoming way too time consuming. Posted Image Instead, I'm simply going to hand-model and texture a series of basic solids and then pass sets of these through the CSG boolean tool:

Posted Image

Posted Image

There's no way to deform (like stretching them out without distorting them) these in any way yet (apart from orienting and scaling them), but it serves for now. Also tried to merge the whole scenery into a single solid (trees and foliage are still instanced) to trim away as much overdraw (especially the terrain is texfetch-expensive) as possible.

Posted Image

http://www.dynamique.nl/grow/pst/render024_detail.png






Links

Posted ImagePosted Image

Recent Entries



PARTNERS