আমি এক্সএনএ 4 এ একটি গেমের সাথে কাজ করছি এবং আমি সম্প্রতি এই গাইড অনুসরণ করে একটি স্থগিত ছায়া গোছানো বাস্তবায়নে স্যুইচ করেছি । একটি অদ্ভুত সাদা রূপরেখা এখন আমার মডেলগুলিতে প্রদর্শিত হচ্ছে এবং আমি নিশ্চিত না যে এর কারণ কী। আমি ভেবেছিলাম এটি স্বাভাবিক রেন্ডার টার্গেট বা গভীরতার রেন্ডার টার্গেটের যথাযথতার অভাব ছিল তবে 32 (রঙ) এর পরিবর্তে 64 বিট (আরজিবা 64) এ তাদের বাড়িয়ে দেয়নি। আমি এটিও ভেবেছিলাম যে অনুমানের গণনাতে এটি কিছু সমস্যা হতে পারে তাই আমি অনুমিত 0 তে সেট করার চেষ্টা করেছি তবে এটি কোনওরকমই কাজে লাগেনি। পিক্সেলটিকে পিআইএক্সে ডিবাগ করলে দেখায় যে বিস্তৃত মানটি সেই পিক্সেলের জন্য প্রায় সাদা হিসাবে গণনা করা হচ্ছে। কোন ধারনা? আমি নীচের সমস্যার একটি চিত্র অন্তর্ভুক্ত করেছি, এটি পূর্ণ আকারে দেখতে এটি আরও সহজ।
পিক্সেল Shader:
float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0
{
input.ScreenPosition.xy /= input.ScreenPosition.w;
float2 texCoord = 0.5f * (float2(input.ScreenPosition.x, -input.ScreenPosition.y) + 1) - halfPixel;
float4 normalData = tex2D(normalSampler, texCoord);
//Transform normal back into [-1, 1] range
float3 normal = normalize(2.0f * normalData.xyz - 1.0f);
float specularPower = normalData.a;
float specularHardness = tex2D(colorSampler, texCoord).a * 255;
float depthVal = tex2D(depthSampler, texCoord).r;
//Compute screen-space position
float4 position = float4(input.ScreenPosition.xy, depthVal, 1.0f);
//Transform to world space
position = mul(position, InvertViewProjection);
position /= position.w;
//Surface-to-light vector
float3 lightVector = lightPosition - position;
float3 projectedTexCoords = position - lightPosition;
projectedTexCoords = mul(projectedTexCoords, float3x3(
float3(-1, 0, 0),
float3(0, 1, 0),
float3(0, 0, 1)));
float distanceToLight = length(lightVector) / lightRadius;
float shadow = ShadowContribution(projectedTexCoords, distanceToLight);
float attenuation = saturate(1.0f - distanceToLight);
lightVector = normalize(lightVector);
//Compute diffuse light
float normalDotLight = max(0, dot(normal, lightVector));
float3 diffuseLight = normalDotLight * Color.rgb;
float3 reflectionVector = normalize(reflect(-lightVector, normal));
float3 directionToCamera = normalize(cameraPosition - position);
float specularLight = specularPower * pow(saturate(dot(reflectionVector, directionToCamera)), specularHardness);
return shadow * attenuation * lightIntensity * float4(diffuseLight.rgb, specularLight);
}
সম্পাদনা : জেপিজি সম্পর্কে দুঃখিত, স্ট্যাকেক্সচেঞ্জের আপলোডার নিজেরাই এটি করেছে। রায় টি: এক্সএনএ 3 থেকে পরিবর্তিত অংশগুলির জন্য আমি টিউটোরিয়ালের আপনার এক্সএনএ 4 রূপান্তরটি আসলেই উল্লেখ করেছি। যেহেতু আমি কোডটিতে কোনও বড় পরিবর্তন করেছি না বলে আমি ভেবেছিলাম সম্ভবত এই বাগটি মূলতে বিদ্যমান ছিল তবে এতগুলি লাইটের চারদিকে ঘোরাঘুরি করা অসম্ভব, তাই আমি একটি আলো বাদ দিয়ে সমস্ত সরিয়ে ফেললাম এবং ত্রুটিটি আবার প্রদর্শিত হল (দেখুন) টিকটিকি কনুই কাছাকাছি)
আমার দৃশ্যের জন্য এখানে জিবিফার সামগ্রীগুলি:
রঙ বাফার: গভীরতা বাফার: সাধারণ বাফার: চূড়ান্ত রেন্ডার:
সম্পাদনা 2 :
আমি রঙিন মানচিত্রটি নমুনা করলে সমস্যাটি CombineFinal.fx সন্দেহ করতে শুরু করি। এটি একটি সাদা পিক্সেলের ঠিক সঠিক রঙিন পিক্সেলের জন্য গণনা:
diffuseColor : (0.435, 0.447, 0.412)
diffuseLight : (1.000, 1.000, 0.902)
light : (1.000, 1.000, 0.902, 0.000)
PixelShaderFunction : (0.435, 0.447, 0.371, 1.000)
specularLight : 0.000
এবং এটির ঠিক পাশেই একটি অনুচিত রঙিন সাদা পিক্সেল থেকে আউটপুট:
diffuseColor : (0.824, 0.792, 0.741)
diffuseLight : (1.000, 1.000, 0.902)
light : (1.000, 1.000, 0.902, 0.000)
PixelShaderFunction : (0.824, 0.792, 0.669, 1.000)
specularLight : 0.000
ডিফিউজ কালার কেবলমাত্র পার্থক্য এবং এই রঙটি সরাসরি রঙের মানচিত্র থেকে নেওয়া হয়। নমুনা থেকে টেক্সচারের স্থানাঙ্কের গণনায় সামান্য ত্রুটি আছে?
লাইটিং পাস: