ورود

View Full Version : فشرده سازی و میپ مپ نرمال مپ



pswin.pooya
پنج شنبه 12 اسفند 1389, 18:17 عصر
من برای ساختن قابل تکسچر خودم برای نرمال مپ ها به مشکل بر خوردم. دو تا سوال اساسی دارم:

1. چه فرمت فشرده سازی برای نرمال مپ مناسبه که اون رو خراب نکنه؟
2. به چه شکی باید میپ مپهای نرمال مپ رو بسازم که نرمالها از بین نرن؟

داخل OpenGL دو الحاقی EXT_texture_compression_rgtc و GL_EXT_texture_compression_latc برای فشرده سازی وجود داره اما من مطمئن نیستم که هر دوی این قالبها توسط دایرکت 9 و یا بالاتر ساپورت بشه.

سپول
پنج شنبه 12 اسفند 1389, 18:53 عصر
برای سخت افزارهایی که Directx9 رو ساپورت می دهند dxtc5 از همه مناسبتره برای normal map.
برای سخت افزاری های directx10 (سری nvidia 8000 به بالا و حتی کارت های dx9 شرکت ATI) فرمت DX-BC5 یا همون ATI2N که الان بهترین فرمت برای normal map هست.

الحاقی های opengl رو نمی دونم معادلشون چی هست. باید معادلشون رو پیدا کنید چون کسی با الحاقی opengl فرمت های فشرده سازی رو نمی شناسه ، سخت افزارها و کلیه نرم افزارهای فشرده سازی texture ، با اون فرمت هایی که بالا گفتم می شناسن.

برای ساختشون هم هم nvidia هم ATI نرم افزارهایی برای ساخت اینگونه texture ها دارن.
nvidia texture tools
ATI compressonator

kochol
جمعه 13 اسفند 1389, 11:32 صبح
من برای ساختن قابل تکسچر خودم برای نرمال مپ ها به مشکل بر خوردم. دو تا سوال اساسی دارم:

1. چه فرمت فشرده سازی برای نرمال مپ مناسبه که اون رو خراب نکنه؟
2. به چه شکی باید میپ مپهای نرمال مپ رو بسازم که نرمالها از بین نرن؟

داخل OpenGL دو الحاقی EXT_texture_compression_rgtc و GL_EXT_texture_compression_latc برای فشرده سازی وجود داره اما من مطمئن نیستم که هر دوی این قالبها توسط دایرکت 9 و یا بالاتر ساپورت بشه.

سلام

دیروز سجاد هم فرمت تکستچر خودش رو به من نشون داد خیلی باحال بود اینکه بدونه هیچ لزومی می خوای فرمت تکستچر خودتو بسازی به نظر من اصلا خوب نیست اول یه کارایی براش پیدا کن بعد برو دنبال ساختش.

کاری که سجاد کرده بود این بود که برای تکستچرش LOD تعریف کرده بود و شده بود یه چیزی شبیه unreal که تکستچر ها رو اروم اروم لود می کرد تو یه ترد دیگه و نمایش می داد به نظرم اگه خودش بیاد یه توضیح بده اینجا خیلی خوب می شه.

خوب سپول گفت که فرمت های مناسب برای نرمال مپ چیه.
EXT_texture_compression_s3tc
همون معادل dxtc هست که به نظرم فقط DXT1 و DXT5 خوبه برای استفاده

EXT_texture_compression_rgtc
خوب این برای نرمال مپ عالیه و همون ati1n ati2n bc4 & bc5 هست که باید استفاده کنی.

این لینکه معادل همه ی تکستچر فرمت ها رو توی dx9, 10, 11, OGL گفته
http://www.g-truc.net/post-0335.html

GL_EXT_texture_compression_latc
این هم دقیقا نمی دونم چیه ولی فکر کنم برای کامپرس تکستچرهای فلوت باشه

برای ساخت میپ مپ هم برای نرمال مپ نمی دونم دقیقا چه کار باید بکنی ولی شاید بشه به روش معمولی میپ مپ بسازی و بعدش دوباره نرمال کنی دیتا رو

یه ایده برای اینکه تکستچر فرمت خودتو بسازی اینه که از روشی که اینجا گفته استفاده کنی یعنی این فرمت هم ساپورت بدی
http://www.humus.name/index.php?page=3D&ID=68
کیفیتش خیلی خوبه ولی یه تکستچر رو تو دوتا تکستچر ذخیره می کنه و کد شیدر رو هم باید دست کاری کنی
البته زیاد هم لازم نیست به نظرم چون همون فرمت های استاندارد جواب کار رو می دن

اما برای استفاده از bc4 & bc5 تو dx9 می شه این کار رو کرد.


Two FourCC formats are exposed:
#define FOURCC_ATI1N ((D3DFORMAT)MAKEFOURCC('A', 'T', 'I', '1'))
#define FOURCC_ATI2N ((D3DFORMAT)MAKEFOURCC('A', 'T', 'I', '2'))
To check support for ATI1N:
// Check if ATI1N is supported
HRESULT hr;
hr = pd3d->CheckDeviceFormat(AdapterOrdinal, DeviceType, AdapterFormat,
0, D3DRTYPE_TEXTURE, FOURCC_ATI1N);
BOOL bATI1NSupported = (hr == D3D_OK);
To check support for ATI2N:
// Check if ATI2N is supported
HRESULT hr;
hr = pd3d->CheckDeviceFormat(AdapterOrdinal, DeviceType, AdapterFormat,
0, D3DRTYPE_TEXTURE, FOURCC_ATI2N);
BOOL bATI2NSupported = (hr == D3D_OK);
To create an ATI1N texture:
// Create an ATI1N texture
IDirect3DTexture9 * pATI1NTexture;
pd3dDevice->CreateTexture(dwWidth, dwHeight, 0, 0, FOURCC_ATI1N,
D3DPOOL_DEFAULT, &pATI1NTexture, NULL);
To create an ATI2N texture:
// Create an ATI2N texture
IDirect3DTexture9 * pATI2NTexture;
pd3dDevice->CreateTexture(dwWidth, dwHeight, 0, 0, FOURCC_ATI2N,
D3DPOOL_DEFAULT, &pATI2NTexture, NULL);

pswin.pooya
جمعه 13 اسفند 1389, 14:14 عصر
من دیشب در مورد نحوه فشرده کردن و ساختن میپ مپها یه سرچ زدم. و API زیر رو پیدا کردم که برای nvidia هست:

http://code.google.com/p/nvidia-texture-tools/



GL_EXT_texture_compression_latc
این هم دقیقا نمی دونم چیه ولی فکر کنم برای کامپرس تکستچرهای فلوت باشه


مشابه rgtc هست اما از کامپوننتهای alpha و luminance استفاده میکنه. یه جا خونده بودم که برای سازگاری با دایرکت 10 ارائه شده.



کاری که سجاد کرده بود این بود که برای تکستچرش LOD تعریف کرده بود و شده بود یه چیزی شبیه unreal که تکستچر ها رو اروم اروم لود می کرد تو یه ترد دیگه و نمایش می داد به نظرم اگه خودش بیاد یه توضیح بده اینجا خیلی خوب می شه

خیلی خوب میشه بیاد و در موردش توضیح بده. فقط یه سوال داشتم. مگه میپ مپ همون حکم LOD رو برای تکسچرها نداره؟

سپول
جمعه 13 اسفند 1389, 15:42 عصر
من هنوز دلیل ساختن فرمت تکسچر خاص رو نمی دونم ! چه در کار سجاد چه در تصمیمی که pswin داره.
به نظر من دلیلی نداره تکسچر فرمت خاصی داشته باشه با وجود فرمت هایی مثل DDS، فقط فرقش اینه که باید ابزارهای مناسب برای ساختن فرمت تکسچر خودتون رو درست کنید، و برای حالت های خاص مثل cubemap نیز ابزارهای لازم برای اون رو درست کنید در صورتی که برای dds تمامی این ابزارها موجود هست. حتی برای دیدن تکسچر ها هم باید یک برنامه دیگه درست کنید در صورتی که باز هم برای dds همچین برنامه هایی هست.
اون LOD هم که کوچول می گه در واقع همون mipmap هست که در فایل DDS هم موجوده. چیز عجیب غریبی نیست.

kochol
جمعه 13 اسفند 1389, 22:24 عصر
مشابه rgtc هست اما از کامپوننتهای alpha و luminance استفاده میکنه. یه جا خونده بودم که برای سازگاری با دایرکت 10 ارائه شده.


برای سازگاری با dx11 هست و 10 پشتیبانی نمی کنی و به درد تکستچر های HDR و اینها می خوره معادل bc6 & bc7 هست


خیلی خوب میشه بیاد و در موردش توضیح بده. فقط یه سوال داشتم. مگه میپ مپ همون حکم LOD رو برای تکسچرها نداره؟

چرا همون میپ مپ هست ولی می یاد اول میپ مپ ها رو لود می کنه مثلا اول تکستچر 128*128 می سازه بعد 256*256 می سازه بعد هم 512*512 می سازه.

http://www.seganx.com/wp-content/uploads/2010/10/4-191x300.jpg

SeganX
شنبه 14 اسفند 1389, 09:19 صبح
در مورد سوالات پویا که سپول و کوچول توضیح دادن. لود کردن mipmap تکسچرها هم که چیز خیلی عجیب و قریبی نیست. در مورد multi thread هم که تو سایتم یه پست در موردش دادم.
اما در مورد استفاده از تکسچر فرمت و این چیزا دلیل ساختش این بود که میخوام فقط در بخشهای مورد نیاز و ضروری از کتابخونه های خارجی استفاده کنم. مثل D3DX و Zlib و ...
دیگه اینکه امکانات مورد نیاز رو میتونم بهش اضافه یا حذف کنم. مثل دسترسی آسان به mipmap ها یا وجه های تکسچر مکعبی، مشخص کردن اینکه فایل خروجی compress بشه یا نشه، مشخص بودن اینکه کجای کتابخونه thread safe باشه و بره تو یه نخ دیگه، ظاهرا سرعت لودش هم بیشتر میشه که فعلا نمیشه در موردش خیلی قاطعانه نظر داد و ... یه استفاده خوب دیگش هندل کردن خرابی فایل هستش.

سپول
شنبه 14 اسفند 1389, 20:31 عصر
در مورد سوالات پویا که سپول و کوچول توضیح دادن. لود کردن mipmap تکسچرها هم که چیز خیلی عجیب و قریبی نیست. در مورد multi thread هم که تو سایتم یه پست در موردش دادم.
اما در مورد استفاده از تکسچر فرمت و این چیزا دلیل ساختش این بود که میخوام فقط در بخشهای مورد نیاز و ضروری از کتابخونه های خارجی استفاده کنم. مثل D3DX و Zlib و ...
دیگه اینکه امکانات مورد نیاز رو میتونم بهش اضافه یا حذف کنم. مثل دسترسی آسان به mipmap ها یا وجه های تکسچر مکعبی، مشخص کردن اینکه فایل خروجی compress بشه یا نشه، مشخص بودن اینکه کجای کتابخونه thread safe باشه و بره تو یه نخ دیگه، ظاهرا سرعت لودش هم بیشتر میشه که فعلا نمیشه در موردش خیلی قاطعانه نظر داد و ... یه استفاده خوب دیگش هندل کردن خرابی فایل هستش.

منظور من این نیست که از D3dx استفاده کنید. اتفاقا ما برای لود کردن تکسچر در شرکت توچال از d3dx استفاده می کنیم و در کار حرفه ای اصلا توصیه نمی کنیم چون مشکلات ریز و درشت در طول کار داشت و هنوز هم داره. در ابزارهامون هم برای ساختن تکسچرهای compress شده از d3DXsaveTeture... استفاده می کردیم که اون هم به خاطر باگ های خاص این تابع مجبور شدیم خودمون بنویسیم.

در هر صورت DDS یک فایل فرمت game-friendly هست با فرمت باز. به راحتی می شه براش loader/saver نوشت. سرعت لود هم در فایل DDS در حد یک memcpy سریع هست. تمام اون چیزهایی که نوشتی رو هم داره. (به جز هندل کردن خرابی فایل که نفمهمیدم منظورت چیه و thread-safe بودن چون اون هم ربطی به فرمت فایل نداره)
به هر حال هر کی یک تصمیمی داره، البته فرمت خاص به خاطر سادگی اطلاعات تکسچر، راحتتر از باز کردن و کد نوشتن برای فرمت های دیگه هست. و چیزی که واضحه اینه که فرمت تکسچر خاص حداقل می تونه از باز کردن فایل ها توسط کاربران و دزدیده شدن تکسچر هاتون جلوگیری کنه. فقط نکته منفیش اینه که باید ابزارهایی برای دیدن تکسچرهایی که درست کردید و تبدیل فایل های دیگه به این فرمت رو درست کنید

SeganX
یک شنبه 15 اسفند 1389, 12:41 عصر
در هر صورت DDS یک فایل فرمت game-friendly هست با فرمت باز. به راحتی می شه براش loader/saver نوشت. سرعت لود هم در فایل DDS در حد یک memcpy سریع هست. تمام اون چیزهایی که نوشتی رو هم داره. (به جز هندل کردن خرابی فایل که نفمهمیدم منظورت چیه و thread-safe بودن چون اون هم ربطی به فرمت فایل نداره)
هندل کردن خرابی فایل ها و thread-safe بودن و تعیین اینکه فایلش compress بشه یا نشه، مربوط به کتابخونه ای هستش که واسه این فرمت نوشتم و به قول خودت ربطی به فرمت فایل نداره. به هرحال همونطور که گفتی استفاده از فرمت خاص واسه تکسچر علاوه بر مزیت هایی که گفتی این مزیت رو هم داره که کتابخونش رو هم خودت بنویسی و درگیر کتابخونه های دیگه نباشی. راستش من اصلا دنبال کتابخونه واسه DDS نرفتم و نمیدونم چطوریه اما اینکه اصرار دارم از کتابخونه های دیگه کمتر استفاده کنم واسه اینه که نمی خوام هدرفایلی وارد سیستم بشه که توش از stl استفاده شده باشه.
واسه تبدیل فرمت تکسچر هم فعلا یه converter نوشتم که توی editor هستش و با D3DX تکسچر ها رو لود میکه و بعدش به فرمت موتور تبدیل می کنه. میشه بعدا روش بیشتر کار کرد ولی فعلا کارم رو راه میندازه.

سپول
یک شنبه 15 اسفند 1389, 12:59 عصر
راستش من اصلا دنبال کتابخونه واسه DDS نرفتم و نمیدونم چطوریه اما اینکه اصرار دارم از کتابخونه های دیگه کمتر استفاده کنم واسه اینه که نمی خوام هدرفایلی وارد سیستم بشه که توش از stl استفاده شده باشه.
می گم که اون هم کتابخونه خاصی نداره، توی directx ساختار فرمتش رو توضیح داده باید خودتون بنویسید لودر اش رو.

pswin.pooya
یک شنبه 15 اسفند 1389, 23:23 عصر
من قالب فایل dds رو بررسی کردم. همنطور که سپول میگه کاملا gpu friendly هست و تقریبا تمام نیازها رو به راحتی بر آورده میکنه. به نظر من تنها مشکلش همون public بودنش هست که باعث میشه به راحتی بشه mod سازی کرد.

خود من هم دو دل شدم. که از dds استفاده کنم یا اینکه قالب فایل خودم رو بنویسم؟

kochol
دوشنبه 16 اسفند 1389, 12:46 عصر
سلام
تو این تاپیک هم مطالب جالبی گفته برای فشرده سازی
http://en.wikipedia.org/wiki/S3_Texture_Compression

سپول
دوشنبه 16 اسفند 1389, 14:46 عصر
من قالب فایل dds رو بررسی کردم. همنطور که سپول میگه کاملا gpu friendly هست و تقریبا تمام نیازها رو به راحتی بر آورده میکنه. به نظر من تنها مشکلش همون public بودنش هست که باعث میشه به راحتی بشه mod سازی کرد.

اگه در نسخه نهایی از فایل های pak استفاده کنید اون کار هم به راحتی نمی شه کرد