سؤال

تظليل بلين فونج...?

Normals Blinn-phong

لذا فإن المشكلة التي أواجهها ، كما توضح الصورة أعلاه على أمل ، هي أنني لا أستطيع أن أحصل على إبرازاتي المرآوية للتظليل بسلاسة.تكمن المشكلة في القطع المفاجئ على طول حواف الوجه ، وهو ما لا ينبغي أن يحدث.يبدو أن الإضاءة المنتشرة تعمل بشكل جيد ، وتستخدم نفس القيم المحرفة.وهنا رمز ليسلط الضوء براق بلين فونج:

vec3 halfAngle = normalize(lightDirection.xyz + viewRay);

float blinnTerm = dot(normal.xyz, halfAngle);
blinnTerm = clamp(blinnTerm, 0.0f, 1.0f);
blinnTerm = pow(blinnTerm, 300.0f);

float specIntensity = intensity * blinnTerm;

vec4 specColour = specIntensity * specColour;

lightDirection هو ثابت ، انها بلا حدود بعيدا (أي.الشمس).أما بالنسبة فيوراي ، انها محسوبة في تظليل قمة الرأس مثل ذلك ، وذلك باستخدام مصفوفة الإسقاط:

viewRay = vec3(-(UV.x * 2.0f - 1.0f) / projection[0].x,
               -(UV.y * 2.0f - 1.0f) / projection[1].y,
                     1.0f);

أنا باستخدام التقديم المؤجل ، وهو المكان الذي تأتي منه قيم الأشعة فوق البنفسجية (التقديم إلى نسيج ملء الشاشة).

الشيء الوحيد الذي يمكنني التفكير فيه هو أن الاستيفاء العادي ليس سلسا بدرجة كافية.ولكن إذا كان هذا هو الحال, كيف أذهب نحو تحديد ذلك?(أقوم بتخزين القواعد الطبيعية كعوامات 16 بت ، لكن رفعها إلى 32 بت لم يحدث فرقا).

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

المحلول

enter image description here

ويتم إصلاح إبريق الشاي الآن!هناك كان مشكلة في استيفاء المعايير الطبيعية ، ولكن لحسن الحظ كان حلا سهلا;كنت أقوم بتطبيع الأوضاع الطبيعية في تظليل قمة الرأس ، ثم الاستيفاء ، بدلا من الاستيفاء أولا ثم التطبيع.لا يزال غير مثالي ، لكنه بالتأكيد تحسن!

الدرس هنا: إذا كانت صورتك تبدو مسطحة ، فمن المحتمل أنك تفعل شيئا لا يجب عليك فعله في تظليل قمة الرأس.

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