hmm هو H Hive M M A AP M ESHING فائدة.
إذا كنت قد قمت بتطوير لعبة ثلاثية الأبعاد أو طباعة ثلاثية الأبعاد أو أشياء أخرى من هذا القبيل ، فمن المحتمل أن تكون ترغب في تحويل صورة خريطة الارتفاع الرمادية إلى شبكة ثلاثية الأبعاد. الطريقة الساذجة بسيطة للغاية ولكنها تولد شبكات ضخمة مع ملايين المثلثات. بعد اختراق طريقي من خلال حلول مختلفة على مر السنين ، قررت أخيرًا أنني بحاجة إلى كتابة أداة جيدة لهذا الغرض.
hmm هو تنفيذ حديث لخوارزمية لطيفة من التقريب المضلول السريع للورق لعام 1995 للتضاريس وحقول الارتفاع بواسطة Garland و Heckbert. تفي الشبكات التي تنتجها hmm بحالة Delaunay ويمكن أن تلبي خطأً أقصى محددًا أو عدد أقصى من المثلثات أو القمم. إنه أيضًا سريع جدًا.
brew install glm # on macOS
sudo apt-get install libglm-dev # on Ubuntu / Debian
git clone https://github.com/fogleman/hmm.git
cd hmm
make
make install heightmap meshing utility
usage: hmm --zscale=float [options] ... infile outfile.stl
options:
-z, --zscale z scale relative to x & y (float)
-x, --zexagg z exaggeration (float [=1])
-e, --error maximum triangulation error (float [=0.001])
-t, --triangles maximum number of triangles (int [=0])
-p, --points maximum number of vertices (int [=0])
-b, --base solid base height (float [=0])
--level auto level input to full grayscale range
--invert invert heightmap
--blur gaussian blur sigma (int [=0])
--gamma gamma curve exponent (float [=0])
--border-size border size in pixels (int [=0])
--border-height border z height (float [=1])
--normal-map path to write normal map png (string [=])
--shade-path path to write hillshade png (string [=])
--shade-alt hillshade light altitude (float [=45])
--shade-az hillshade light azimuth (float [=0])
-q, --quiet suppress console output
-?, --help print this message
يدعم hmm مجموعة متنوعة من تنسيقات الملفات مثل PNG ، JPG ، إلخ. الإخراج هو دائما ملف STL ثنائي. المعلمة الأخرى المطلوبة الوحيدة هي -z ، والتي تحدد مقدار زيادة محور Z في شبكة الإخراج.
$ hmm input.png output.stl -z ZSCALEيمكنك أيضًا توفير الحد الأقصى المسموح به من الخطأ أو عدد المثلثات أو عدد القمم. (إذا تم تحديد مضاعفات ، يتم استخدام الأول الذي تم الوصول إليه.)
$ hmm input.png output.stl -z 100 -e 0.001 -t 1000000انقر على الصورة أدناه لمعرفة أمثلة من وسيطات سطر الأوامر المختلفة. يمكنك تجربة هذه الأمثلة بنفسك باستخدام هذا الارتفاع: gale.png.
تحدد المعلمة المطلوبة -z المسافة بين بكسل أسود بالكامل وبكسل أبيض بالكامل في محور Z العمودي ، مع وحدات تساوي عرض أو ارتفاع بكسل واحد. على سبيل المثال ، إذا كان كل بكسل في خريطة الارتفاع يمثل مساحة مربعة 1 × 1 متر ، وكان النطاق العمودي لخريطة الارتفاع 100 متر ، ثم يجب استخدام -z 100 .
المعلمة -x هي ببساطة مضاعف إضافي أعلى مقياس Z المقدم. يتم توفيره كراحة ، لذا لا يتعين عليك القيام بالضرب في رأسك لمجرد المبالغة في ذلك ، على سبيل المثال 2x ، نظرًا لأن موازين Z مستمدة غالبًا من بيانات العالم الحقيقي ويمكن أن يكون لها قيم غريبة مثل 142.2378.
تحدد المعلمة -e الحد الأقصى المسموح به في شبكة الإخراج ، كنسبة مئوية من ارتفاع الشبكة الكلي. على سبيل المثال ، إذا تم استخدام -e 0.01 ، فلن يكون لدى أي بكسل خطأ يزيد عن 1 ٪ من المسافة بين بكسل أسود بالكامل وبكسل أبيض بالكامل. هذا يعني أنه بالنسبة لصورة الإدخال 8 بت ، فإن خطأ e = 1 / 256 ~= 0.0039 سيضمن عدم وجود خطأ في وحدة رمادية كاملة. (قد لا يزال من المرغوب فيه استخدام قيمة أقل مثل 0.5 / 256 .)
عند استخدام خيار -b لإنشاء شبكة صلبة ، فإنه يحدد ارتفاع القاعدة قبل ظهور الجزء الأدنى من ارتفاع ، كنسبة مئوية من ارتفاع خريطة الارتفاع. على سبيل المثال ، إذا تم استخدام -z 100 -b 0.5 ، فإن الشبكة النهائية ستكون حوالي 150 وحدة (إذا كان هناك بكسل أبيض بالكامل في المدخلات).
يمكن إضافة الحدود إلى الشبكة مع --border-size و --border-height . سيتم مبطنة خريطة الارتفاع بواسطة وحدات البكسل border-size قبل المثلثات. يمكن تعيين قيمة Z (المسبقة) Z مع border-height الذي يتخلف عن السداد إلى 1.
يمكن تطبيق طمس غاوسي مع علم --blur . هذا مفيد بشكل خاص للصور الصاخبة.
يمكن أن يتم قلب خريطة الارتفاع مع العلم --invert . هذا مفيد للليثوفان.
يمكن أن تكون خريطة الارتفاع ذات مستوى تلقائي مع العلم --level . سيؤدي ذلك إلى تمديد القيم الرمادية لاستخدام النطاق الأسود الكامل => الأبيض.
يمكن تطبيق منحنى جاما على خريطة الارتفاع مع علم --gamma . هذا ينطبق x = x ^ gamma على كل بكسل ، حيث x في [0 ، 1].
يمكن إنشاء خريطة طبيعية دقة كاملة مع حجة --normal-map . سيؤدي ذلك إلى حفظ الخريطة العادية كـ RGB PNG إلى المسار المحدد. هذا مفيد لجعل نتوءات وتفاصيل دقة أعلى أثناء استخدام شبكة مثلث دقة أقل.
يمكن إنشاء صورة Hillshade الرمادية مع حجة --shade-path . يمكن تغيير ارتفاع وسموت مصدر الضوء مع حجج- --shade-alt و- --shade-az ، والتي تتخلف عن 45 درجة في الارتفاع و 0 درجة من الشمال (أعلى).
يعتمد الأداء كثيرًا على مقدار التفاصيل في خريطة الارتفاع ، ولكن فيما يلي بعض الأرقام للحصول على مثال على ارتفاع مساحة 40 × 40 كيلومترًا على جبل إفرست. يتم عرض مختلف قرارات خريطة الارتفاع وأخطاء الحد الأقصى المسموح بها. الأوقات المحسوبة على 2018 13 "MacBook Pro (2.7 جيجا هرتز Intel Core I7).
| حجم الصورة / الخطأ | ه = 0.01 | ه = 0.001 | ه = 0.0005 | ه = 0.0001 |
|---|---|---|---|---|
| 9490 × 9490 بكسل (90.0 ميلا في البرلمان) | 6.535 | 13.102 | 19.394 | 58.949 |
| 4745 × 4745 بكسل (22.5 ميكرون) | 1.867 | 4.903 | 8.886 | 33.327 |
| 2373 × 2373 بكالوريوس (5.6 ميجابكسل) | 0.559 | 2.353 | 4.930 | 14.243 |
| 1187 × 1187 بكسل (1.4 ميكروفتر) | 0.168 | 1.021 | 1.961 | 3.709 |
| حجم الصورة / الخطأ | ه = 0.01 | ه = 0.001 | ه = 0.0005 | ه = 0.0001 |
|---|---|---|---|---|
| 9490 × 9490 بكسل (90.0 ميلا في البرلمان) | 33،869 | 1،084،972 | 2،467،831 | 14،488،022 |
| 4745 × 4745 بكسل (22.5 ميكرون) | 33،148 | 1،032،263 | 2،323،772 | 11،719،491 |
| 2373 × 2373 بكالوريوس (5.6 ميجابكسل) | 31724 | 935787 | 1،979،227 | 6561،070 |
| 1187 × 1187 بكسل (1.4 ميكروفتر) | 27275 | 629،352 | 1،160،079 | 2،347،713 |