Bagaimana saya bisa memasukkan informasi warna titik dalam file .OBJ?

25

File .obj yang saya ekspor adalah data yang hilang untuk warna titik. Apakah ada cara untuk memasukkan informasi warna dalam file .obj? Jika tidak, apa alternatifnya?

Mina Samy
sumber

Jawaban:

9

Blender dapat mengekspor file PLY (.ply), yang berbasis teks, sangat mudah diurai, dan termasuk warna simpul. Cara yang sulit adalah mengubah kode eksportir OBJ sehingga mencakup warna simpul (sehingga melanggar kompatibilitas obj).

Ravachol
sumber
8
Cara yang salah adalah mengubah eksportir OBJ. Gunakan alat yang tepat untuk pekerjaan itu; jika Anda ingin warna titik, Wavefront OBJ jelas bukan alat yang ingin Anda gunakan (atau penyalahgunaan).
Martin Sojka
6
Kenapa itu cara yang salah? Jika dia hanya mengambil eksportir OBJ untuk membuatnya sendiri, saya benar-benar gagal melihat bagaimana itu "salah". Cara yang salah adalah tidak melakukan pekerjaan apa pun karena selalu cara yang salah untuk seseorang.
Ravachol
Format .obj menggunakan file .mtl untuk menyimpan informasi material, tetapi sejauh yang saya tahu, hanya mendukung satu materi per wajah. Juga, .obj adalah salah satu dari topik yang tidak begitu banyak di mana entri wikipedia sebenarnya berguna: en.wikipedia.org/wiki/Wavefront_.obj_file
Exilyth
3
Itu salah karena OBJ adalah spesifikasi tetap. Setelah Anda mulai mengubah eksportir untuk melakukan hal-hal tambahan , itu bukan lagi eksportir OBJ, itu sesuatu yang lain. Dari sana, itu bisa berubah menjadi binatang buas berkepala apa saja. Tetap saja, jawaban yang bagus, saya belum pernah mendengar tentang PLY.
Insinyur
@NickWiggill PLY belum tentu merupakan pilihan yang baik - mungkin Anda belum pernah mendengarnya karena alasan yang bagus. Ini jauh lebih kompleks daripada OBJ dan memungkinkan lebih banyak fleksibilitas daripada yang perlu digunakan untuk model statis. Jika Anda membutuhkan fleksibilitas tambahan, mungkin Anda harus menggunakan format file yang lebih populer dengan parser yang sudah mapan, seperti COLLADA
bobobobo
18

Memang ada rasa Wavefront * .obj yang memfasilitasi Vertex Coloring .. Saya tahu dua aplikasi yang dapat mengekspor ini yaitu "MeshLab" (gratis) dan "MeshMixer" (juga bebas dari Autodesk) .. Warna-warna titik sebenarnya ditemukan setelah setiap definisi sudut seperti yang ditunjukkan di bawah ini ..

(Sepotong * .obj)

####
#
# OBJ File Generated by Meshlab
#
####
# Object VERTEXPAINT_004_OBJ.obj
#
# Vertices: 284
# Faces: 281
#
####
mtllib ./VERTEXPAINT_004_OBJ.obj.mtl

vn 0.029683 0.730087 -0.682709
v 1220.094482 -572.500000 177.713943 0.984314 0.764706 1.000000  

# "3 vals for Vert and 3 vals for Col"

vn 0.000000 0.858139 -0.513418
v 1291.571533 -609.439636 -28.628490 0.921569 0.219608 1.000000
vn 0.303129 0.896367 -0.323480

Coba gunakan meshlab untuk menghasilkan "Oklusi Ambient Berbasis Vertex", lalu buka dengan "MeshMixer" ..

Ini harus menjelaskan masalah Anda .. Saya pikir pewarnaan Vertex akan datang kembali dengan munculnya shader .. Lucu bagaimana pewarnaan vertex tampaknya diabaikan ketika peta gambar ditemukan .. Sekarang kita harus melihat kembalinya "Mewarnai Vertex"! Beritahu saya jika ini bermanfaat!

Jacques Pretorius
sumber
Oh begitu. Mereka ditempelkan pada warna per-vertex sebagai 3 mengapung setelah itu vspesifikasi posisi vertex. Cara cerdik untuk (semoga) tidak merusak kompatibilitas dengan parser OBJ yang ada.
bobobobo
+1 Saya menemukan simpul berwarna persis di file obj yang baru-baru ini saya peroleh. Menurut OBJ Vertex Coloring Parsing Problem · Edisi # 2083 · mrdoob / three.js , warnanya dalam urutan biru hijau merah, seperti biasa, dan dari 0 hingga 1. Apakah Anda mengetahui dokumentasi nyata untuk ini dari salah satu orang yang mendukungnya? Bagaimana dengan kode sumber terbuka yang mengimplementasikannya? Apakah sebenarnya ada standar tertulis untuk obj yang diterima secara luas?
nealmcb
Aha - untuk menjawab salah satu pertanyaan saya, MeshLab tidak hanya gratis, tetapi juga open source (GPL) dan lintas-platform :)
nealmcb
7

Wavefront OBJ mendukung bahan , yang kelompok warna dari jerat warna yang sama.

Pernyataan materi terlihat seperti ini:

newmtl redMtl
Kd 1.00 0.00 0.00
Ks 0.50 0.50 0.50
Ns 18.00

Jadi, Kd adalah komponen difus, Ks specular.

Ini akan ditentukan di dalam file .mtl yang menyertai file .obj. Di dalam file .obj adalah pernyataan seperti

usemtl redMtl
f 1/5/1 30/39/2 20/29/3
f 20/29/4 30/39/5 31/41/6
f 35/48/7 26/35/8 2/6/9

Ini berarti wajah yang ditentukan ada untuk menggunakan materi redMtl. Saat Anda mem-parsing file obj, ini diterjemahkan ke warna per-vertex.

Jika ada banyak warna berbeda, Anda akan memiliki banyak bahan berbeda, tetapi Anda bisa melakukannya.

Berikut adalah video cara menetapkan kelompok wajah tertentu pada materi yang berbeda . Anda dapat menetapkan bahan yang berbeda untuk setiap wajah dalam jaring jika Anda mau.

bobobobo
sumber
5
Sayangnya itu hanya memungkinkan untuk pewarnaan per-wajah, bukan pewarnaan per-simpul.
fluffy