• Advertisement


  • Content count

  • Joined

  • Last visited

Community Reputation

110 Neutral

About IcyTower

  • Rank

Personal Information

  • Interests


  • Github
  1. The aim of this project is to create a renderer which almost matches Path Tracing in quality, while generating noiseless images hundreds times faster. Instead of tracing thousands of rays per pixel to get soft shadows and diffuse reflections, it traces a single ray per pixel and uses smart blur techniques in screen space. It also uses standard Deferred Rendering for rasterizing main image. One of the project's fundamental rules is that everything is dynamic (no pre-baked data). Current implementation of ray tracing is very slow, with significant fixed cost per object. Performance will be dramatically improved after switching graphics API to DirectX12. The switch is needed to randomly access meshes from within the shader, rather than processing one by one as it is now. Despite that, image processing of shadows and reflections/refractions is pretty fast, which allows for real-time operation in small/medium sized scenes. I'm certain that most operations could be speed-up 2-10x if some more work was put into it. In development since 2014, 1500+ hours of work. Differences from NVIDIA RTX demos (such as SVGF - Spatiotemporal Variance-Guided Filtering): - engine doesn't shoot rays in random directions, but rather offsets them slightly based on pixel position in image-space. This results in zero temporal noise. - engine traces rays one layer (bounce) at a time and then stores results in render targets, which allows blurring of each light bounce separately. NVIDIA traces all bounces at once and then blurs the result. - engine doesn't use temporal accumulation of samples, although it could be added for extra quality. - NVIDIA demos analyze noise patterns to deduce how much blur needs to be applied at given screen region, I deduce this information from distance to the nearest occluder (for shadows) or nearest reflected/refracted object. It gives temporally stable results and saves some processing time (couple of ms per frame for NVIDIA), but introduces own set of challenges. Working features: • Deferred Rendering • Light reflections/refractions · Locally correct   · Fully dynamic   · Diffuse - for rough surfaces   · Multiple refractions/reflections   · Blur level depanding on surface to object distance • Shadows   · Fully dynamic   · Soft - depanding on light source radius, distance to occluder   · "Unfinite " precision - tiny/huge objects cast proper soft shadows, light source can be 1000 km away   · Visible in reflections/refractions   · Correct shadows from transparent objects - depanding on alpha texture • Physically Based Rendering - only one material, which supports all effects • Loading/saving scenes, animations, meshes, generating BVH trees • Tonemapping, bloom, FXAA, ASSAO (from Intel) Future plans: • Switching from DX11 do DX12 - to allow for indexing meshes inside shaders, support for huge scenes • Shadows for non-overlapping lights can be calculated in a single step! Amazing potential for rendering huge scenes. • Adjustable visual quality through tracing a few more rays per pixel - like 9, reducing the need for heavy blur • Dynamic Global Illumination • Support for skeletal animation • Support for arbitrary animation - ex. based on physics - cloths, fluids • Dynamic caustics • Volumetric effects, patricles - smoke, fire, clouds • Creating a sandbox game for testing
  2. OK, thank you very much for your answers. I was hoping to stay in D3D11 for a while, but it seems I will have to switch to D3D12.   But just to be 100% sure - the feature I'm looking for is indexable buffers and textures within a shader using a variable (such as loop counter). That is not available in SM5.0, right?
  3. In the first line under Shader Model 5.1 documentation: https://msdn.microsoft.com/en-us/library/windows/desktop/dn933277%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396 they write: "This section contains the reference pages for HLSL Shader Model 5.1, introduced with D3D12 and D3D11.3."   So I assume it is supported by D3D11. Am I wrong?
  4. Hi, when I call ID3D11Device3::CreateComputeShader  it fails with an error from debug layer stating:   "D3D11 ERROR: ID3D11Device::CreateComputeShader: Shader must be cs_4_0, cs_4_1 or cs_5_0. Shader version provided: UNRECOGNIZED [ STATE_CREATION ERROR #2097323: CREATECOMPUTESHADER_INVALIDSHADERTYPE]" This happens when I pass shader bytecode compiled for Shader Model 5.1. It works just fine for Shader Model 5.0.   My setup: Windows 10, Windows SDK version 10.0.14393.0, Microsoft Visual Studio 2015 Update 3, NVIDIA GeForce GTX 1080, GeForce Game Ready Driver 375.95, release date: 11/18/2016.   My project is configured to use the newest SDK. I compiled the shader using fxc.exe from within Visual Studio. But it failed also when I compiled shaders in runtime. I create my device using D3D_FEATURE_LEVEL_11_1 as feature level and D3D11_SDK_VERSION, which equals to 7. I also succeeded at using other DirectX 11.3 feature (loading vectors from UAVs).   I am clueless as to what causes this error and why DirectX API doesn't recognize cs_5_1 as a correct shader model. I tried to reinstall the Windows SDK, but it didn't help. I also tried to cast my ComPtr< ID3D11Device > pointer to ComPtr< ID3D11Device3 > using ComPtr::As method, but it didn't help either.   Any help or suggestions would be really appreciated.
  • Advertisement