# Instrucțiuni pentru agentul care generează modelul Blender

## Invocare și scop

Primești calea unui folder de obiectiv din acest pachet. Generează un model exterior recognoscibil și editabil în Blender, folosind fotografiile locale ca referințe vizuale, apoi exportă geometria mesh și materialele în glTF 2.0, preferabil GLB, pentru navigare într-o scenă Three.js. Livrabilele sunt scena Blender și exportul pregătit pentru randare în site, nu o reconstrucție fotogrammetrică automată din fotografii.

**Ordinea priorităților:** geometrie fidelă referințelor și coerență fizică a ansamblului, apoi dimensiuni cât mai mici pentru `.blend` și GLB, apoi microdetalii decorative. Folosește numărul minim de triunghiuri care păstrează aceste cerințe. Densitatea mesh-ului nu este un criteriu de realism; un model simplu și corect este preferabil unui model dens cu proporții greșite sau elemente suspendate.

## 1. Citește referințele

Citește `metadata.json`, `descriere.md` și toate fișierele enumerate în `imagini`. Deschide efectiv imaginile; numele și descrierile lor nu înlocuiesc inspecția vizuală. Folosește `acoperire_modelare` pentru a găsi referințele grupate pe componente și pentru a identifica zonele insuficient documentate.

Identifică obiectivul și limitele ansamblului, volumele dominante, silueta, turnurile, acoperișurile, fațadele, golurile și raportul cu terenul. Folosește vederile de sus pentru amplasarea volumelor și acoperișurilor, cadrele de la sol pentru proporțiile fațadelor, iar detaliile pentru materialele și ornamentația vizibile.

**Criteriu:** fiecare imagine a fost inspectată și există o listă a elementelor structurale vizibile, asociate fișierelor care le susțin. Pentru fotografii din epoci diferite, alege o stare de referință coerentă și documentează alegerea; nu amesteca automat degradările dinaintea restaurării cu starea restaurată.

## 2. Construiește geometria

Construiește întâi volumele mari și pozițiile lor relative, apoi acoperișurile și turnurile, fațadele și golurile, iar la final elementele decorative care definesc identitatea obiectivului. Separă componentele în obiecte sau colecții cu nume descriptive, pentru editare în Blender.

Prioritizează fidelitatea siluetei, numărul și poziția volumelor dominante, proporțiile și elementele recognoscibile. Un model generic de castel sau biserică nu satisface cerința dacă ignoră particularitățile obiectivului din fotografii.

- Folosește dimensiuni metrice numai când sunt susținute de surse. Altfel, păstrează proporțiile și declară scara convențională.
- Păstrează modelul lângă originea scenei, cu Z vertical. Coordonatele GPS servesc identificării, nu dimensionării sau poziționării geometriei la milioane de metri de origine.
- Completează zonele nevizibile prin aproximări arhitecturale prudente, compatibile cu volumele observabile. Documentează separat aceste aproximări; nu le prezenta drept geometrie măsurată.
- Folosește geometrie cu volum pentru elementele care trebuie să rămână vizibile la schimbarea unghiului camerei. Un panou cu fotografia clădirii nu înlocuiește modelul exterior.
- Asigură un traseu de susținere plauzibil până la teren: ziduri pe fundație/stâncă, trepte pe suport continuu, galerii pe console ancorate în ziduri, stâlpi pe podele și coșuri racordate în acoperiș. Elementele în consolă sunt acceptate când au ancorare; nu adăuga suporturi arbitrare ca să maschezi poziționarea greșită.
- Verifică suprafețele reale de contact și degajările prin raze, distanțe sau intersecții, inclusiv după aplicarea modificatorilor. Simplul contact între bounding box-uri nu demonstrează susținerea. Corectează golurile accidentale, obiectele plutitoare și intersecțiile care blochează ferestre, uși sau circulația.
- Păstrează geometrie pentru siluetă, grosimi, goluri reale și detalii recognoscibile. Reprezintă rosturile, rugozitatea și țiglele repetitive prin texturi/normal maps când relieful lor individual nu schimbă silueta la distanțele de navigare. Redu segmentele curbelor, subdiviziunile și bevel-urile numai după comparație vizuală; evită decimarea globală care distruge aceste forme.

**Criteriu:** exteriorul este continuu și poate fi privit de jur împrejur și de sus; elementele dominante sunt recognoscibile, au susținere și racorduri plauzibile, iar zonele completate prin inferență sunt enumerate. Documentează verificările geometrice ale suporturilor. Coerența fizică vizuală nu reprezintă calcul structural sau certificare de rezistență.

## 3. Materiale și scenă

Creează materiale pentru zidărie, tencuială, piatră, lemn, metal, sticlă și învelitori, după ce este efectiv vizibil în referințe. Folosește materiale PBR compatibile glTF; pentru materiale procedurale sau noduri Blender care nu se exportă, coace rezultatul în texturi proprii și verifică UV-urile. Dacă încorporezi fotografii în texturi, păstrează proveniența și condițiile licențelor; evită proiectarea fotografiilor cu umbre sau perspectivă ca substitut pentru geometrie.

Adaugă numai terenul și contextul necesare prezentării obiectivului. Păstrează geometria, materialele și iluminarea consecvente între randări. Împachetează în fișierul Blender resursele externe folosite.

Refolosește materialele și texturile repetabile. Pornește cu 512 px pentru base color/normal și 256 px pentru roughness; crește rezoluția numai unde comparația vizuală arată o pierdere importantă, de exemplu 1024 px pentru învelitori. Folosește JPEG quality 85 pentru base color opac și PNG pentru transparență și hărțile de date. După redimensionare, verifică și renormalizează normal maps sau regenerează-le din harta de înălțime la rezoluția finală.

**Criteriu:** scena se poate redeschide și randa fără fișiere lipsă; materialele și silueta pot fi evaluate cu lumină neutră, fără ca iluminarea să mascheze erorile de modelare.

## 4. Exportă pentru Three.js

Exportă un **GLB cu geometria și texturile încorporate, comprimat Draco**. Viewerul folosește `GLTFLoader` și `DRACOLoader`, cu decoder inclus în aplicație, fără CDN. Meshopt și KTX2 nu sunt configurate. Aplică modificatorii necesari, verifică normalele și UV-urile și păstrează numai componentele utile exteriorului. Păstrează Z vertical în Blender și conversia standard glTF cu Y vertical la export.

Aplică optimizarea în această ordine, cu verificare vizuală după fiecare reducere:

1. Elimină geometria duplicată, fețele complet ascunse care nu sunt necesare editării sau suporturilor și detaliile subpixel. Refolosește mesh-uri pentru elementele identice în Blender; verifică dacă exportul păstrează reutilizarea. Păstrează componentele semantice și editabilitatea.
2. Redu tesselația selectiv și folosește hărțile PBR conform secțiunilor 2–3. Compresia nu înlocuiește simplificarea: Draco reduce octeții transferați, nu numărul de triunghiuri randate.
3. Activează `export_draco_mesh_compression_enable=True`, nivel 10, cu cuantizare inițială position 16 / normal 10 / texcoord 14 biți și `export_image_format='AUTO'`. Cuantizarea pierde precizie; verifică GLB-ul decodat pentru fisuri, contacte, UV-uri și normale, crescând precizia dacă apar defecte. Pentru Bran, păstrează setările și limitările din `01-castelul-bran/output/ipoteze.md`.
4. Elimină datablock-urile nefolosite, împachetează numai resursele folosite și salvează `.blend` cu `compress=True`. Exclude din export camerele/luminile de studio și animațiile nefolosite. Nu livra copii de rezervă `.blend1` ca asset-uri.
5. Măsoară fișierele reale după export și compară geometria decodată cu scena Blender. Repetă reducerile numai cât timp silueta, identitatea și coerența fizică rămân intacte. Oprește optimizarea înainte să degradeze aceste priorități și explică ce păstrează dimensiunea rămasă.

Dacă livrezi `.gltf` în loc de GLB, include toate fișierele `.bin` și texturile externe, păstrând căile relative. Pentru resurse găzduite pe alt domeniu sunt necesare permisiuni CORS. Viewerul prezintă o scenă statică: animațiile nu sunt implementate.

**Criteriu:** exportul comprimat conține mesh-uri și materiale randabile, fără resurse lipsă sau decodoare neconfigurate, iar transformările, orientarea și contactele sunt corecte după încărcare în Three.js. Documentează triunghiurile, dimensiunile `.blend` și GLB în octeți/MiB, rezoluțiile texturilor, setările compresiei și compromisurile vizuale. Raportează reducerile față de varianta inițială când aceasta există. Verifică limitele GPU/memorie ale dispozitivelor țintă; un fișier mic nu garantează memorie mică după decodare.

## 5. Verifică și livrează

Livrează într-un director de ieșire separat de referințe:

- `model.blend`: scena editabilă completă;
- `model.glb`: exportul verificat pentru site; alternativ, `model.gltf` împreună cu toate dependențele sale;
- `generate_model.py`: script Blender Python care reconstruiește scena, cu versiunea Blender folosită și comanda de execuție documentate;
- `preview/`: randări de control din perspective frontale/laterale, o perspectivă suplimentară pentru exteriorul nevizibil în fotografii și o vedere de sus;
- `ipoteze.md`: starea istorică aleasă, scara, elementele aproximative, zonele insuficient documentate, sursele și atribuirea resurselor folosite.

Execută scriptul în Blender, redeschide fișierul salvat și generează randările de control. Compară efectiv randările cu fotografiile disponibile și corectează diferențele la siluetă, proporții, amplasarea turnurilor și forma acoperișurilor înainte de livrare. Pentru unghiurile fără referințe, verifică continuitatea exteriorului, nu pretinde fidelitate documentară.

Integrează exportul în site conform [UTILIZARE.md](UTILIZARE.md): fișierul real se pune în `static/models/`, iar intrarea existentă din `static/obiective-romania/catalog.json` primește `model.url`. Deschide scena efectiv în browser și compară geometria, materialele și orientarea cu randările de control. Testează orbitarea, zoom-ul și deplasarea cu [OrbitControls](https://threejs.org/docs/pages/OrbitControls.html), inclusiv vederea de sus și unghiurile fără referințe. Dacă propui `cameraPosition` sau `cameraLookAt`, folosește coordonate în spațiul Three.js după recentrarea modelului de către viewer, nu coordonate GPS.

**Criteriu:** scriptul a fost executat cu succes, fișierul `.blend` a fost redeschis, randările reale au fost inspectate, exportul a fost încărcat și navigat în Three.js și fiecare limitare de fidelitate este explicită. Raportează exact verificările efectuate și eventualele resurse lipsă; existența unui script sau export fără verificarea vizuală nu reprezintă validarea modelului. Documentația loaderului: [GLTFLoader](https://threejs.org/docs/pages/GLTFLoader.html).
