-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathRenderEngine.Settings.cs
129 lines (114 loc) · 3.55 KB
/
RenderEngine.Settings.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/**
Copyright 2014-2024 Robert McNeel and Associates
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
**/
using RhinoCyclesCore.Core;
using RhinoCyclesCore.Settings;
using System.Drawing;
namespace RhinoCyclesCore
{
partial class RenderEngine
{
/// <summary>
/// Get or set the resolution for rendering.
/// </summary>
public Size RenderDimension { get; set; }
private int _pixelSize = 1;
/// <summary>
/// Get or set the pixel size.
/// </summary>
public int PixelSize
{
get { return _pixelSize; }
set { _pixelSize = value >= 1 ? value : 1; }
}
public enum AdvancedSettings
{
Seed,
Samples,
MaxBounce,
MaxDiffuseBounce,
MaxGlossyBounce,
MaxTransmissionBounce,
MaxVolumeBounce,
TransparentMaxBounce,
}
/// <summary>
/// The amount of threads requested for raytracing (on Cpu).
/// </summary>
public int ThreadCount { get; set; } = 0;
private uint _oldIntegratorHash = 0;
/// <summary>
/// The render device set to this render engine implementation.
/// </summary>
public ccl.Device RenderDevice { get; set; }
/// <summary>
/// True if the render device we wanted to use wasn't ready. Instead we're using the
/// fallback device
/// </summary>
public bool IsFallbackRenderDevice { get; set; } = false;
/// <summary>
/// Sleep in ms between each pass
/// </summary>
protected int _throttle { get; set; } = 30;
/// <summary>
/// Maximum samples this session will render
/// </summary>
public int MaxSamples { get; set; } = 1;
protected bool _needReset { get; set; }
public int _textureBakeQuality { get; set; } = 0;
public void HandleIntegrator(IAllSettings settings)
{
if (Session != null && Session.Scene != null)
{
var hash = settings.IntegratorHash;
if (hash != _oldIntegratorHash)
{
var integrator = Session.Scene.Integrator;
integrator.Seed = settings.Seed;
integrator.MaxBounce = settings.MaxBounce;
integrator.MaxDiffuseBounce = settings.MaxDiffuseBounce;
integrator.MaxGlossyBounce = settings.MaxGlossyBounce;
integrator.MaxTransmissionBounce = settings.MaxTransmissionBounce;
integrator.MaxVolumeBounce = settings.MaxVolumeBounce;
integrator.UseAdaptiveSampling = settings.UseAdaptiveSampling;
integrator.AdaptiveMinSamples = settings.AdaptiveMinSamples;
integrator.AdaptiveThreshold = settings.AdaptiveThreshold;
integrator.TagForUpdate();
_needReset = true;
_oldIntegratorHash = hash;
}
Session.SetSamples(settings.Samples);
}
}
public void HandleDevice(IAllSettings settings)
{
if(Rhino.RhinoApp.IsSafeModeEnabled)
{
RenderDevice = ccl.Device.Default;
} else
{
var device = RcCore.It.IsDeviceReady(settings.RenderDevice);
RenderDevice = device.actualDevice;
IsFallbackRenderDevice = !device.isDeviceReady;
}
_textureBakeQuality = settings.TextureBakeQuality;
_throttle = settings.ThrottleMs;
MaxSamples = settings.Samples;
if (Session != null && Session.Scene != null)
{
HandleIntegrator(settings);
_needReset = true;
Session.SetSamples(settings.Samples);
}
}
}
}