ডাইরেক্টএক্স 11 এর জন্য বিভিন্ন শেডার


13

আমি শিখছি Direct3D 11, এবং শেডার রাইটিংয়ে পাওয়া সমস্ত বুনিয়াদি টিউটোরিয়ালে আমি ভার্টেক্স এবং পিক্সেল শেডারগুলি লেখা হয় যাতে তারা পুরো দৃশ্যকে একইভাবে রূপান্তরিত করে। জমিন সহ কিউবার রেন্ডার মত টিউটোরিয়াল ...

তবে আমি অবাক হই, আপনি কীভাবে বস্তুর পার্থক্য করবেন? আপনি যদি চান, উদাহরণস্বরূপ, কিছু বস্তুর উপর মিরর পৃষ্ঠের অনুকরণ করতে এবং দৃশ্যের বাকি অংশটি রেন্ডার করতে বিভিন্ন শেডার ব্যবহার করতে চান? আমি মনে করি যে বেশিরভাগ গেমগুলির বিভিন্ন চেহারা এবং রূপান্তরগুলি অর্জন করতে অবশ্যই অনেকগুলি ভার্টেক্স এবং পিক্সেল শেডার ব্যবহার করা উচিত।

ধন্যবাদ.

উত্তর:


23

হ্যাঁ, একটি গেম ইঞ্জিনের সাধারণত বিভিন্ন ধরণের শেডার থাকে। সাধারণ প্যাটার্নটি হ'ল:

  1. ইঞ্জিনটি আরম্ভ করার সময় এবং গেমের জগতটি লোড করার সময়, আপনি রেন্ডারিংয়ের জন্য ব্যবহার করবেন এমন সমস্ত শেডার প্রস্তুত করুন। "প্রস্তুত" বলতে বোঝায় এগুলি মেমরিতে লোড করুন, প্রয়োজনে তাদের সংকলন করুন ID3D11Device::CreatePixelShaderএবং ডি 3 ডি শেডার অবজেক্টগুলি বরাদ্দ করা এবং যেতে প্রস্তুত পেতে সমস্ত অনুরূপ কল করুন। বস্তুগুলিকে একটি অ্যারে বা অন্য কোনও ডেটা স্ট্রাকচারে রাখুন।

    সাধারণত আপনার ভার্টেক্স শেডার এবং পিক্সেল শেডারগুলির মধ্যে একের সাথে সম্পর্ক থাকবে যা একসাথে কাজ করার জন্য ডিজাইন করা হয়েছে। আমি তাদেরকে একটি একক বস্তু হিসাবে মনে করি, যা আমি কেবল একটি "শেডার" বলি, যদিও এতে সত্যই একটি ভার্টেক্স শেডার এবং একটি পিক্সেল শেডার রয়েছে (এবং সম্ভবত জ্যামিতি / হাল্ল / ডোমেন শেডারও রয়েছে)।

  2. প্রতিটি ফ্রেম, একবার আপনি রেন্ডার করার জন্য অবজেক্টের (মেস) তালিকা পেয়ে গেলে শেডার অনুসারে তাদের বাছাই করুন। ধারণাটি হ'ল আপনি কোনও ফ্রেমে শ্যাডারগুলি স্যুইচ করে, প্রদত্ত শেডার দিয়ে সমস্ত বস্তু এক সাথে আঁকিয়ে কতবার ন্যূনতম করুন। এর কারণ শেডার স্যুইচ করা কিছুটা ব্যয়বহুল ক্রিয়াকলাপ (যদিও আপনি অবশ্যই এটি ফ্রেম প্রতি কয়েকশ বা এক হাজারবার করতে পারেন, সুতরাং এটি সত্যই এত ব্যয়বহুল নয়)।

    প্রকৃতপক্ষে, আপনি আরও এক ধাপ এগিয়ে যেতে পারেন এবং শেডার দ্বারা প্রথমে এবং দ্বিতীয় উপাদানটি মেসগুলি বাছাই করতে পারেন। "উপাদান" দ্বারা, আমি বলতে চাইছি এটি একটি শেডার এবং টেক্সচারের সেট এবং এর জন্য পরামিতিগুলির সংমিশ্রণ। শেডারগুলিতে সাধারণত কিছু টেক্সচার এবং সংখ্যাসূচক প্যারামিটার থাকে (ধ্রুব বাফারগুলিতে সঞ্চিত থাকে) যা এগুলিতে ফিড দেয়, উদাহরণস্বরূপ একটি ইটের উপাদান এবং অ্যাসফল্ট উপাদান একই শ্যাডার কোডটি বিভিন্ন টেক্সচার সহ ব্যবহার করতে পারে।

  3. আঁকতে, শেডারের উপরে কেবল লুপ করুন, প্রতিটি শেডারে ID3D11DeviceContextসেট করুন , কোনও প্যারামিটার (ধ্রুব বাফার, টেক্সচার ইত্যাদি) সেট করুন, তারপরে অবজেক্টগুলি আঁকুন। সিউডোকোডে শেডার / উপাদানগুলির পার্থক্য সহ আমি উল্লেখ করেছি:

    for each shader:
        // Set the device context to use this shader
        pContext->VSSetShader(shader.pVertexShader);
        pContext->PSSetShader(shader.pPixelShader);
    
        for each material that uses this shader:
            // Set the device context to use any constant buffers, textures, samplers,
            // etc. needed for this material
            pContext->VSSetConstantBuffers(...);
            pContext->PSSetConstantBuffers(...);
            pContext->PSSetShaderResources(...);
            pContext->PSSetSamplers(...);
    
            for each mesh that uses this material:
                // Set any constant buffers containing parameters specific to the mesh
                // (e.g. world matrix)
                pContext->VSSetConstantBuffers(...);
    
                // Set the context to use the vertex & index buffers for this mesh
                pContext->IASetInputLayout(mesh.pInputLayout);
                pContext->IASetVertexBuffers(...);
                pContext->IASetIndexBuffer(...);
                pContext->IASetPrimitiveTopology(...)
    
                // Draw it
                pContext->DrawIndexed(...)

অবজেক্টস, মেসস, শেডারস, ইনপুট লেআউটস, ধ্রুবক বাফার্স ইত্যাদির পরিচালনা সম্পর্কে আরও অনেক কিছু বলা যেতে পারে তবে আপনাকে শুরু করার জন্য এটি যথেষ্ট হওয়া উচিত। :)


আপনি শেডার দ্বারা এবং পরে উপাদান দ্বারা বাছাইয়ের প্রস্তাব। স্যাচডিং বনাম স্যুইচিং উপকরণগুলির জন্য আপনার কি কোনও হার্ড ডেটা আছে? ওহ, এবং ডিএক্স 9 এর জন্য একটি ভিএস / পিএস সমন্বয়কে "প্রোগ্রাম" বলা হয়। তারা এখনও ডিএক্স 11-এ সেই পরিভাষা ব্যবহার করে কিনা তা আমি নিশ্চিত নই।
পান্ডা পাইজামা

1
@ পান্ডপাজামা এটি একটি ভাল প্রশ্ন। না, স্যুইচিং উপকরণ বা শেডারগুলির প্রকৃত ব্যয়ের কোনও সাম্প্রতিক পরিমাপ আমার কাছে নেই বা জানি না। এই দৃষ্টিভঙ্গি বছরের পর বছর ধরে "সাধারণ জ্ঞান" হয়ে দাঁড়িয়েছে তবে জিনিসগুলি কীভাবে পরিবর্তিত হয়েছে তা দেখার জন্য কিছু প্রকৃত পরিমাপ করা মূল্যবান ... সম্ভবত আমি যদি সময়টি পাই তবে তা করব। :)
নাথান রিড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.