Page 1 of 1

Phantom Transmission

Unread postPosted: Mon Jun 12, 2017 5:45 pm
by xilofoton
Hi,

Sorry, but working on my tutorials I've found a non physically plausible behaviour in Clarisse when there is glossy transmission:

ClarissePhantomTransmissionMaxDepthSix.jpg
ClarissePhantomTransmissionMaxDepthSix.jpg (171.39 KiB) Viewed 478 times

There is a distant light pointing exactly into the camera, 3 thin box arranged along the Z axis of the camera, shifted Y direction each to get areas in the image:
Top: one box
Middle: two boxes
Bottom: three boxes
are respectively inbetween the cam and the light. So it is a bit strange for me comparing to similar real world situations, but if I set the raytrace depth to zero, I get this:

ClarissePhantomTransmissionMaxDepthZero.jpg
ClarissePhantomTransmissionMaxDepthZero.jpg (8.98 KiB) Viewed 478 times


So it seems that some kind of non-microfacet based calculations are there, in addition to the raytracing. This image should be black. I think this "phantom" ray is similar to the legacy's specular highlight, hitting a glossy surface creates a cosinus-or-whatever based specular lobe. Or am I wrong?
Ring effects are exist in reality during scattering, but differently and I don't think Clarisse does wave interference calculations ;) and the rings should be colored in that case...

Here is the test scene:
Code: Select all
#Isotropix_Clarisse_Clipboard_Serialization 0.94
Context "PhantomTransmission" {
    copy_from "project://PhantomTransmission"
    CameraPerspective {
        name "camera"
        #version 0.9
        copy_from "project://PhantomTransmission/camera"
        translate 0.0 0.0 6.93
        rotate 0.0 0.0 -7.9513867036608e-16
        aim_distance 3.92565973897113
        field_of_view 2
    }
    LightPhysicalDistant {
        name "light"
        #version 0.91
        copy_from "project://PhantomTransmission/light"
        positions "mat_1" 0 0
        rotate 0.0 180 0.0
        exposure 1
        angle 0.0
    }
    RendererRaytracer {
        name "path_tracer"
        #version 0.97
        copy_from "project://PhantomTransmission/path_tracer"
        anti_aliasing_sample_count 1
        anti_aliasing_sampling_mode 3
        anti_aliasing_filter 0
        anti_aliasing_filter_size 1 1
        integration_model "IntegratorPathtracer"
        integrator ".IntegratorPathtracer_embedded"
        embedded_objects {
            IntegratorPathtracer {
                name "IntegratorPathtracer_embedded"
                #version 0.92
                copy_from "project://PhantomTransmission/path_tracer.IntegratorPathtracer_embedded"
                private yes
                material_sample_count 16
                russian_roulette 0.0
                roughness_noise_optimization 0.0
                low_light_threshold 0.0
                specular_transmission_depth 5
                glossy_transmission_depth 5
                total_maximum_depth 5
                sample_clamping -1
                embedded_objects {
                    MaterialPhysicalStandard {
                        name "surface_default"
                        #version 0.0
                        copy_from "project://PhantomTransmission/path_tracer.IntegratorPathtracer_embedded.surface_default"
                        private yes
                    }
                    MaterialPhysicalVolume {
                        name "volume_default"
                        #version 0.9
                        copy_from "project://PhantomTransmission/path_tracer.IntegratorPathtracer_embedded.volume_default"
                        private yes
                        density_multiplier 100
                    }
                    MaterialPhysicalHair {
                        name "curve_default"
                        #version 0.9
                        copy_from "project://PhantomTransmission/path_tracer.IntegratorPathtracer_embedded.curve_default"
                        private yes
                    }
                }
            }
        }
    }
    Image {
        name "image"
        #version 0.93
        copy_from "project://PhantomTransmission/image"
        active_layer 0
        resolution 1024 1024
        layers ".background"
        first_frame 0
        last_frame 50
        embedded_objects {
            Layer3d {
                name "background"
                #version 0.97
                copy_from "project://PhantomTransmission/image.background"
                first_frame 0
                last_frame 50
                deep_output_data_precision 0
                max_sample_count 0
                active_camera "project://PhantomTransmission/camera"
                renderer "project://PhantomTransmission/path_tracer"
                user_data {
                    __geometries__ {
                    }
                    __lights__ {
                    }
                }
            }
        }
    }
    MaterialPhysicalTransmission {
        name "transmission"
        #version 0.9
        copy_from "project://PhantomTransmission/transmission"
        positions "mat_1" 121 198
        color 1 1 1
        index_of_refraction 1.34
        roughness 0.1
    }
    GeometryBox {
        name "box3"
        #version 0.9
        copy_from "project://PhantomTransmission/box3"
        translate 0.0 -0.522610713337584 3.20845685798578
        scale 1 1 0.0781667792674974
        uv_maps "horizontal unfold" "vertical unfold"
        uv_maps_loaded yes
        shading_groups "surface"
        materials "project://PhantomTransmission/transmission"
        clip_maps ""
        displacements ""
        sg_shading_variables ""
        visibles yes
    }
    GeometryBox {
        name "box2"
        #version 0.9
        copy_from "project://PhantomTransmission/box2"
        translate 0.0 -0.463574369807547 1.63927557397918
        scale 1 1 0.0781667792674974
        uv_maps "horizontal unfold" "vertical unfold"
        uv_maps_loaded yes
        shading_groups "surface"
        materials "project://PhantomTransmission/transmission"
        clip_maps ""
        displacements ""
        sg_shading_variables ""
        visibles yes
    }
    GeometryBox {
        name "box1"
        #version 0.9
        copy_from "project://PhantomTransmission/box1"
        scale 1 1 0.0781667792674974
        uv_maps "horizontal unfold" "vertical unfold"
        uv_maps_loaded yes
        shading_groups "surface"
        materials "project://PhantomTransmission/transmission"
        clip_maps ""
        displacements ""
        sg_shading_variables ""
        visibles yes
    }
}


Created a real world reference:

ClarissePhantomTransmission_RealRefPhoto_TwoTranspEnvelope.JPG
Two transparent envelope covers the Sun. One in the background fully, the closer just the bottom left part ofthe photo.

The second glossy transmission is based on the first envelope's "image", so simplifying this case:
The very bright and sharp image of the Sun is blurred once and this image is blurred again like if you add two blur node in Nuke. The second blurs further, and if there is a third it should further, the amount is based on the distance from the previous. Doing similar in Clarisse does nothing with the non-raytrace based spot (ring), just if I switch on the raytracing.... but this ring remains, and the other doesn't behave as it should be. Which kind of BSDF is there during transmission? There is no option to chose as it possible with reflections.

I'm working on tutorials which are based on real world observations and experiments and how phenomena in the nature can be correctly (and production effectively) represented with CG tools. This experiment is actually for how clouds scatter the light.
When I went to Clarisse to create a not for production but for understanding scene with tiny scattered water droplets, something was wrong, and finally did these experiments to find what is not ok.

Re: Phantom Transmission

Unread postPosted: Tue Jun 13, 2017 4:59 pm
by bruce
Hi,
You're right, in fact, because of the unidirectional path tracing it can be hard to find rays for the final illumination through different transmissive objects and for that, we 've created a case only for transmission where if there is not enough rays depth for the transmission we go straight and change the opacity to be sure to have some illumination anyway.This is not physical as you said but useful and if you input the right value of ray depth it will be physical again.

The ring effect is coming from the Fresnel equation, this image is a curve for reflection, this is the same but -1 for transmission:

http://what-when-how.com/wp-content/upl ... _thumb.jpg

Cheers.

Re: Phantom Transmission

Unread postPosted: Thu Jun 15, 2017 2:02 pm
by xilofoton
Hi Bruce,

I liked the old school specular system in the legacy, for the same reason as you explained for thr transmission. For bright point like light source caused specular highlights, it was good to add an extra "layer" for the deviant rays coming from the subtle imperfections on the surface with this cpu cheap method. So for transmission, it makes also the scattering less noisy, which is very practical for quick production results. However the multiple transmission makes it less and less real, because it does not take account the second object and third and so on object`s extra scattering effect. The black horizontal line is the top of the third thin box on the second image I`ve attached before.
The top of the second box is around the top of the ring. Both should make the spread more intense, so the family of angles of the originally parallel rays should get more and more wider, as visible in the photo. ( just two layers because I dont have 3 arms, but in the tutorial will be a multilayer rig and laser as well ;) )

Of course mostly VFX work is not a scientific visualization or archviz, so the balance of physically correctness and effectiveness is the key, so that`s why I liked the old specular stuff and accept this kind of transmission as a feature and not a bug, but I think it should be documented to overcome trial and error debugging of unexpected renders.

Thanks, cheers

Re: Phantom Transmission

Unread postPosted: Thu Jun 15, 2017 2:20 pm
by xilofoton
P.S.: The difference of the function curves you attached are based on the polarization of the incoming light. So do you mean Clarisse takes into account some polarization effects?

I don`t think there is any polarization simulation as in archviz specialized renderers like Ocean, but I mean the curves which Clarisse is using are the mixture of Schlick`s use-cheapest-math-as-possible and the Fresnel`s roller coaster, parallel to the surface one?

Re: Phantom Transmission

Unread postPosted: Mon Jun 19, 2017 11:33 am
by bruce
Hi,

No Clarisse doesn't simulate the polarization effect, the result is the average between the parallels and perpendiculars fresnel curves.

Cheers.