|
@@ -48,9 +48,9 @@ class ImageReader(MeshReader):
|
|
|
|
|
|
def _read(self, file_name):
|
|
|
size = max(self._ui.getWidth(), self._ui.getDepth())
|
|
|
- return self._generateSceneNode(file_name, size, self._ui.peak_height, self._ui.base_height, self._ui.smoothing, 512, self._ui.lighter_is_higher, self._ui.use_logarithmic_function)
|
|
|
+ return self._generateSceneNode(file_name, size, self._ui.peak_height, self._ui.base_height, self._ui.smoothing, 512, self._ui.lighter_is_higher, self._ui.use_logarithmic_function, self._ui.transmittance_1mm)
|
|
|
|
|
|
- def _generateSceneNode(self, file_name, xz_size, peak_height, base_height, blur_iterations, max_size, lighter_is_higher, use_logarithmic_function):
|
|
|
+ def _generateSceneNode(self, file_name, xz_size, peak_height, base_height, blur_iterations, max_size, lighter_is_higher, use_logarithmic_function, transmittance_1mm):
|
|
|
scene_node = SceneNode()
|
|
|
|
|
|
mesh = MeshBuilder()
|
|
@@ -127,10 +127,11 @@ class ImageReader(MeshReader):
|
|
|
Job.yieldThread()
|
|
|
|
|
|
if use_logarithmic_function:
|
|
|
- min_luminance = 2.0 ** (peak_height - base_height)
|
|
|
+ p = 1.0 / math.log(transmittance_1mm / 100.0, 2)
|
|
|
+ min_luminance = 2.0 ** ((peak_height - base_height) / p)
|
|
|
for (y, x) in numpy.ndindex(height_data.shape):
|
|
|
mapped_luminance = min_luminance + (1.0 - min_luminance) * height_data[y, x]
|
|
|
- height_data[y, x] = peak_height - math.log(mapped_luminance, 2)
|
|
|
+ height_data[y, x] = peak_height - p * math.log(mapped_luminance, 2)
|
|
|
else:
|
|
|
height_data *= scale_vector.y
|
|
|
height_data += base_height
|