Fusion体积光(Volumetric Lighting)

Volumetric Lighting


介绍一下Fusion的体积光视频里讲的不是很清楚,可以自己看一下体积光光的定义,其实可以理解为丁达尔效应就是能看到的光线,一般出现在大气中有雾气或灰尘。太阳刚好投射在上面,被分割成一条条,有时成一大片。

丁达尔效应

Fusion 渲染器


Fusin的渲染器是非常非常古老OpenGL渲染器。

  • 高情商的说:就是兼容性优秀且快速的渲染器。
  • 低情商的说:就是依托答辩,没有光线追踪,没有SSS材质不支持PBR,甚至连反射都没有,严重脱节现代的所有渲染器与3D软件

在Fusion内甚至不能够直接渲染体积光,只能用后期的方式实现。
就在前段时间Fuison 18.5加入了新的USD工具,加入了新的Storm渲染器好消息是渲染速度非常快,坏消息是完全满足不了工作需求,KD插件还G了
也不清楚BMD未来要怎样发展Fusin。

实现体积光


前面说了体积光类似丁达尔效应,其实在Fusion里也类似,Fusion有一种叫做体积雾(Volume Fog)的后期效果(并不能读取VDB文件)这个效果还能接收3D场景里的灯光信息,只需要让灯光照在体积雾上就能实现体积光的效果。

  • 先建一个简单的3D场景

新建场景

  • 用一个很大的模型把场景和相机都包住,这样渲染出来的World Position通道会更准确。将模型的材质透明度改为0,并且取消掉抑制透明像素的辅助通道的勾选,可以让模型不可见但能渲染辅助通道。

WPP优化

  • 渲染的时候勾上World Position通道,然后使用Volume Fog节点,连接后调整体积雾的大小覆盖整个场景。建场景的时候已经放置了灯光,在Volume Fog中勾选使用照明就能看到体积光。

Volume Fog:输入图像需要带有World Position通道,并且要有一个和通道匹配的相机连接,连接场景时会自带选择相机。

体积雾

  • 详细参数可以自己看工程,如果需要有纹理的灯光可以使用Projector3D节点。
    • 做体积光时可以提高体积雾采样率,我一般用128左右。
    • 不想看到黑色的雾可以将颜色里的Alpha调为0
    • 灯光推荐使用线性或者二次方的模式这两种模式的衰减更接近现时,但大场景衰减过于严重。
    • 更多的体积雾设置可以在照明一组里找到。
    • 制作时请务必要体积雾铺满你的场景。
    • 如果你只是想做丁达尔效应或者上帝之光的效果可以使用DirectionalBlur或者Rays节点。

工程


复制后到达芬奇Fuiosn页面或者独立版里黏贴。

带贴图的体积雾

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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
{
Tools = ordered() {
VolumeFog1 = VolumeFog {
CtrlWZoom = false,
Inputs = {
["Rotate.RotOrder"] = Input { Value = FuID { "XYZ" }, },
ScaleNest = Input { Value = 1, },
["Scale.X"] = Input { Value = 5, },
["Scale.Y"] = Input { Value = 5, },
Size = Input { Value = 8.03, },
Dither = Input { Value = 0, },
Samples = Input { Value = 256, },
["Noise.Rotate.RotOrder"] = Input { Value = FuID { "XYZ" }, },
["Noise.Scale.Lock"] = Input { Value = 1, },
Camera = Input { Value = FuID { "Camera3D1" }, },
DoLighting = Input { Value = 1, },
Reflection = Input { Value = 10, },
Image = Input {
SourceOp = "Renderer3D1",
Source = "Output",
},
SceneInput = Input {
SourceOp = "Merge3D1",
Source = "Output",
},
},
ViewInfo = OperatorInfo { Pos = { 935, -82.5 } },
},
FastNoise1 = FastNoise {
Inputs = {
EffectMask = Input {
SourceOp = "Ellipse1",
Source = "Mask",
},
GlobalOut = Input { Value = 250, },
Width = Input { Value = 1000, },
Height = Input { Value = 1000, },
["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
Detail = Input { Value = 10, },
Contrast = Input { Value = 2.59, },
Brightness = Input { Value = -0.37, },
XScale = Input { Value = 11.65, },
SeetheRate = Input { Value = 0.1, },
},
ViewInfo = OperatorInfo { Pos = { 715, -148.5 } },
},
Shape3D3_2 = Shape3D {
Inputs = {
["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 1, },
["SurfaceCubeInputs.Height"] = Input { Value = 6, },
["SurfaceSphereInputs.ObjectID.ObjectID"] = Input { Value = 5, },
["SurfaceCubeInputs.ObjectID.ObjectID"] = Input { Value = 2, },
["SurfaceCylinderInputs.ObjectID.ObjectID"] = Input { Value = 6, },
SceneInput = Input {
SourceOp = "Projector3D1",
Source = "Output",
},
["Transform3DOp.Translate.Y"] = Input { Value = 3.28933866575572, },
["Transform3DOp.Rotate.Y"] = Input {
Value = 68.5,
Expression = "time",
},
Shape = Input { Value = FuID { "SurfaceConeInputs" }, },
["MtlStdInputs.Diffuse.Color.Green"] = Input { Value = 0, },
["MtlStdInputs.Diffuse.Color.Blue"] = Input { Value = 0, },
["MtlStdInputs.ReceivesLighting"] = Input { Value = 0, },
["MtlStdInputs.ReceivesShadows"] = Input { Value = 0, },
["MtlStdInputs.MaterialID"] = Input { Value = 10, },
["SurfaceConeInputs.Radius"] = Input { Value = 0.47, },
["SurfaceConeInputs.Height"] = Input { Value = 0.6, },
["SurfaceConeInputs.Wireframe"] = Input { Value = 1, },
["SurfaceConeInputs.ObjectID.ObjectID"] = Input { Value = 7, }
},
ViewInfo = OperatorInfo { Pos = { 715, -82.5 } },
},
Projector3D1 = LightProjector {
Inputs = {
["Transform3DOp.Translate.Y"] = Input { Value = 0.3, },
["Transform3DOp.Rotate.Y"] = Input { Value = -250, },
DecayType = Input { Value = 1, },
Angle = Input { Value = 29.7, },
ProjectiveImage = Input {
SourceOp = "FastNoise1",
Source = "Output",
},
},
ViewInfo = OperatorInfo { Pos = { 715, -115.5 } },
},
Renderer3D1 = Renderer3D {
CustomData = {
ToolVersion = 2,
},
Inputs = {
GlobalOut = Input { Value = 250, },
Width = Input { Value = 1920, },
Height = Input { Value = 1080, },
["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
SceneInput = Input {
SourceOp = "Merge3D1",
Source = "Output",
},
RendererType = Input { Value = FuID { "RendererOpenGL" }, },
["RendererOpenGL.Channels.Nest"] = Input { Value = 1, },
["RendererOpenGL.Channels.WorldCoord"] = Input { Value = 1, },
["RendererOpenGL.AntiAliasing.Nest"] = Input { Value = 1, },
["RendererOpenGL.AntiAliasing.Channels.RGBA.HighQuality.Enable"] = Input { Value = 1, },
["RendererOpenGL.AntiAliasing.Presets.Nest"] = Input { Value = 1, },
["RendererOpenGL.AntiAliasing.Presets.Color.Supersampling.HighQuality.RateX"] = Input { Value = 1, },
["RendererOpenGL.AntiAliasing.Presets.Color.Supersampling.HighQuality.RateY"] = Input { Value = 3, },
["RendererOpenGL.AntiAliasing.Presets.Color.Multisampling.LowQuality.SampleCount"] = Input { Value = 2, },
["RendererOpenGL.AntiAliasing.Presets.Color.Multisampling.HighQuality.SampleCount"] = Input { Value = 3, },
["RendererOpenGL.AntiAliasing.Presets.Aux.Supersampling.HighQuality.RateX"] = Input { Value = 3, },
["RendererOpenGL.AntiAliasing.Presets.Aux.Supersampling.HighQuality.RateY"] = Input { Value = 3, },
["RendererOpenGL.AntiAliasing.Presets.Aux.Multisampling.LowQuality.SampleCount"] = Input { Value = 2, },
["RendererOpenGL.AntiAliasing.Presets.Aux.Multisampling.HighQuality.SampleCount"] = Input { Value = 3, },
["RendererOpenGL.AccumQuality"] = Input { Value = 32, },
["RendererOpenGL.LightingEnabled"] = Input { Value = 1, },
["RendererOpenGL.Texturing"] = Input { Value = 1, },
["RendererOpenGL.TextureDepth"] = Input { Value = 0, },
},
ViewInfo = OperatorInfo { Pos = { 935, 16.5 } },
SubInputsData = {
RendererOpenGL = {
Version = 1
}
}
},
Merge3D1 = Merge3D {
Inputs = {
SceneInput1 = Input {
SourceOp = "Shape3D3",
Source = "Output",
},
SceneInput2 = Input {
SourceOp = "Transform3D1",
Source = "Output",
},
SceneInput4 = Input {
SourceOp = "Shape3D3_1",
Source = "Output",
},
},
ViewInfo = OperatorInfo { Pos = { 715, 16.5 } },
},
Shape3D3_1 = Shape3D {
Inputs = {
["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 1, },
["SurfaceSphereInputs.ObjectID.ObjectID"] = Input { Value = 3, },
["SurfaceCylinderInputs.ObjectID.ObjectID"] = Input { Value = 4, },
SceneInput = Input {
SourceOp = "Shape3D3_2",
Source = "Output",
},
["Transform3DOp.Translate.Y"] = Input { Value = -2.811, },
["Transform3DOp.Rotate.Y"] = Input {
Value = 68.5,
Expression = "time",
},
Shape = Input { Value = FuID { "SurfaceCubeInputs" }, },
["MtlStdInputs.ReceivesLighting"] = Input { Value = 0, },
["MtlStdInputs.ReceivesShadows"] = Input { Value = 0, },
["MtlStdInputs.MaterialID"] = Input { Value = 10, },
["SurfaceCubeInputs.SizeLock"] = Input { Value = 0, },
["SurfaceCubeInputs.Height"] = Input { Value = 6, },
["SurfaceCubeInputs.SubdivisionWidth"] = Input { Value = 1, },
["SurfaceCubeInputs.SubdivisionDepth"] = Input { Value = 1, },
["SurfaceCubeInputs.Wireframe"] = Input { Value = 1, },
["SurfaceCubeInputs.ObjectID.ObjectID"] = Input { Value = 2, }
},
ViewInfo = OperatorInfo { Pos = { 715, -49.5 } },
},
Ellipse1 = EllipseMask {
Inputs = {
Filter = Input { Value = FuID { "Fast Gaussian" }, },
SoftEdge = Input { Value = 0.06, },
MaskWidth = Input { Value = 1920, },
MaskHeight = Input { Value = 1080, },
PixelAspect = Input { Value = { 1, 1 }, },
ClippingMode = Input { Value = FuID { "None" }, },
Width = Input { Value = 0.925303860540315, },
Height = Input { Value = 0.925303860540315, },
},
ViewInfo = OperatorInfo { Pos = { 605, -148.5 } },
},
SpotLight1 = LightSpot {
Inputs = {
["Transform3DOp.Translate.Y"] = Input { Value = 0.3, },
["Transform3DOp.Rotate.Y"] = Input { Value = -250, },
DecayType = Input { Value = 1, },
ConeAngle = Input { Value = 24.09, },
PenumbraAngle = Input { Value = 8.03, },
Dropoff = Input { Value = 2.94, },
},
ViewInfo = OperatorInfo { Pos = { 605, -115.5 } },
},
Transform3D1 = Transform3D {
Inputs = {
SceneInput = Input {
SourceOp = "Camera3D1",
Source = "Output",
},
["Transform3DOp.Translate.X"] = Input {
SourceOp = "Transform3D1X轴偏移",
Source = "Value",
},
["Transform3DOp.Translate.Y"] = Input { Value = 0.0330901880861674, },
["Transform3DOp.Translate.Z"] = Input { Value = -0.104703038902101, },
},
ViewInfo = OperatorInfo { Pos = { 715, 82.5 } },
},
["Transform3D1X轴偏移"] = BezierSpline {
SplineColor = { Red = 251, Green = 0, Blue = 0 },
CtrlWZoom = false,
KeyFrames = {
[0] = { 0, RH = { 30, 0.40283416814058 }, Flags = { Linear = true } },
[90] = { 1.20850250442174, LH = { 60, 0.805668336281161 }, RH = { 143.333333333333, 1.80100166961449 }, Flags = { Linear = true } },
[250] = { 2.986, LH = { 196.666666666667, 2.39350083480725 }, Flags = { Linear = true } }
}
},
Shape3D3 = Shape3D {
Inputs = {
["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 1, },
Shape = Input { Value = FuID { "SurfaceCubeInputs" }, },
["MtlStdInputs.Diffuse.Opacity"] = Input { Value = 0, },
["MtlStdInputs.MaterialID"] = Input { Value = 10, },
["SurfaceCubeInputs.Width"] = Input { Value = 150, },
["SurfaceCubeInputs.Visibility.Nest"] = Input { Value = 1, },
["SurfaceCubeInputs.Visibility.IgnoreTransparentPixelsInAuxChannels"] = Input { Value = 0, },
["SurfaceCubeInputs.ObjectID.ObjectID"] = Input { Value = 2, },
["SurfaceSphereInputs.ObjectID.ObjectID"] = Input { Value = 3, }
},
ViewInfo = OperatorInfo { Pos = { 550, 16.5 } },
},
Camera3D1 = Camera3D {
Inputs = {
["Transform3DOp.Translate.X"] = Input { Value = -0.224205562895926, },
["Transform3DOp.Translate.Z"] = Input { Value = 24.7021443373949, },
AoV = Input { Value = 19.2642683071402, },
["Stereo.Mode"] = Input { Value = FuID { "OffAxis" }, },
FilmGate = Input { Value = FuID { "BMD_URSA_4K_16x9" }, },
ApertureW = Input { Value = 0.831496062992126, },
ApertureH = Input { Value = 0.467716535433071, },
["SurfacePlaneInputs.ObjectID.ObjectID"] = Input { Value = 1, },
["MtlStdInputs.MaterialID"] = Input { Value = 1, },
},
ViewInfo = OperatorInfo { Pos = { 715, 115.5 } },
}
}
}