256x256x128 is a bit dilated, because I just clamped Claybook ray-trace mip selection to 0,1,2. My mipgen adds small bias to be conservative.
-
-
এই থ্রেডটি দেখান
-
Because of this, the material map actually doesn't match the mip2 geometry that well. You can see some filtering issues because of this in the last image.
এই থ্রেডটি দেখান
কথা-বার্তা শেষ
নতুন কথা-বার্তা -
-
-
We are considering adding low quality mode to Claybook (mip 1 image). Total volume data size would drop from 1.1 GB down to 150 MB. This would make Claybook playable on GPUs with less than 2 GB of video memory.
এই থ্রেডটি দেখানধন্যবাদ। আপনার সময়রেখাকে আরো ভালো করে তুলতে টুইটার এটিকে ব্যবহার করবে। পূর্বাবস্থায়পূর্বাবস্থায়
-
-
-
Even at 256x256x128 it looks really good.
-
That's the main difference with SDF and 1 bit (in/out) voxels. SDF = no blockiness even at low resolutions.
-
What’s the material map? Another volume texture of material IDs, at 1024^3?
-
It’s 1024x1024x512 uint8. Texture2DArray instead of Texture3D (as Texture3D doesn’t support gather4). Sampling with 2x gather4 (one per Z slice) and then custom filter. Contains 5 bit material_id and 3 bit distance_to_closest_material_edge.
-
With 8 closest neigbors (cube corners) and 8 distance estimates to material transition we can calculate current surface position’s material. We sample only one material per pixel. Temporal jitter + accumulate to create smooth transition (temporal blend).
-
All this to fight blocky transitions for materials, right?
-
Yes. We don't want blocky material transitions. Trilinear filter also looked bad: A) You can still see some voxel blockess, B) the result was too fuzzy (Clay doesn't blend like that) and C) narrow geometry had color leaking issues.
-
Also using color volume was out of the question, since no PC graphics API allows compute shader write to compressed RGB formats. RGBA8 color volume would have taken 2 GB of video memory.
- 1টি আরও উত্তর
নতুন কথা-বার্তা -
-
-
Gotta ask, what does "(8 bit presenting +-4 voxel band)" imply? 32 levels of precision is 5 bits, and I guess +/-4 sort of fits into the remaining 3, but what's the +/- 4 for? I've only done similar things with marching cubes and was able to use all 8 bits for position precision.
-
SDF = distance to closest surface. Our multilevel SDF can encode +-4 voxel distance at each level (next level = 2x more coarse -> 2x max distance). Larger distance allows faster empty space skipping in sphere tracing algorithm. More precision allows representing geometry better.
-
Because we skip most empty space using coarse mip level, we don't need to empty space skip more than 4 voxel distance at the most fine level (mip0). Mip0 is only accessed near surfaces (4 voxel band).
-
My forthcoming GDC presentation covers this topic very well. Including how to generate and partial update these multi-level SDF volumes efficiently on GPU. Our GPGPU physics engine directly modifies the SDF every frame. Up to thousands of modifications.
-
Ah, very cool, makes sense! Looking forward to reading those slides after GDC :)
কথা-বার্তা শেষ
নতুন কথা-বার্তা -
-
-
What resolution is the material map, 1024x1024x512? How do you avoid aliasing on transitions between materials?
নতুন কথা-বার্তা -
-
-
Surprising change in grazing-angle silhouette self-shadowing, e.g. top-left of blue blob. Not sure why that is affected by voxel size - it doesn't seem like it would be a complex area.
-
That’s because of a mistake. Shadows are always using mip1 in these images. Thus the last picture uses 2x more detailed SDF for shadows. Also mip2 SDF is dilated for conservative empty space skipping. It is not meant for rendering. I can upload better images tomorrow.
-
Ah, that explains it then - no worries.
কথা-বার্তা শেষ
নতুন কথা-বার্তা -
লোড হতে বেশ কিছুক্ষণ সময় নিচ্ছে।
টুইটার তার ক্ষমতার বাইরে চলে গেছে বা কোনো সাময়িক সমস্যার সম্মুখীন হয়েছে আবার চেষ্টা করুন বা আরও তথ্যের জন্য টুইটারের স্থিতি দেখুন।