diff --git a/trimesh/exchange/dae.py b/trimesh/exchange/dae.py
index 681dc1cd..60c1b43b 100644
--- a/trimesh/exchange/dae.py
+++ b/trimesh/exchange/dae.py
@@ -312,7 +312,8 @@ def _parse_material(effect, resolver):
     # Compute opacity
     if (effect.transparent is not None
             and not isinstance(effect.transparent, collada.material.Map)):
-        baseColorFactor = tuple(np.append(baseColorFactor[:3], effect.transparent[3]))
+        baseColorFactor = tuple(
+            np.append(baseColorFactor[:3], float(int(255 * effect.transparent[3]))))
 
     return visual.material.PBRMaterial(
         emissiveFactor=emissiveFactor,
diff --git a/trimesh/version.py b/trimesh/version.py
index 9b73fde9..f2a6f705 100644
--- a/trimesh/version.py
+++ b/trimesh/version.py
@@ -1,1 +1,1 @@
-__version__ = '3.6.42'
+__version__ = '3.6.43'
diff --git a/trimesh/visual/color.py b/trimesh/visual/color.py
index 682fc53b..961f6044 100644
--- a/trimesh/visual/color.py
+++ b/trimesh/visual/color.py
@@ -439,7 +439,7 @@ class ColorVisuals(Visuals):
         return color
 
     def to_texture(self):
-        from .materials import from_color
+        from .material import from_color
         from .texture import TextureVisuals
         mat, uv = from_color(vertex_colors=self.vertex_colors)
         return TextureVisuals(material=mat, uv=uv)
@@ -584,7 +584,7 @@ def to_rgba(colors, dtype=np.uint8):
             opaque * np.ones(len(colors)))).astype(dtype)
     elif util.is_shape(colors, (3,)):
         # if passed a single RGB color add an alpha
-        colors = np.append(colors, opaque)
+        colors = np.append(colors, opaque).astype(dtype)
 
     if not (util.is_shape(colors, (4,)) or
             util.is_shape(colors, (-1, 4))):
diff --git a/trimesh/visual/material.py b/trimesh/visual/material.py
index 9a750927..4ac7a2d3 100644
--- a/trimesh/visual/material.py
+++ b/trimesh/visual/material.py
@@ -94,10 +94,10 @@ class SimpleMaterial(Material):
         mtl = '\n'.join(
             ['# https://github.com/mikedh/trimesh',
              'newmtl {}'.format(tex_name),
-             'Ka {} {} {}'.format(*Ka),
-             'Kd {} {} {}'.format(*Kd),
-             'Ks {} {} {}'.format(*Ks),
-             'Ns {}'.format(self.glossiness),
+             'Ka {:0.8f} {:0.8f} {:0.8f}'.format(*Ka),
+             'Kd {:0.8f} {:0.8f} {:0.8f}'.format(*Kd),
+             'Ks {:0.8f} {:0.8f} {:0.8f}'.format(*Ks),
+             'Ns {:0.8f}'.format(self.glossiness),
              'map_Kd {}'.format(image_name)])
 
         # save the image texture as bytes in the original format
diff --git a/trimesh/voxel/ops.py b/trimesh/voxel/ops.py
index 30745214..71993f91 100644
--- a/trimesh/voxel/ops.py
+++ b/trimesh/voxel/ops.py
@@ -100,7 +100,7 @@ fill_voxelization = fill_base
 
 def matrix_to_marching_cubes(matrix, pitch=1.0):
     """
-    Convert an (n,m,p) matrix into a mesh, using marching_cubes.
+    Convert an (n, m, p) matrix into a mesh, using marching_cubes.
 
     Parameters
     -----------

Exported mesh as .obj appears as solid black color by default
Hi, 

I am trying to export a mesh as .obj. The code looks like this:
`export, texture = trimesh.exchange.obj.export_obj(mesh, include_color=True, include_texture=True)`

`with trimesh.util.TemporaryDirectory() as path:`
    `obj_path = os.path.join('', 'file_name.obj')`
    `with open(obj_path, 'w') as f:`
        `f.write(export)`
    `for k, v in texture.items():`
        `with open(os.path.join('', k), 'wb') as f:`
            `f.write(v)`

When this obj is loaded again, the model appears in solid black color. As expected the mesh must conserve its color coordinates. I also tried to visualize it in blender API and it displays the mesh in black color by default (as seen in the below image). 

![mesh](https://user-images.githubusercontent.com/22175791/82459996-e8e1e600-9ab8-11ea-9fbe-bf585f2ae5d0.png)

I get the colored model only after changing the mode (display rendered preview in blender api). Could you please tell me how I can get the colored model by default when I load the exported mesh?

Used trimesh version: `3.6.38`

Thank you!
diff --git a/tests/test_texture.py b/tests/test_texture.py
index f9cfb0a4..47768d98 100644
--- a/tests/test_texture.py
+++ b/tests/test_texture.py
@@ -119,6 +119,17 @@ class TextureTest(g.unittest.TestCase):
         assert g.np.allclose(c.visual.material.image.size,
                              a.visual.material.image.size)
 
+    def test_to_tex(self):
+
+        m = g.trimesh.creation.box()
+        color = [255, 0, 0, 255]
+        m.visual.face_colors = color
+        # convert color visual to texture
+        m.visual = m.visual.to_texture()
+        # convert back to color
+        m.visual = m.visual.to_color()
+        assert g.np.allclose(m.visual.main_color, color)
+
 
 if __name__ == '__main__':
     g.trimesh.util.attach_to_log()

pip install -e .[all]
parse_log_pytest
pytest
pytest pytest-cov
apt-get update apt-get install -y libspatialindex-dev libgeos-dev
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///opt/conda/conda-bld/attrs_1642510447205/work
autoprop==4.1.0
backports.cached-property==1.0.2
certifi==2021.5.30
chardet==5.0.0
charset-normalizer==2.0.12
colorlog==6.9.0
coverage==6.2
cycler==0.11.0
Cython==3.0.12
decorator==4.4.2
glooey==0.3.6
idna==3.10
imageio==2.15.0
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1631916693255/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
jsonschema==3.2.0
kiwisolver==1.3.1
lxml==5.3.1
matplotlib==3.3.4
meshio==4.4.6
more-itertools @ file:///tmp/build/80754af9/more-itertools_1637733554872/work
mpmath==1.3.0
msgpack==1.0.5
networkx==2.5.1
numpy==1.19.5
packaging @ file:///tmp/build/80754af9/packaging_1637314298585/work
Pillow==8.4.0
pluggy @ file:///tmp/build/80754af9/pluggy_1615976315926/work
psutil==7.0.0
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pycollada==0.8
pyglet==2.0.10
pyparsing @ file:///tmp/build/80754af9/pyparsing_1635766073266/work
pyrsistent==0.18.0
pytest==6.2.4
pytest-cov==4.0.0
python-dateutil==2.9.0.post0
python-fcl==0.7.0.5
PyWavelets==1.1.1
PyYAML==6.0.1
requests==2.27.1
Rtree==0.9.7
scikit-image==0.17.2
scipy==1.5.4
Shapely==1.8.5.post1
signature_dispatch==1.0.0
six==1.17.0
svg.path==6.2
sympy==1.9
tifffile==2020.9.3
toml @ file:///tmp/build/80754af9/toml_1616166611790/work
tomli==1.2.3
triangle==20220202
-e git+https://github.com/mikedh/trimesh.git@5abd7553727ab9294d6b9bf475e11c33784ae391#egg=trimesh
typeguard==2.13.3
typing==3.7.4.3
typing_extensions @ file:///opt/conda/conda-bld/typing_extensions_1647553014482/work
urllib3==1.26.20
vecrec==0.3.1
xxhash==3.2.0
zipp @ file:///tmp/build/80754af9/zipp_1633618647012/work

name: trimesh
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=21.4.0=pyhd3eb1b0_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - importlib-metadata=4.8.1=py36h06a4308_0
  - importlib_metadata=4.8.1=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - more-itertools=8.12.0=pyhd3eb1b0_0
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=21.3=pyhd3eb1b0_0
  - pip=21.2.2=py36h06a4308_0
  - pluggy=0.13.1=py36h06a4308_0
  - py=1.11.0=pyhd3eb1b0_0
  - pyparsing=3.0.4=pyhd3eb1b0_0
  - pytest=6.2.4=py36h06a4308_2
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - toml=0.10.2=pyhd3eb1b0_0
  - typing_extensions=4.1.1=pyh06a4308_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.6.0=pyhd3eb1b0_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - autoprop==4.1.0
      - backports-cached-property==1.0.2
      - chardet==5.0.0
      - charset-normalizer==2.0.12
      - colorlog==6.9.0
      - coverage==6.2
      - cycler==0.11.0
      - cython==3.0.12
      - decorator==4.4.2
      - glooey==0.3.6
      - idna==3.10
      - imageio==2.15.0
      - jsonschema==3.2.0
      - kiwisolver==1.3.1
      - lxml==5.3.1
      - matplotlib==3.3.4
      - meshio==4.4.6
      - mpmath==1.3.0
      - msgpack==1.0.5
      - networkx==2.5.1
      - numpy==1.19.5
      - pillow==8.4.0
      - psutil==7.0.0
      - pycollada==0.8
      - pyglet==2.0.10
      - pyrsistent==0.18.0
      - pytest-cov==4.0.0
      - python-dateutil==2.9.0.post0
      - python-fcl==0.7.0.5
      - pywavelets==1.1.1
      - pyyaml==6.0.1
      - requests==2.27.1
      - rtree==0.9.7
      - scikit-image==0.17.2
      - scipy==1.5.4
      - shapely==1.8.5.post1
      - signature-dispatch==1.0.0
      - six==1.17.0
      - svg-path==6.2
      - sympy==1.9
      - tifffile==2020.9.3
      - tomli==1.2.3
      - triangle==20220202
      - typeguard==2.13.3
      - typing==3.7.4.3
      - urllib3==1.26.20
      - vecrec==0.3.1
      - xxhash==3.2.0
prefix: /opt/conda/envs/trimesh

tests/test_texture.py::TextureTest::test_to_tex
tests/test_texture.py::TextureTest::test_concatenate tests/test_texture.py::TextureTest::test_fuze tests/test_texture.py::TextureTest::test_upsize tests/test_texture.py::TextureTest::test_uv_to_color
trimesh/visual/material.py trimesh/voxel/ops.py trimesh/exchange/dae.py trimesh/version.py trimesh/visual/color.py
trimesh/visual/material.py trimesh/voxel/ops.py trimesh/exchange/dae.py trimesh/version.py trimesh/visual/color.py