Romergo-ს განვითარებიდან
უსასრულო შესწორებებიდან პატარა გადასაღებ მოედნამდე: როგორ ვსწავლობ ისტორიების გენერირებას
წინა სტატიაში ვწერდი, რატომ არის საჭირო პირველწყაროსა და სათამაშოდ გამართულ ვიზუალურ ნოველას შორის მთელი პროცესი: ფაქტების შენარჩუნება, პერსონაჟების მომზადება, სცენის აწყობა და იმის ნახვა, რასაც მოთამაშე რეალურად ხედავს.
მას შემდეგ პროცესი უფრო გართულდა. არა იმიტომ, რომ AI-ისთვის კიდევ რამდენიმე შთამბეჭდავი სახელის მოგონება მინდოდა. ისტორიებზე მუშაობისას მუდმივად ვაწყდებოდი უსიამოვნო პრობლემას: კარგი სურათის დაკარგვა ძალიან ადვილია, როცა მის ოდნავ გაუმჯობესებას ცდილობ.
ჯერ ხელის გასწორებას სთხოვ. მერე — ტანსაცმლის ნაწილის დაბრუნებას. შემდეგ — ზედმეტი ფეხის მოშორებას. დიახ, ასეც ხდება. ბოლოს ამჩნევ, რომ ამდენ შესწორებაში სახე შეიცვალა, ჩრდილები გამუქდა, სუფთა ფონი კი აიმღვრა.
ერთ მონაკვეთს ასწორებ, მაგრამ მთელი სურათი იცვლება. რაღაც მომენტში უნდა აღიარო: ხუთი ვერსიის წინ უკეთესი იყო.
სურათის გასწორება მის შენარჩუნებას არ ნიშნავს
ჩემთვის ერთ-ერთი მთავარი სირთულე ცვლილებების დაგროვებაა. ვიღებთ A სურათს, მისგან ვქმნით B-ს, B-სგან — C-ს და კიდევ რამდენიმე ცდას ვაგრძელებთ. ყოველი ახალი ვერსია სასურველ შესწორებასთან ერთად იმასაც იღებს, რაც მანამდე შეუმჩნევლად შეიცვალა.
ჩემს გენერაციებში სახეები „დნებოდა“, ჩრდილები მძიმდებოდა, ზედაპირებზე არტეფაქტები ჩნდებოდა, წვრილი დეტალები ქრებოდა. ყოველი მომდევნო კადრი აუცილებლად უარესი არ არის. თუმცა შესწორებების გრძელი ჯაჭვი საწყისი იერისგან დაშორების ზედმეტად ბევრ შესაძლებლობას ქმნიდა.
ადამიანისთვის „ყველაფერი დატოვე, მხოლოდ თავი მოაბრუნე“ გასაგებია. ჩვენ პერსონაჟს ვცნობთ, ოთახი გვესმის და ვვარაუდობთ, რომ ქურთუკი ისევ აცვია, თუნდაც აღარავინ ახსენოს. გენერატორთან ამ საკითხებზე აშკარად შეთანხმებაა საჭირო. მას შეუძლია დამაჯერებელი ახალი სურათი შექმნას და ამავე დროს დააზიანოს ის, რაც თავისთავად ცხადი გვეგონა.
ასე რომ, დიახ, მუშაობის დიდი ნაწილი AI-სთან შეთანხმების სწავლაა. ხანდახან პირდაპირ უნდა აუხსნა, რომ მესამე ფეხი ჯერ კიდევ არ გვჭირდება.
GENERAL: საყრდენი, რომელთანაც დაბრუნება შეიძლება
ჩემი პირველი პასუხი GENERAL იყო — პერსონაჟის, ადგილის ან საგნის დამტკიცებული ეტალონური სურათი. რაც შეიძლება ნეიტრალური, კარგად ხილული მუდმივი ნიშნებით და კონკრეტულ ეპიზოდზე მიბმული მინიმალური დეტალებით.
ამის შემდეგ ვცდილობ, ავირიდო უსასრულო ჯაჭვი „ბოლო შესწორება → შემდეგი შესწორება“. ახალი მდგომარეობა GENERAL-ის საფუძველზე იქმნება, იმის გათვალისწინებით, რაც ახლა უნდა ხდებოდეს.
სცენის შესწორებისას დავალებას სამი საყრდენი შეიძლება ჰქონდეს:
- GENERAL განსაზღვრავს პერსონაჟის ან ადგილის იერს;
- წინა კადრი სასურველი პოზის, კომპოზიციის ან მდგომარეობის შენარჩუნებაში გვეხმარება;
- სრული მოთხოვნები აღწერს სასურველ შედეგს, ახალი შესწორების ჩათვლით.
წინა ვერსია დამხმარე ნიმუშად რჩება. ის დაგროვილ შეცდომებთან ერთად შეუმჩნევლად ახალ ეტალონად არ უნდა იქცეს.

*ეს მიდგომის ილუსტრაციაა და არა რეალური გენერაციების შედარება. GENERAL სტაბილურ საყრდენს იძლევა, მაგრამ ყოველი პიქსელის უცვლელობას არ უზრუნველყოფს.*
არ არსებობს ჯადოსნური გზა, რომელიც გენერატორს შეცდომის დაშვებას აუკრძალავს. თუმცა ახლა გვაქვს მკაფიო პასუხი კითხვაზე: „სად დავბრუნდეთ, როცა ყველაფერი იცვლება?“ იცვლება შესწორების მიზანიც: იმავე პერსონაჟით საჭირო სცენა შევქმნათ და არა უბრალოდ ბოლო წარუმატებელი ვერსია ვასწოროთ.
Render Eye: რა არსებობს სამყაროში და რა ჩანს კადრში
შემდეგი პრობლემა უფრო ფაქიზი იყო. ვთქვათ, პერსონაჟი კარგად არის აღწერილი: ქურთუკი, ხელთათმანები, ქამარი, ჩექმები. ახლა კი კადრი წელამდეა, ერთი ხელი ზურგს უკან აქვს, სხეულის ნაწილს კარი ფარავს.
რომელი დეტალები უნდა დავხატოთ? რა უნდა დარჩეს დამალული? და როგორ გავარჩიოთ დაფარული ხელთათმანი იმისგან, რომლის დახატვაც გენერატორს უბრალოდ დაავიწყდა?
სწორედ ამიტომ ვავითარებ Render Eye-ს. მას ორი ამოცანა აქვს: გენერაციამდე მოთხოვნების მომზადება და შემდეგ მიღებული სურათის შემოწმება.
ჯერ ისტორიის ცნობარს მიმართავს — პერსონაჟების, ლოკაციების, საგნებისა და მათი მდგომარეობების შენახულ აღწერებს. შემდეგ მათ დადგმას ადარებს: კამერის მდებარეობას, მოქმედებასა და იმას, რამაც მოთამაშის ყურადღება უნდა მიიპყროს.
ყოველი მნიშვნელოვანი დეტალისთვის წყდება: სრულად ჩანს, ნაწილობრივ ჩანს, სხვა საგანი ფარავს თუ კადრს მიღმაა. თუ ხელი ზურგს უკანაა, ხელთათმანი სამყაროდან არ ქრება. უბრალოდ, ამ რაკურსიდან ვერ შეამოწმებ.

ასე კადრის კონკრეტული დავალება მიიღება. არა უბრალოდ „დახატე გმირი დერეფანში“, არამედ „ეს გმირი, ამ ტანსაცმელში, ამ რაკურსიდან, ამ ხილული დეტალებით“. თუ საგანი სცენის გასაგებად აუცილებელია, ის შემთხვევით სურათის კიდის მიღმა არ უნდა დაიმალოს.
გენერაციის შემდეგ Render Eye იმავე დავალებას უბრუნდება. ამოწმებს ტანსაცმელს, საგნებსა და პერსონაჟების განლაგებას, ცალკე — ანატომიასა და არტეფაქტებს. აღმოჩენილი შეცდომა ან გაურკვევლობა სურათს შესასწორებლად აბრუნებს. არ შეიძლება გამქრალი ქურთუკის მიღება და შემდეგ პერსონაჟის აღწერის ისე გადაწერა, თითქოს ქურთუკი არასოდეს არსებობდა.
ამავე დროს, სისტემას წარმოსახვითი ზეძალები არ უნდა მივანიჭოთ. სურათს AI ათვალიერებს და მასაც შეიძლება რაღაც გამორჩეს. სავალდებულო შემოწმება პროცესს უფრო დისციპლინირებულს ხდის, მაგრამ ხედვის მოდელს უშეცდომო დამკვირვებლად არ აქცევს.
რეჟისორი: რატომ გვჭირდება სწორედ ეს კადრი?
შეიძლება ტანსაცმელი სწორად დახატო, სახე შეინარჩუნო, ყველა პერსონაჟი თავის ადგილზე დასვა და მაინც უგემური სცენა მიიღო.
ისტორია მხოლოდ მასში არსებული ნივთები არ არის. მნიშვნელოვანია, როდის შენიშნავს მათ მოთამაშე, რომელი რეპლიკა იქნება პირველი, რამდენ დროს დავუთმობთ რეაქციას და რა ისმის ამ დროს.
ასე გაჩნდა რეჟისორის ცალკე როლი. ის უშუალოდ სცენის დონეზე მუშაობს: რეპლიკებისა და რეაქციების რიგი, პერსონაჟების გამოჩენა, განათება, ფერი, მუსიკა, ხმები, პაუზები და ინტერფეისის კომპოზიცია. პირველწყარო მთელი პროცესის განმავლობაში სამუშაო მასალად რჩება და არა დასაწყისში ერთხელ წაკითხულ დავალებად.
ავიღოთ გამოგონილი წინადადება: „კარს მიღმა ნაბიჯების ხმა გაისმა“.
შეგვიძლია უბრალოდ კარი ვაჩვენოთ და ტექსტი გამოვიტანოთ. ან წინასწარ ჩავაცხროთ მუსიკა, დავტოვოთ ოთახის მშვიდი ფონური ხმა, ნაბიჯები კადრს მიღმა გავაჟღეროთ, პერსონაჟის რეაქციაზე შევჩერდეთ და მხოლოდ შემდეგ გავაგრძელოთ საუბარი. თუ პირველწყაროს ჯერ არ უთქვამს, ვინ მოვიდა, კამერამ თავაზიანად არ უნდა გაგვიმხილოს.
დეტექტივში იმავე დერეფანმა შეიძლება ყურადღება სამხილზე გადაიტანოს, რომანტიკულ სცენაში — შეხვედრის მოლოდინზე. განსხვავება კონკრეტული გადაწყვეტილებებიდან მოდის. დავალებაში „განწყობა: საშინელება“ ჩაწერა საკმარისი არ არის.
რეჟისორი გადაწყვეტილებებს დადგმის გეგმაში ინახავს. ნაწარმოების ფაქტები ინტერპრეტაციისგან ცალკე რჩება: ცივი შუქი შეიძლება მხატვრული არჩევანი იყოს, ახალი მდევრის შემოყვანა კი მოვლენებს ცვლის.
თამაშში კიდევ ერთი სირთულეა: ყველა თავისი ტემპით კითხულობს. რეპლიკამდე პაუზა და მისი წაკითხვის დასრულების ლოდინი სხვადასხვა რამაა. არ შეიძლება ლამაზი ოთხწამიანი მომენტი დაგეგმო და ტექსტი დაუხურო ადამიანს, რომელსაც ექვსი წამი სჭირდება.
არც უგემური სცენის ეფექტების მექანიკური ნაკრებით შეცვლა მინდა. ზოგჯერ სწორი არჩევანი უძრავი კადრი, მარტივი გადაბმა და მუსიკის არარსებობაა. ხერხს დანიშნულება უნდა ჰქონდეს.
დირექტორი: გამოვიდა ის, რაც ჩავიფიქრეთ?
„რეჟისორი“ და „დირექტორი“ შეიძლება ახლო როლებად ჟღერდეს, მაგრამ პასუხისმგებლობას ვყოფ. რეჟისორი სცენას დგამს. დირექტორი შედეგს ამოწმებს.
ის პირველწყაროსა და დადგმის გეგმას თამაშში რეალურად მოხვედრილ შედეგს ადარებს. უყურებს დასრულებულ თანმიმდევრობას და არა მხოლოდ ცალკეულ ლამაზ სურათებს.
ინტერფეისმა მნიშვნელოვანი საგანი ხომ არ დაფარა? რეპლიკის შეცვლისას მსმენელი პერსონაჟი ხომ არ გაქრა? წინა ოთახის მუსიკა ხომ არ უკრავს? ტელეფონზე კომპოზიცია ხომ არ დაიშალა? გადმოსცემს თუ არა სცენა იმ ტონს, რომლისთვისაც განათება, პაუზები და ხმა შეირჩა?
სასარგებლო შემოწმებამ ისიც უნდა იცოდეს, სად დააბრუნოს პრობლემა. სურათის შიგნით დეფექტია — უკან გენერაციაში. კარგი პერსონაჟის სურათი ეკრანზე ცუდადაა განლაგებული — აწყობაა შესასწორებელი. ხმა ადრე იწყება — ფონის თავიდან დახატვა საჭირო არ არის.

*სქემაზე Director დადგმის რეჟისორია, QA კი ხარისხის შემმოწმებელი დირექტორი. სქემა გამარტივებულია: აწყობისა და საბოლოო შემოწმების დროსაც პირველწყარო საყრდენად რჩება. უკანა ისარი შესაბამისი ეტაპის შესწორებას ნიშნავს და არა აუცილებლად მთელი სამუშაოს თავიდან დაწყებას.*
არც ადამიანი უნდა მორიგეობდეს გენერატორთან
სურათები უფრო სწრაფადაც რომ მოდიოდეს, სხვა ხარჯი რჩება — ყურადღების მუდმივი გადართვა. გახსნა ჩატი, ნახო კადრი, დატოვო კომენტარი, დაუბრუნდე საქმეს. რამდენიმე წუთში გაიმეორო.
ამიტომ კიდევ ერთ მიმართულებაზე ვმუშაობ: GENERAL ჯგუფებად. დამოუკიდებელი ეტალონები შეიძლება წინასწარ მომზადდეს და ადამიანს ერთად წარედგინოს. ერთად დათვალიერება შეუსაბამობების შემჩნევასა და საერთო ან ინდივიდუალური შენიშვნების დატოვებაში ეხმარება.
შემდეგ მხოლოდ საჭირო კადრები გადაკეთდება. ერთი წარუმატებელი ცდის გამო დამტკიცებული სურათები არ უნდა დაიკარგოს. დამოკიდებულებები მაინც მნიშვნელოვანია: თუ შემდეგ სურათს ჯერ დაუმტკიცებელი ეტალონი სჭირდება, ჯერ ის უნდა გადაწყდეს.
ეს თვითონ გენერატორის რამდენჯერმე აჩქარების დაპირება არ არის. ჩემთვის უფრო მნიშვნელოვანია, შემცირდეს ის შემთხვევები, როცა ადამიანს მორიგი შემოწმების გამო თავისი საქმის მიტოვება უწევს.
ერთი უზარმაზარი ინსტრუქციის ნაცვლად — პატარა გადამღები ჯგუფი
საბოლოოდ, მართლაც AI-ის პატარა გადამღები ჯგუფის შეკრებას ვცდილობ. მას აქვს აღწერილი სამყარო, ეტალონები, დადგმა, კადრების წარმოება, აწყობა და ხარისხის კონტროლი.
ეს აგენტის სამუშაო პროცესში პასუხისმგებლობის სფეროებია. ავტომატურად არ ნიშნავს, რომ თითოეულ როლს უკვე ცალკე, მუდმივად მომუშავე AI ასრულებს. მნიშვნელოვანია, გადაწყვეტილებები ინახებოდეს, მოთხოვნები უკუქცევით არ იცვლებოდეს და ყოველი შესწორებისას გასაგები იყოს, რა უნდა შემოწმდეს ხელახლა.
ახალ ეტაპებს უკვე აქვს ხელსაწყოები და შენახული გეგმები. შემდეგი ნაბიჯია ნამდვილ, გრძელ თავებზე გამოცდა: რამდენად გვეხმარება ეს ყველაფერი მთელი ისტორიის განმავლობაში პერსონაჟების, განწყობისა და შემქმნელის ყურადღების შენარჩუნებაში?
ჩემი საბოლოო მიზანია დიდი წიგნის მოტანა, თავის არჩევა და მისი თანმიმდევრულად სათამაშო ქვესტად ქცევა. ისე, რომ შემეძლოს გაჩერება, შედეგის ნახვა, მნიშვნელოვანის შესწორება და გაგრძელება იქიდან, სადაც მუშაობა შეწყდა.
ისტორიების გენერირება ბევრად რთული აღმოჩნდა, ვიდრე „კარგი პრომპტის დაწერა“. მაგრამ ახლა ამ სირთულის კონკრეტულ ამოცანებად დაყოფა შემიძლია. ზოგჯერ სტაბილური ეტალონია საჭირო, ზოგჯერ ყურადღებით კითხვა, ზოგჯერ რეპლიკის წინ სიჩუმე. ზოგჯერ კი ისევ ადამიანია საჭირო, რომელიც სცენას შეხედავს და იტყვის: „არა, აი აქ არ მჯერა შენი“.