سؤال

كنت أدرس ضوضاء بيرلين من خلال بعض الأمثلة @ http://dindinx.net/opengl/index.php؟menu=exemples&submenu=shaders ولا يمكن أن تساعد في ملاحظة ذلك make3DNoiseTexture() في perlin.c الاستخدامات noise3(ni) بدلاً من PerlinNoise3D(...)

الآن لماذا هذا؟ أليس من المفترض أن تكون ضوضاء بيرلين ملخصًا لترددات الضوضاء المختلفة وسعات؟

Qestion 2 هو ما يفعل ni, inci, incj, inck الوقوف؟ لماذا الاستخدام ni بدلا من x ، y الإحداثيات؟ لماذا ni ازدادت مع
ni[0]+=inci;
inci = 1.0 / (Noise3DTexSize / frequency);
أرى Hugo Elias خلق Perlin2d مع إحداثيات X ، Y ، وكذلك Perlinnoise3d (...).

شكرا مقدما :)

هل كانت مفيدة؟

المحلول

أنا الآن أفهم لماذا وسأجيب على سؤالي على أمل أن يساعد الآخرين.

ضوضاء بيرلين هي في الواقع توليف من ضوضاء التدرج. في عملية الإنتاج ، يجب علينا حساب منتج DOT الخاص بمتجه يشير إلى إحدى الزوايا ، نقطة الإدخال إلى نقطة الإدخال نفسها مع متجه التدرج العشوائي.

الآن إذا كانت نقطة الإدخال رقمًا كاملاً ، مثل إحداثيات XYZ للملمس الذي تريد إنشاؤه ، فإن منتج DOT سيعود دائمًا 0 ، مما يمنحك ضجيجًا مسطحًا. لذا بدلاً من ذلك ، نستخدم inci, incj, inck كفهرس بديل. نعم ، مجرد فهرس ، لا شيء آخر.

بالعودة الآن إلى السؤال 1 ، هناك طريقتان لتنفيذ ضوضاء بيرلين:
1. قم بحساب قيم الضوضاء بشكل منفصل وقم بتخزينها في فتحات RGBA في الملمس
2. قم بتثبيط الضوضاء مسبقًا وتخزينها في إحدى فتحات RGBA في الملمس

noise3(ni) هو التنفيذ الفعلي للطريقة 1 ، بينما PerlinNoise3D(...) يقترح الأخير.

في رأيي الشخصي ، الطريقة 1 أفضل بكثير لأن لديك مرونة أكبر بكثير حول كيفية استخدام كل أوكتاف في تظليلاتك.

نصائح أخرى

تخميني عن سبب استخدامه noise3(ni) في make3DNoiseTexture() بدلا من ذلك إذا PerlinNoise3D(...) هو أنه عند استخدام نسيج الضوضاء هذا في تظليلك ، فأنت تريد أن تكون قادرًا على تكرار وتعديل وظائف PerlinNoise3D(...) مباشرة في التظليل.

تخميني للسبب وراء ni, inci, incj, inck هو أن استخدام x ، y ، z من مستوى الصوت لا يعطي نتيجة جيدة ، لذا عن طريق تحجيم الضوضاء مع التردد بدلاً من ذلك ، يمكن ضبط دقة الضوضاء بشكل مستقل عن حجم الحجم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top