forked from blender/blender
Code improvements + Mix node #30
@ -240,46 +240,42 @@ NODE_SHADER_MATERIALX_BEGIN
|
||||
detail_scale = detail_scale * val(10.0f);
|
||||
|
||||
NodeItem pos = vector * scale;
|
||||
//pos = (pos + val(0.000001f)) * val(0.999999f);
|
||||
|
||||
NodeItem fractal = create_node("fractal3d",
|
||||
NodeItem::Type::Float,
|
||||
{{"position", pos},
|
||||
{"octaves", val(int(detail.value->asA<float>()))},
|
||||
{"lacunarity", val(2.0f)}});
|
||||
NodeItem n = val(0.0f);
|
||||
NodeItem value = val(0.0f);
|
||||
|
||||
switch (tex->wave_type) {
|
||||
case SHD_WAVE_BANDS:
|
||||
switch (tex->bands_direction) {
|
||||
case SHD_WAVE_BANDS_DIRECTION_X:
|
||||
n = pos[0] * val(20.0f);
|
||||
value = pos[0] * val(20.0f);
|
||||
break;
|
||||
case SHD_WAVE_BANDS_DIRECTION_Y:
|
||||
n = pos[1] * val(20.0f);
|
||||
value = pos[1] * val(20.0f);
|
||||
break;
|
||||
case SHD_WAVE_BANDS_DIRECTION_Z:
|
||||
n = pos[2] * val(20.0f);
|
||||
value = pos[2] * val(20.0f);
|
||||
break;
|
||||
case SHD_WAVE_BANDS_DIRECTION_DIAGONAL:
|
||||
n = (pos[0] + pos[1] + pos[2]) * val(10.0f);
|
||||
value = (pos[0] + pos[1] + pos[2]) * val(10.0f);
|
||||
break;
|
||||
default:
|
||||
BLI_assert_unreachable();
|
||||
}
|
||||
break;
|
||||
case SHD_WAVE_RINGS:
|
||||
NodeItem rp = pos;
|
||||
NodeItem rpos = pos;
|
||||
switch (tex->rings_direction) {
|
||||
case SHD_WAVE_RINGS_DIRECTION_X:
|
||||
rp = rp * val(MaterialX::Vector3(0.0f, 1.0f, 1.0f));
|
||||
rpos = pos * val(MaterialX::Vector3(0.0f, 1.0f, 1.0f));
|
||||
break;
|
||||
case SHD_WAVE_RINGS_DIRECTION_Y:
|
||||
rp = rp * val(MaterialX::Vector3(1.0f, 0.0f, 1.0f));
|
||||
rpos = pos * val(MaterialX::Vector3(1.0f, 0.0f, 1.0f));
|
||||
break;
|
||||
case SHD_WAVE_RINGS_DIRECTION_Z:
|
||||
rp = rp * val(MaterialX::Vector3(1.0f, 1.0f, 0.0f));
|
||||
rpos = pos * val(MaterialX::Vector3(1.0f, 1.0f, 0.0f));
|
||||
break;
|
||||
case SHD_WAVE_RINGS_DIRECTION_SPHERICAL:
|
||||
/* Ignore. */
|
||||
@ -287,27 +283,28 @@ NODE_SHADER_MATERIALX_BEGIN
|
||||
default:
|
||||
BLI_assert_unreachable();
|
||||
}
|
||||
n = rp.dotproduct(rp).sqrt() * val(20.0f);
|
||||
value = rpos.length() * val(20.0f);
|
||||
break;
|
||||
}
|
||||
n = n + phase_offset + distortion * detail_scale * fractal;
|
||||
value = value + phase_offset + distortion * detail_scale * fractal;
|
||||
|
||||
NodeItem res = empty();
|
||||
switch (tex->wave_profile) {
|
||||
case SHD_WAVE_PROFILE_SIN:
|
||||
value = val(0.5f) + val(0.5f) * (n - val(float(M_PI_2))).sin();
|
||||
res = val(0.5f) + val(0.5f) * (value - val(float(M_PI_2))).sin();
|
||||
break;
|
||||
case SHD_WAVE_PROFILE_SAW:
|
||||
n = n / val(float(M_PI * 2.0f));
|
||||
value = n - n.floor();
|
||||
value = value / val(float(M_PI * 2.0f));
|
||||
res = value - value.floor();
|
||||
break;
|
||||
case SHD_WAVE_PROFILE_TRI:
|
||||
n = n / val(float(M_PI * 2.0f));
|
||||
value = (n - (n + val(0.5f)).floor()).abs() * val(2.0f);
|
||||
value = value / val(float(M_PI * 2.0f));
|
||||
res = (value - (value + val(0.5f)).floor()).abs() * val(2.0f);
|
||||
break;
|
||||
default:
|
||||
BLI_assert_unreachable();
|
||||
}
|
||||
return value;
|
||||
return res;
|
||||
}
|
||||
#endif
|
||||
NODE_SHADER_MATERIALX_END
|
||||
|
Loading…
Reference in New Issue
Block a user