[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en:game-dev\u002Fgfx-shading-lighting-pbr":4,"config":232},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":8,"topic_name":9,"spec_key":7,"spec_name":7,"locale":10,"cell_total":11,"field_total":12,"seniorities":13,"topics":17,"specs":130,"samples":147},"game-dev","Game Development","","gfx-shading-lighting-pbr","Gfx Shading Lighting Pbr","en",75,2850,[14,15,16],"junior","mid","senior",[18,21,24,27,30,33,36,39,42,45,48,51,52,55,58,61,64,67,70,73,76,79,82,85,88,91,94,97,100,103,106,109,112,115,118,121,124,127],{"key":19,"name":20,"count":11},"game-ai-pathfinding","Game Ai Pathfinding",{"key":22,"name":23,"count":11},"game-input-audio","Game Input Audio",{"key":25,"name":26,"count":11},"game-loop-fundamentals","Game Loop Fundamentals",{"key":28,"name":29,"count":11},"game-networking-multiplayer","Game Networking Multiplayer",{"key":31,"name":32,"count":11},"game-performance-optimization","Game Performance Optimization",{"key":34,"name":35,"count":11},"game-physics-collision","Game Physics Collision",{"key":37,"name":38,"count":11},"game-rendering-pipeline","Game Rendering Pipeline",{"key":40,"name":41,"count":11},"game-state-management","Game State Management",{"key":43,"name":44,"count":11},"gfx-forward-deferred-architectures","Gfx Forward Deferred Architectures",{"key":46,"name":47,"count":11},"gfx-gpu-pipeline-stages","Gfx Gpu Pipeline Stages",{"key":49,"name":50,"count":11},"gfx-post-processing-aa-hdr","Gfx Post Processing Aa Hdr",{"key":8,"name":9,"count":11},{"key":53,"name":54,"count":11},"gfx-shadows-depth-precision","Gfx Shadows Depth Precision",{"key":56,"name":57,"count":11},"gfx-textures-sampling-compression","Gfx Textures Sampling Compression",{"key":59,"name":60,"count":11},"gp-ability-cooldown-damage","Gp Ability Cooldown Damage",{"key":62,"name":63,"count":11},"gp-animation-state-locomotion","Gp Animation State Locomotion",{"key":65,"name":66,"count":11},"gp-camera-follow-targeting","Gp Camera Follow Targeting",{"key":68,"name":69,"count":11},"gp-character-controller-movement","Gp Character Controller Movement",{"key":71,"name":72,"count":11},"gp-frame-windows-game-feel","Gp Frame Windows Game Feel",{"key":74,"name":75,"count":11},"gp-interaction-detection-triggers","Gp Interaction Detection Triggers",{"key":77,"name":78,"count":11},"nc-rollback-determinism","Nc Rollback Determinism",{"key":80,"name":81,"count":11},"nc-security-protocol","Nc Security Protocol",{"key":83,"name":84,"count":11},"nc-serialization-bandwidth","Nc Serialization Bandwidth",{"key":86,"name":87,"count":11},"nc-time-sync-tick","Nc Time Sync Tick",{"key":89,"name":90,"count":11},"nc-topology-nat-relay","Nc Topology Nat Relay",{"key":92,"name":93,"count":11},"nc-transport-reliability","Nc Transport Reliability",{"key":95,"name":96,"count":11},"ue-actor-component-lifecycle","Ue Actor Component Lifecycle",{"key":98,"name":99,"count":11},"ue-blueprint-cpp-interop","Ue Blueprint Cpp Interop",{"key":101,"name":102,"count":11},"ue-containers-strings-memory","Ue Containers Strings Memory",{"key":104,"name":105,"count":11},"ue-gameplay-framework-classes","Ue Gameplay Framework Classes",{"key":107,"name":108,"count":11},"ue-modules-build-packaging","Ue Modules Build Packaging",{"key":110,"name":111,"count":11},"ue-uobject-reflection-gc","Ue Uobject Reflection Gc",{"key":113,"name":114,"count":11},"un-csharp-memory-gc-performance","Un Csharp Memory Gc Performance",{"key":116,"name":117,"count":11},"un-gameobject-component-transform","Un Gameobject Component Transform",{"key":119,"name":120,"count":11},"un-jobs-burst-dots-basics","Un Jobs Burst Dots Basics",{"key":122,"name":123,"count":11},"un-monobehaviour-lifecycle-execution-order","Un Monobehaviour Lifecycle Execution Order",{"key":125,"name":126,"count":11},"un-prefabs-instantiate-pooling-addressables","Un Prefabs Instantiate Pooling Addressables",{"key":128,"name":129,"count":11},"un-scriptableobject-serialization","Un Scriptableobject Serialization",[131,135,138,141,144],{"key":132,"name":133,"count":134},"gameplay","Gameplay",450,{"key":136,"name":137,"count":134},"graphics-rendering","Graphics \u002F Rendering",{"key":139,"name":140,"count":134},"multiplayer-netcode","Multiplayer \u002F Netcode",{"key":142,"name":143,"count":134},"unity-csharp","Unity (C#)",{"key":145,"name":146,"count":134},"unreal-cpp","Unreal (C++)",[148,166,180,193,206,219],{"id":149,"topic":9,"difficulty":150,"body":151,"options":152,"correct_key":157,"explanation":165},"01a01705-1fea-7e3e-b425-c8e0cd32802d",1,"In a Lambertian diffuse shading term, why is the surface normal dotted with the light direction (N·L)?",[153,156,159,162],{"key":154,"text":155},"a","It measures the distance from the light to the surface point",{"key":157,"text":158},"b","It scales incoming light by the cosine of the incidence angle",{"key":160,"text":161},"c","It converts the light color from sRGB to linear space",{"key":163,"text":164},"d","It picks which mipmap level of the diffuse texture to sample","N·L is the cosine of the angle between the normal and the light direction. A fixed bundle of rays covers more surface area at a grazing angle than head-on, so irradiance per unit area falls off with that cosine — this is Lambert's cosine law, not a distance, color-space, or mip calculation.",{"id":167,"topic":9,"difficulty":168,"body":169,"options":170,"correct_key":160,"explanation":179},"01a01705-1fed-7238-a05c-6ac59b010b1f",2,"A physically based Lambertian diffuse BRDF is written as albedo \u002F π rather than just albedo. What is the 1\u002Fπ factor for?",[171,173,175,177],{"key":154,"text":172},"Converting the albedo texture from sRGB to linear encoding",{"key":157,"text":174},"Compensating for floating-point precision loss during shading",{"key":160,"text":176},"Normalizing the BRDF's hemisphere integral to the albedo",{"key":163,"text":178},"Reducing specular aliasing on high-frequency normal maps","A BRDF's hemispherical integral of a constant reflectance should equal the fraction of light reflected. Integrating a cosine-weighted constant term over the hemisphere yields π, so dividing the diffuse term by π normalizes it back to the albedo value, keeping the surface from reflecting more energy than it receives.",{"id":181,"topic":9,"difficulty":150,"body":182,"options":183,"correct_key":154,"explanation":192},"01a01705-1fef-7eaa-a3fc-df46c1126a3e","In Blinn-Phong shading, what is the half vector H used for?",[184,186,188,190],{"key":154,"text":185},"Approximating the specular highlight direction cheaply",{"key":157,"text":187},"Storing the tangent-space normal sampled from a normal map",{"key":160,"text":189},"Pointing from the camera toward the light's shadow map",{"key":163,"text":191},"Averaging all vertex normals of the current triangle","H = normalize(L + V) sits between the light and view directions. Blinn observed that comparing N to H, rather than computing the true mirror reflection vector R and comparing it to V, gives a visually similar highlight while being cheaper to evaluate per pixel.",{"id":194,"topic":9,"difficulty":168,"body":195,"options":196,"correct_key":163,"explanation":205},"01a01705-1ff3-705d-be18-0fdff4597eda","Why is classic Blinn-Phong specular considered an empirical model rather than a physically based one?",[197,199,201,203],{"key":154,"text":198},"It cannot be implemented in a fragment shader at all",{"key":157,"text":200},"It requires a cubemap and only works with image-based lighting",{"key":160,"text":202},"Its exponent must always be an integer between 1 and 8",{"key":163,"text":204},"Its exponent is tuned by eye, unrelated to measured roughness","Blinn-Phong's specular lobe shape and brightness come from an artist-chosen exponent and multiplier that were never derived from microfacet statistics or a real Fresnel term, and the model gives no guarantee that reflected energy stays bounded. Microfacet BRDFs replaced it because roughness and F0 map to measurable material properties and can be built to conserve energy.",{"id":207,"topic":9,"difficulty":168,"body":208,"options":209,"correct_key":163,"explanation":218},"01a01705-1ff4-7e6f-9bb2-1fea81318a4f","In the microfacet Fresnel term, what does F0 represent?",[210,212,214,216],{"key":154,"text":211},"The material's total diffuse reflectance averaged over all angles",{"key":157,"text":213},"The maximum brightness a light can contribute before HDR clamping",{"key":160,"text":215},"The roughness value at which the specular lobe becomes mirror-like",{"key":163,"text":217},"The fraction of light reflected straight-on, at zero incidence angle","F0 is the Fresnel reflectance measured straight-on, with the view direction parallel to the normal (angle of incidence 0). It is the baseline the Schlick approximation grows from as the viewing angle moves toward grazing.",{"id":220,"topic":9,"difficulty":168,"body":221,"options":222,"correct_key":160,"explanation":231},"01a01705-1ff6-7cf6-bb1f-762dd7ed04d0","In the glTF 2.0 metallic-roughness material model, what linear F0 value is used for non-metal (dielectric) surfaces?",[223,225,227,229],{"key":154,"text":224},"0.0, since dielectrics have no specular reflection at all",{"key":157,"text":226},"0.5, the midpoint of the roughness range",{"key":160,"text":228},"0.04, from a fixed index of refraction of 1.5",{"key":163,"text":230},"1.0, the same grazing-angle value used for metals","The glTF specification states that for non-metals it is not possible to specify a per-material F0, so a fixed linear value of 4% (0.04) is used, derived from an assumed index of refraction of 1.5 — a good compromise for most opaque dielectric materials.",{"fields":233,"seniorities":446,"interview_shapes":447,"locales":452,"oauth":454,"question_count":457,"coach_enabled":458,"jd_match_enabled":458},[234,259,279,296,320,333,352,371,393,412,427,437],{"key":235,"name_tr":236,"name_en":236,"sort":150,"specializations":237},"backend","Backend",[238,241,244,247,250,253,256],{"key":239,"name":240,"field":235},"general","Genel",{"key":242,"name":243,"field":235},"go","Go",{"key":245,"name":246,"field":235},"python","Python",{"key":248,"name":249,"field":235},"java","Java",{"key":251,"name":252,"field":235},"csharp","C#\u002F.NET",{"key":254,"name":255,"field":235},"nodejs","Node.js",{"key":257,"name":258,"field":235},"php","PHP",{"key":260,"name_tr":261,"name_en":261,"sort":168,"specializations":262},"frontend","Frontend",[263,264,267,270,273,276],{"key":239,"name":240,"field":260},{"key":265,"name":266,"field":260},"javascript","JavaScript",{"key":268,"name":269,"field":260},"typescript","TypeScript",{"key":271,"name":272,"field":260},"react","React",{"key":274,"name":275,"field":260},"vue","Vue",{"key":277,"name":278,"field":260},"angular","Angular",{"key":280,"name_tr":281,"name_en":281,"sort":282,"specializations":283},"fullstack","Fullstack",3,[284,285,286,287,288,289,290,291,292,293,294,295],{"key":239,"name":240,"field":280},{"key":242,"name":243,"field":235},{"key":245,"name":246,"field":235},{"key":248,"name":249,"field":235},{"key":251,"name":252,"field":235},{"key":254,"name":255,"field":235},{"key":257,"name":258,"field":235},{"key":265,"name":266,"field":260},{"key":268,"name":269,"field":260},{"key":271,"name":272,"field":260},{"key":274,"name":275,"field":260},{"key":277,"name":278,"field":260},{"key":297,"name_tr":298,"name_en":298,"sort":299,"specializations":300},"devops-cloud","DevOps \u002F Cloud",4,[301,302,305,308,311,314,317],{"key":239,"name":240,"field":297},{"key":303,"name":304,"field":297},"aws","AWS",{"key":306,"name":307,"field":297},"gcp","GCP",{"key":309,"name":310,"field":297},"azure","Azure",{"key":312,"name":313,"field":297},"kubernetes","Kubernetes",{"key":315,"name":316,"field":297},"terraform","Terraform",{"key":318,"name":319,"field":297},"linux","Linux",{"key":321,"name_tr":322,"name_en":322,"sort":323,"specializations":324},"ai-engineer","AI Engineer",5,[325,326,327,330],{"key":239,"name":240,"field":321},{"key":245,"name":246,"field":321},{"key":328,"name":329,"field":321},"llm-rag","LLM\u002FRAG",{"key":331,"name":332,"field":321},"mlops","MLOps",{"key":334,"name_tr":335,"name_en":336,"sort":337,"specializations":338},"database","Veritabanı","Database",6,[339,340,343,346,349],{"key":239,"name":240,"field":334},{"key":341,"name":342,"field":334},"postgresql","PostgreSQL",{"key":344,"name":345,"field":334},"mysql","MySQL",{"key":347,"name":348,"field":334},"mongodb","MongoDB",{"key":350,"name":351,"field":334},"redis","Redis",{"key":353,"name_tr":354,"name_en":355,"sort":356,"specializations":357},"mobile","Mobil","Mobile",7,[358,359,362,365,368],{"key":239,"name":240,"field":353},{"key":360,"name":361,"field":353},"ios-swift","iOS (Swift)",{"key":363,"name":364,"field":353},"android-kotlin","Android (Kotlin)",{"key":366,"name":367,"field":353},"flutter","Flutter",{"key":369,"name":370,"field":353},"react-native","React Native",{"key":372,"name_tr":373,"name_en":374,"sort":375,"specializations":376},"security","Güvenlik","Security",8,[377,378,381,384,387,390],{"key":239,"name":240,"field":372},{"key":379,"name":380,"field":372},"appsec","AppSec",{"key":382,"name":383,"field":372},"offensive-pentest","Offensive \u002F Pentest",{"key":385,"name":386,"field":372},"cloud-security","Cloud Security",{"key":388,"name":389,"field":372},"devsecops","DevSecOps",{"key":391,"name":392,"field":372},"blue-team-incident","Blue Team \u002F Incident",{"key":394,"name_tr":395,"name_en":396,"sort":397,"specializations":398},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[399,400,403,406,409],{"key":239,"name":240,"field":394},{"key":401,"name":402,"field":394},"test-automation","Test Automation",{"key":404,"name":405,"field":394},"sdet","SDET",{"key":407,"name":408,"field":394},"performance-testing","Performance Testing",{"key":410,"name":411,"field":394},"mobile-qa","Mobile QA",{"key":413,"name_tr":414,"name_en":414,"sort":415,"specializations":416},"data-engineer","Data Engineer",10,[417,418,421,424],{"key":239,"name":240,"field":413},{"key":419,"name":420,"field":413},"pipelines-etl","Pipelines \u002F ETL",{"key":422,"name":423,"field":413},"streaming","Streaming",{"key":425,"name":426,"field":413},"warehousing","Warehousing",{"key":5,"name_tr":428,"name_en":6,"sort":429,"specializations":430},"Oyun Geliştirme",11,[431,432,433,434,435,436],{"key":239,"name":240,"field":5},{"key":142,"name":143,"field":5},{"key":145,"name":146,"field":5},{"key":132,"name":133,"field":5},{"key":136,"name":137,"field":5},{"key":139,"name":140,"field":5},{"key":438,"name_tr":439,"name_en":439,"sort":440,"specializations":441},"ml-engineer","ML Engineer",12,[442,443],{"key":239,"name":240,"field":438},{"key":444,"name":445,"field":438},"classical-ml","Classical ML",[14,15,16],{"junior":448,"mid":450,"senior":451},{"questions":449,"median_sec":3},20,{"questions":449,"median_sec":3},{"questions":449,"median_sec":3},[453,10],"tr",[455,456],"google","github",27600,true]