Stefan Werner (swerner)
User

Projects

User Details

User Since
Mar 31 2015, 9:29 AM (133 w, 6 d)

Recent Activity

Sep 20 2017

Stefan Werner (swerner) committed rB549c4bec9d82: Added extra "const" to satisfy the strict clang version in Xcode 9 (authored by Stefan Werner (swerner)).
Added extra "const" to satisfy the strict clang version in Xcode 9
Sep 20 2017, 9:50 PM
Stefan Werner (swerner) committed rBee30a4381f89: Added extra "const" to satisfy the strict clang version in Xcode 9 (authored by Stefan Werner (swerner)).
Added extra "const" to satisfy the strict clang version in Xcode 9
Sep 20 2017, 9:49 PM

Sep 4 2017

Stefan Werner (swerner) lowered the priority of T52643: Rendered Viewport after Quick Smoke crashes Blender from Normal to Incomplete.

I'm unable to reproduce on macOS.

Sep 4 2017, 9:44 PM · BF Blender

Aug 30 2017

Stefan Werner (swerner) closed T52477: Clipped/sharp borders lighting by objects with cycles emission textured shader as Resolved.
Aug 30 2017, 12:55 PM · Cycles, BF Blender
Stefan Werner (swerner) committed rB68dfa0f1b7ff: Fixing T52477 - switching from custom ray/triangle intersection code to the one… (authored by Stefan Werner (swerner)).
Fixing T52477 - switching from custom ray/triangle intersection code to the one…
Aug 30 2017, 12:51 PM

Aug 29 2017

Stefan Werner (swerner) added a comment to T52477: Clipped/sharp borders lighting by objects with cycles emission textured shader.

Thanks for the report. It looks like the UV coordinates for mesh lights are off when using spherical sampling.

Aug 29 2017, 11:17 PM · Cycles, BF Blender

Aug 17 2017

Stefan Werner (swerner) committed rB7a4696197dbb: Cycles: Fix for a division by zero that could happen with solid angle triangle… (authored by Stefan Werner (swerner)).
Cycles: Fix for a division by zero that could happen with solid angle triangle…
Aug 17 2017, 3:08 PM
Stefan Werner (swerner) committed rB8141eac2f8fe: Improved triangle sampling for mesh lights (authored by Stefan Werner (swerner)).
Improved triangle sampling for mesh lights
Aug 17 2017, 12:44 PM
Stefan Werner (swerner) closed D2730: Improved triangle sampling for mesh lights by committing rB8141eac2f8fe: Improved triangle sampling for mesh lights.
Aug 17 2017, 12:44 PM · Cycles

Aug 14 2017

Stefan Werner (swerner) committed rB86eb8980d360: Cycles: Fixed broken camera motion blur when motion was not set to center on… (authored by Stefan Werner (swerner)).
Cycles: Fixed broken camera motion blur when motion was not set to center on…
Aug 14 2017, 8:26 PM
Stefan Werner (swerner) closed D2787: Cycles: Fixed broken camera motion blur when motion was not set to center on frame by committing rB86eb8980d360: Cycles: Fixed broken camera motion blur when motion was not set to center on….
Aug 14 2017, 8:26 PM

Aug 12 2017

Stefan Werner (swerner) added a reviewer for D2787: Cycles: Fixed broken camera motion blur when motion was not set to center on frame: Cycles.
Aug 12 2017, 10:15 PM
Stefan Werner (swerner) added a comment to D2787: Cycles: Fixed broken camera motion blur when motion was not set to center on frame.


Aug 12 2017, 10:14 PM
Stefan Werner (swerner) added a comment to D2787: Cycles: Fixed broken camera motion blur when motion was not set to center on frame.

Attached is a scene that demonstrates the issue:
Camera and Suzanne are moving in sync, the plane is static. This frame renders as expected when motion blur is set to "Center on Frame", but renders incorrectly when motion blur is set to "Start on Frame" or "End on Frame".

Aug 12 2017, 10:07 PM
Stefan Werner (swerner) created D2787: Cycles: Fixed broken camera motion blur when motion was not set to center on frame.
Aug 12 2017, 10:05 PM

Aug 8 2017

Stefan Werner (swerner) added a comment to D2769: Cycles: change defaults for filter glossy, clamp and branched path AA..

Well, you have to compromise somewhere. Maybe we should make it clear in the mouse over text that any values other than 0.0 for clamp and glossy blur introduce bias? Maybe additional presets?

Aug 8 2017, 11:27 PM

Jul 20 2017

Stefan Werner (swerner) added a comment to T52107: Color management difference when using multiple and different GPUs together.

Should be working in c1ca3c8.

Jul 20 2017, 1:41 PM · Cycles, BF Blender
Stefan Werner (swerner) committed rBc1ca3c8038d3: Cycles: fixed the SM_2x CUDA kernel build that I broke in my previous commit (authored by Stefan Werner (swerner)).
Cycles: fixed the SM_2x CUDA kernel build that I broke in my previous commit
Jul 20 2017, 1:28 PM
Stefan Werner (swerner) added a comment to T52107: Color management difference when using multiple and different GPUs together.

Thanks, will take another look. Give me a couple of minutes.

Jul 20 2017, 1:14 PM · Cycles, BF Blender
Stefan Werner (swerner) added a comment to T52107: Color management difference when using multiple and different GPUs together.

@Maxime Michel (maximemichel) if you could please verify that this is fixed with the upcoming automated builds.

Jul 20 2017, 10:04 AM · Cycles, BF Blender
Stefan Werner (swerner) committed rB4bc6faf9c838: Fix T52107: Color management difference when using multiple and different GPUs… (authored by Stefan Werner (swerner)).
Fix T52107: Color management difference when using multiple and different GPUs…
Jul 20 2017, 10:03 AM
Stefan Werner (swerner) closed T52107: Color management difference when using multiple and different GPUs together as Resolved by committing rB4bc6faf9c838: Fix T52107: Color management difference when using multiple and different GPUs….
Jul 20 2017, 10:03 AM · Cycles, BF Blender
Stefan Werner (swerner) claimed T52107: Color management difference when using multiple and different GPUs together.
Jul 20 2017, 9:19 AM · Cycles, BF Blender

Jul 19 2017

Stefan Werner (swerner) added a comment to T52107: Color management difference when using multiple and different GPUs together.

@Brecht Van Lommel (brecht) You're probably right. I think it needs to use the same texture IDs for all CUDA architectures and then map back to SM_2x on the kernel side. I'll go dig out my GTX 460...

Jul 19 2017, 2:31 PM · Cycles, BF Blender
Stefan Werner (swerner) added a comment to T52107: Color management difference when using multiple and different GPUs together.

The attached scene is missing its textures. Can you please pack them and upload it again?

Jul 19 2017, 2:02 PM · Cycles, BF Blender

Jul 4 2017

Stefan Werner (swerner) updated the diff for D2730: Improved triangle sampling for mesh lights.

One more round of improvements. A few optimisations, and a change to the heuristic for switching between sampling strategies. Now it looks at the triangle's edge lengths instead of its area, that should hopefully help long and thin triangles.

Jul 4 2017, 11:53 AM · Cycles

Jul 3 2017

Stefan Werner (swerner) updated the diff for D2730: Improved triangle sampling for mesh lights.

Changing the sample and pdf calls to forceinline made things work on CUDA.

Jul 3 2017, 10:13 AM · Cycles
derek barker (lordodin) awarded D2730: Improved triangle sampling for mesh lights a Love token.
Jul 3 2017, 3:50 AM · Cycles

Jul 2 2017

Stefan Werner (swerner) added a comment to D2730: Improved triangle sampling for mesh lights.

This one's not quite ready yet. I'm seeing odd artifacts when using this on CUDA hardware that doesn't show up when rendering on the CPU. Can't say yet what's causing it. This needs some investigation.

Jul 2 2017, 10:07 PM · Cycles

Jul 1 2017

Stefan Werner (swerner) updated the diff for D2056: Allow CUDA GPU rendering to use host memory.

Another update to stay in sync with master.

Jul 1 2017, 10:21 PM · Cycles

Jun 30 2017

Stefan Werner (swerner) updated the diff for D2730: Improved triangle sampling for mesh lights.

A new update, taking Brecht's comments into account and a few other improvements.

Jun 30 2017, 11:39 PM · Cycles

Jun 29 2017

Stefan Werner (swerner) added a comment to D2662: Cycles: Adaptive rendering based on a norm of rendered pixels.

For such a simplistic approach, it works surprisingly well, I have to admit. However, it is very dependent on tile size: if neighbouring tiles have very different numbers of samples, you can end up with visible squares in your render, see the attached example:

Jun 29 2017, 1:09 PM

Jun 28 2017

Stefan Werner (swerner) added a comment to D2730: Improved triangle sampling for mesh lights.

Before/after video:

Jun 28 2017, 11:31 PM · Cycles
Stefan Werner (swerner) updated the diff for D2730: Improved triangle sampling for mesh lights.

Deformation motion blur is now supported too. Makes quite a difference, as before deformation motion blurred objects were not sampled as light sources.

Jun 28 2017, 11:28 PM · Cycles
Stefan Werner (swerner) updated the diff for D2730: Improved triangle sampling for mesh lights.

I added support for instancing and object motion blur. Deformation motion blur is still missing, and I don't think it was supported before either.

Jun 28 2017, 11:29 AM · Cycles
Stefan Werner (swerner) added a comment to D2730: Improved triangle sampling for mesh lights.

Jun 28 2017, 12:03 AM · Cycles

Jun 27 2017

Stefan Werner (swerner) added a comment to D2730: Improved triangle sampling for mesh lights.

I just noticed a bug in this myself - it doesn't work properly with instanced triangles, as it does not apply the transform. Will try and fix this.

Jun 27 2017, 11:25 PM · Cycles
Stefan Werner (swerner) added a reviewer for D2730: Improved triangle sampling for mesh lights: Cycles.
Jun 27 2017, 11:20 PM · Cycles
Stefan Werner (swerner) created D2730: Improved triangle sampling for mesh lights.
Jun 27 2017, 11:19 PM · Cycles

Jun 19 2017

Stefan Werner (swerner) added a comment to D2677: Cycles: Improve sample weighting of the Principled BSDF specular component.

Looks good to me. This is similar to how we handled the situation with the "Physical Root Node" in Poser.

Jun 19 2017, 3:29 PM

Apr 27 2017

Stefan Werner (swerner) committed rBec25060a05e3: Unlimited number of textures for Cycles (authored by Stefan Werner (swerner)).
Unlimited number of textures for Cycles
Apr 27 2017, 9:39 AM
Stefan Werner (swerner) closed D2650: Unlimited number of textures for Cycles by committing rBec25060a05e3: Unlimited number of textures for Cycles.
Apr 27 2017, 9:39 AM

Apr 26 2017

Stefan Werner (swerner) added inline comments to D2650: Unlimited number of textures for Cycles.
Apr 26 2017, 8:38 PM
Stefan Werner (swerner) updated the diff for D2650: Unlimited number of textures for Cycles.

Addressed DingTo's comments.

Apr 26 2017, 8:37 PM
Stefan Werner (swerner) added inline comments to D2639: Axial Orientation.
Apr 26 2017, 12:09 PM
Stefan Werner (swerner) added a comment to D2641: Multiple Orientation for the Local manipulator.

When building using Xcode 7.2.1, your code throws compiler warnings. Details in the inline code comments.

Apr 26 2017, 12:06 PM
Stefan Werner (swerner) added inline comments to D2639: Axial Orientation.
Apr 26 2017, 11:31 AM
Stefan Werner (swerner) updated the diff for D2650: Unlimited number of textures for Cycles.

Addressed Tod's comments, magic number is now replaced with a more descriptive #define.

Apr 26 2017, 11:09 AM

Apr 25 2017

Stefan Werner (swerner) added inline comments to D2643: Autokeyframe deselect.
Apr 25 2017, 5:13 PM
Stefan Werner (swerner) updated the diff for D2650: Unlimited number of textures for Cycles.

Addressed Sergey's comments and changed what should (hopefully) make OpenCL work.

Apr 25 2017, 12:43 PM
Stefan Werner (swerner) updated the diff for D2650: Unlimited number of textures for Cycles.
Apr 25 2017, 12:37 PM
Stefan Werner (swerner) updated the diff for D2650: Unlimited number of textures for Cycles.
Apr 25 2017, 12:36 PM
Stefan Werner (swerner) added a comment to D2650: Unlimited number of textures for Cycles.

I just noticed that this patch doesn't work with OpenCL, so I'll need to address that too.

Apr 25 2017, 11:45 AM
Stefan Werner (swerner) added a comment to D2650: Unlimited number of textures for Cycles.

For what it's worth, here's a Python script that will create thousands of Suzannes and put individual 1x1 pixel textures on them: http://pasteall.org/371017/python

Apr 25 2017, 11:43 AM
Stefan Werner (swerner) added a reviewer for D2650: Unlimited number of textures for Cycles: cris (InsigMathK).
Apr 25 2017, 10:34 AM
Stefan Werner (swerner) added a reviewer for D2650: Unlimited number of textures for Cycles: Tod Baudais (tod_baudais).
Apr 25 2017, 10:32 AM
Stefan Werner (swerner) created D2650: Unlimited number of textures for Cycles.
Apr 25 2017, 10:31 AM

Apr 20 2017

Stefan Werner (swerner) added an edge to rBaeda1a16f3e4: D2607: Switch eye dropper to use linear color space internally: D2607: Switch eye dropper to use linear color space internally.
Apr 20 2017, 10:42 PM
Stefan Werner (swerner) added 1 commit(s) for D2607: Switch eye dropper to use linear color space internally: rBaeda1a16f3e4: D2607: Switch eye dropper to use linear color space internally.
Apr 20 2017, 10:42 PM
Stefan Werner (swerner) committed rBaeda1a16f3e4: D2607: Switch eye dropper to use linear color space internally (authored by Stefan Werner (swerner)).
D2607: Switch eye dropper to use linear color space internally
Apr 20 2017, 10:41 PM
Stefan Werner (swerner) added 1 commit(s) for D2608: Allow HDR picking from Compositor background: rBb628f765b091: D2608: Allow HDR picking from Compositor background Replaced some STREQ(snode….
Apr 20 2017, 10:33 PM
Stefan Werner (swerner) added an edge to rBb628f765b091: D2608: Allow HDR picking from Compositor background Replaced some STREQ(snode…: D2608: Allow HDR picking from Compositor background.
Apr 20 2017, 10:33 PM
Stefan Werner (swerner) committed rBb628f765b091: D2608: Allow HDR picking from Compositor background Replaced some STREQ(snode… (authored by Stefan Werner (swerner)).
D2608: Allow HDR picking from Compositor background Replaced some STREQ(snode…
Apr 20 2017, 10:32 PM

Apr 7 2017

Stefan Werner (swerner) updated the diff for D2607: Switch eye dropper to use linear color space internally.
Apr 7 2017, 10:33 PM
Stefan Werner (swerner) added a comment to D2608: Allow HDR picking from Compositor background.

While I'm at it, shouldn't we also replace the various STREQ(snode->tree_idname, ...) calls in node_group.c with the ED_node_is_*() calls for improved readability?

Apr 7 2017, 10:19 PM
Stefan Werner (swerner) created D2608: Allow HDR picking from Compositor background.
Apr 7 2017, 10:15 PM
Stefan Werner (swerner) updated the summary of D2607: Switch eye dropper to use linear color space internally.
Apr 7 2017, 9:57 PM
Stefan Werner (swerner) updated the summary of D2607: Switch eye dropper to use linear color space internally.
Apr 7 2017, 9:56 PM
Stefan Werner (swerner) created D2607: Switch eye dropper to use linear color space internally.
Apr 7 2017, 9:52 PM

Apr 5 2017

Stefan Werner (swerner) added a comment to D2443: Render API/Cycles: Identify Render Passes by their Name instead of a type flag.

What will it take to get this and D2444 into master? I'd love to be able to have the foundation for many other passes (light groups, Cryptomatte, eventually even LPEs) to be added to Blender and Cycles.

Apr 5 2017, 2:54 PM

Mar 29 2017

Stefan Werner (swerner) added a comment to D2586: Cycles: Make all #include statements relative to cycles source directory.

This is also very useful for 3rd party integrations. I've been in a situation before where there were two headers called node.h in the header search path.

Mar 29 2017, 12:50 PM

Mar 23 2017

Stefan Werner (swerner) added a comment to D2575: Cycles: WIP: Implement UDIM texture node.

We're been on OIIO 1.7.8 since early december

Mar 23 2017, 3:22 PM
Stefan Werner (swerner) added a comment to D2575: Cycles: WIP: Implement UDIM texture node.

For support in OSL, it should only take an update to OpenImageIO 1.7 or newer:

Mar 23 2017, 2:25 PM

Mar 22 2017

Stefan Werner (swerner) updated the diff for D2056: Allow CUDA GPU rendering to use host memory.

This is an update of the patch against the latest master. It still needs to be changed to share host memory between GPUs where possible instead of creating duplicate allocations.

Mar 22 2017, 10:58 PM · Cycles
Stefan Werner (swerner) committed rB412220c8d3b7: Cycles: fixed warnings (authored by Stefan Werner (swerner)).
Cycles: fixed warnings
Mar 22 2017, 12:28 PM

Feb 17 2017

Stefan Werner (swerner) awarded D2348: Cycles: Refactor split kernel and implement for CPU a Like token.
Feb 17 2017, 11:37 AM

Oct 6 2016

Stefan Werner (swerner) added a comment to D2226: Cycles: Speedup transparent shadows on CUDA.

I have experimented in the same direction. My code was using shared memory, which should in theory be faster than global/local memory. As Brecht mentions, moving through shadow in steps of N intersections at a time could make this work for arbitrary shadow depths. One would need to find the N closest intersections then, which I would try by keeping the intersections in a sorted heap (similar to Jensen's photon mapping code). Then sorting and volumes should also be doable.

Oct 6 2016, 10:03 AM

Jul 21 2016

Stefan Werner (swerner) added inline comments to D1995: Parametric Geometry coordinates for point and area lights in Cycles.
Jul 21 2016, 3:20 AM · Cycles
Stefan Werner (swerner) updated the diff for D1995: Parametric Geometry coordinates for point and area lights in Cycles.

Here's an updated patch.

Jul 21 2016, 3:17 AM · Cycles

Jun 30 2016

Stefan Werner (swerner) added a comment to D2056: Allow CUDA GPU rendering to use host memory.

Looks like cuMemAllocHost() is not the same as malloc() followed by mlock(). While malloc/mlock easily allows me to get 14 out of 16GB on my machine, cuMemAllocHost() freezes the entire machine at 12GB.

Jun 30 2016, 7:53 AM · Cycles

Jun 29 2016

Stefan Werner (swerner) added a comment to D2032: Cycles: Implement stackless BVH traversal.

Right now ray traversal is not making any use of shared memory at all. There may be an opportunity here, either for storing a short stack or the bit mask from the Barringer paper in shared memory. If I understood the Barringer paper correctly, they compared a CPU implementation only. The differences between global/local memory access and shared memory access could give different results in a GPU implementation.

Jun 29 2016, 12:25 PM
Stefan Werner (swerner) added a comment to D2056: Allow CUDA GPU rendering to use host memory.

The change to SHADOW_RECORD_ALL wasn't meant as a permanent solution, but to compare how GPU performance would be in the largest Blender scene available to me (will happily render any other scenes). When SHADOW_RECORD_ALL is different for CPU and GPU, we're not tracing the same number of rays, and benchmarks with high levels of transparent shadows will always perform better on the CPU.

Jun 29 2016, 7:36 AM · Cycles

Jun 22 2016

Stefan Werner (swerner) added a comment to D2056: Allow CUDA GPU rendering to use host memory.

My computer just finished rendering the Victor/Gooseberry benchmark scene on two GPUs, coming in at about 1h:36m (conservative tile size of 64x64). So I think my patch is pretty solid.

Jun 22 2016, 4:00 PM · Cycles

Jun 19 2016

Stefan Werner (swerner) updated subscribers of D1985: Light Linking.
Jun 19 2016, 8:07 PM · Cycles

Jun 16 2016

Stefan Werner (swerner) added a comment to D2056: Allow CUDA GPU rendering to use host memory.

There is no swapping with pinned memory. That's the whole point about pinned memory - it always remains fixed in physical memory, at the same address, no matter how severe the OS' memory pressure is. That said, it was an SSD.

Jun 16 2016, 2:50 PM · Cycles
Stefan Werner (swerner) added a comment to D2056: Allow CUDA GPU rendering to use host memory.

Octane exposes what they call "out-of-core" textures, which I assume is textures in pinned memory, as a feature that the user has to enable and to pick how much memory it is supposed to use: https://docs.otoy.com/Standalone_2_0/?page_id=3216

Jun 16 2016, 11:32 AM · Cycles
Stefan Werner (swerner) added a comment to D2056: Allow CUDA GPU rendering to use host memory.

It might also make sense to use pinned memory for all device_vector allocations even if we want to copy memory to the GPU. That way we can use async copies which should be faster, particularly for multi GPU.

Jun 16 2016, 7:44 AM · Cycles
Stefan Werner (swerner) added a comment to D2056: Allow CUDA GPU rendering to use host memory.

Different operating systems may handle this differently, but for what it's worth, I ran a simple test on OS X. cuMemAllocHost() in a loop, allocating 200MB chunks, 100 times - which should try to allocate ~20GB in total. My machine has 16GB of physical memory. At just under 10GB allocated, the machine froze completely. That is, not even the mouse pointer will move and the machine does not respond any more to network requests. After about one or two two minutes of being frozen, the machine rebooted, the "crash" log pointing to the Watchdog task.

Jun 16 2016, 7:38 AM · Cycles

Jun 15 2016

Stefan Werner (swerner) added a comment to D2056: Allow CUDA GPU rendering to use host memory.

From the CUDA documentation it sounds like pinning all available memory may not be a good idea:

Jun 15 2016, 10:00 PM · Cycles
Stefan Werner (swerner) added a comment to D2056: Allow CUDA GPU rendering to use host memory.

It only pins the amount of memory required, no more. The user preference would only set an upper bound to that.

Jun 15 2016, 7:59 PM · Cycles
Stefan Werner (swerner) added a comment to D2056: Allow CUDA GPU rendering to use host memory.

A couple of ideas for improvement:

Jun 15 2016, 7:06 PM · Cycles
Stefan Werner (swerner) updated the diff for D2056: Allow CUDA GPU rendering to use host memory.

This should now include all changes, squashed into a single commit.

Jun 15 2016, 4:38 PM · Cycles
Stefan Werner (swerner) added a comment to D2056: Allow CUDA GPU rendering to use host memory.

Yes. I'm still trying to figure out how this system and git patches work. It looks like when I try to upload my diff file with multiple commits in it, it takes only the first one.

Jun 15 2016, 4:30 PM · Cycles
Stefan Werner (swerner) added a comment to D2056: Allow CUDA GPU rendering to use host memory.

This seems to be solid enough to allow me to launch a render of the Gooseberry benchmark scene on my 4GB GPU with TDR turned off. However, some tiles render extremely slow (counting seconds per sample instead of samples per second!), I haven't found out yet what crazy things happening in them.

Jun 15 2016, 4:20 PM · Cycles
Stefan Werner (swerner) added a comment to T48651: Allow CUDA GPU rendering to use host memory.

OK, here you are: https://developer.blender.org/D2056

Jun 15 2016, 4:17 PM · Cycles
Stefan Werner (swerner) retitled D2056: Allow CUDA GPU rendering to use host memory from to Allow CUDA GPU rendering to use host memory.
Jun 15 2016, 4:17 PM · Cycles
Stefan Werner (swerner) added a comment to T48651: Allow CUDA GPU rendering to use host memory.

I have attached a patch should hopefully take care of the Linux memory query. Apply this on top of the first patch.

Jun 15 2016, 12:25 PM · Cycles
Stefan Werner (swerner) added a comment to T48651: Allow CUDA GPU rendering to use host memory.

The code for determining the amount of physical system memory is not implemented yet for Linux - I am about to create a Linux VM to implement and test that part. So it is possible that the current patch is not working as intended on Linux systems.

Jun 15 2016, 8:42 AM · Cycles

Jun 14 2016

Stefan Werner (swerner) added a comment to T48651: Allow CUDA GPU rendering to use host memory.

I can get the Victor scene to start rendering on the GPU, but it fails with a kernel time out after about 20 tiles (using the default small tile size). Maybe someone with TDR turned off can try benchmarking it?

Jun 14 2016, 10:54 PM · Cycles
Stefan Werner (swerner) added a comment to T48651: Allow CUDA GPU rendering to use host memory.

PCIe bandwidth seems to be the main factor here. When I move the K5000 to a slower slot (x4 instead of x16), performance drops dramatically. I haven't had the patience to let it run all the way through, but the BMW scene with all data in host memory is still at the first tile after 4 minutes, showing a remaining estimate of over one hour.

Jun 14 2016, 6:08 PM · Cycles