Ступенчатость полутонов

Делимся опытом. Задаем вопросы и отвечаем на них. Обсуждаем статьи и новости.

Модератор: Модераторы Обсерватории

Ступенчатость полутонов

Сообщение smirnov » Пт дек 11, 2009 10:07 pm

Скачал себе BD-Rip одного фильма себе в коллекцию, давно искал в нормальном качестве. Но, бд-рип по качеству не уступал моему более раннему файлику размером с компакт-диск. Единственный плюс - верная цветопередача и отсутствие артефактов сжатия DivX-ом.
В моем инструментарии есть VirtualDub и Neat Video. Чтобы не терять в качестве, я отказался от промежуточных кодеков. Я их вообще не использовал, с этапа на этап видео делалось без компрессии. Шумы в исходнике были очень разные, на очистку фильма ушла неделя, но зато на выходе получил идеальное качество - ни малейшего шума и полное сохранение мелких деталей.
Была задумка зажать кодеком H.264, коли я поддался рекламе и купил его, и запаковать в контейнер MKV. VirtualDub этого не умеет, потому пришлось в систему ставить AviDemux. Вот тут и начались проблемы.
На входе я подавал файл в идеальном качестве, на выходе вроде тоже получилось очень красиво, но я случайно наткнулся на сцену с плавными полутонами на весь кадр - там было такое безобразие, которое просто невозможно принять, учитывая, какого качества я достиг, удаляя шумы.
Вот это безобразие -
Изображение

Для сравнения вот тот же самый кадр, который у меня получился по окончании чистки фильма в VirtualDub-е -
Изображение

Я грешил на кодек, менял все настройки, что были доступны. В процессе кодирования я заметил, что именно в этих местах битрейт падает в 3 раза. Думал, может из-за падения битрейта появляются "ступеньки".
Но мне один товарищ подсказал, что может быть дело не только в кодеке, что может зависить от того, какой предварительный кодек используется перед подачей видео кодеку H.264. Посоветовал програмку Xvid4PSP - там можно выбирать, как именно открывать входное видео.
Тогда я в програмке AviDemux нашел тот же самый кадр и увидел, что уже перед подачей видео кодеку H.264 появляются ступеньки, которые характерны для уменьшения битности цвета -
Изображение

Я воспользовался советом товарища и освоил програмку Xvid4PSP. Но там, сколько не игрался с настройками, каким образом открывать видео-файл, результат в окне предварительного просмотра не менялся, те же ступеньки, хоть и менее выражены -
Изображение

То есть, текущие современные програмки для конвертирования не способны открыть мой файлик без ухудшения качества картинки. Только VirtualDub способен открыть видео-файл корректно, но я в нем не могу создать ни MKV, ни MPEG2.
Отсюда вопрос, существует ли програмка, которая работает с MKV и с MPEG2, но открывающая видео тем же способом, что и VirtualDub? Canopus Procoder 3 исключается, я его опробовал, качество ниже плинтуса при максимальных настройках.
По ходу могу обратить внимание, как сильно падает качество картинки, это видно из того, какой "вес" у изображений. Самый большой "вес" тестовой картинки относится к самому качественному открытию видео-файла. Самый низкий "вес" картинки относится к видео, прошедшего сжатие кодеком H.264 с самым высоким битрейтом.
Еще обращу внимание на то, что я полностью исключил влияние видео-плейеров и их настроек - картинки брал из видеоредакторов.
На всякий случай предлагаю 5 кадров некомпрессированного видео (12Мб) тем, кто хочет сам попробовать решить эту проблему. К форуму почему-то не хочет прикрепляться. В оригинале там 48 кадров, просто 10 раз этот кусочек повторите и получите нужный файл.
smirnov
Старшина 2ой статьи
Старшина 2ой статьи
 
Сообщения: 129
Зарегистрирован: Чт янв 01, 1970 6:00 am

Re: Ступенчатость полутонов

Сообщение Сантьяго » Сб дек 12, 2009 4:10 am

С кодеком h264 все равно не получится сохранить все полутона. Ибо он ест только yv12.
Сантьяго
Старшина 2ой статьи
Старшина 2ой статьи
 
Сообщения: 140
Зарегистрирован: Пт дек 19, 2008 6:53 am

Re: Ступенчатость полутонов

Сообщение Gideon Vi » Сб дек 12, 2009 6:38 am

Была задумка зажать кодеком H.264, коли я поддался рекламе и купил его, и запаковать в контейнер MKV. VirtualDub этого не умеет, потому пришлось в систему ставить AviDemux

не совсем понятно, что же именно ты купил, учитывая то, что AviDemux использует только внутренние энкодеры, а x264, который идет с ним в комплекте - свободный энкодер.
Что же касается появляющегося градиента, то можно попробовать открыть файл через Avisynth, используя ffdshow в качестве декодера (подгружать через DirectShowSource)
С кодеком h264 все равно не получится сохранить все полутона. Ибо он ест только yv12.

пока что речь о градиенте, появляющемся на стадии декодирования
Now we that are strong ought to
bear the infirmities of the weak
and not to please ourselves.
Gideon Vi
Капитан-Лейтенант
Капитан-Лейтенант
 
Сообщения: 803
Зарегистрирован: Ср июл 20, 2005 7:10 pm

Re: Ступенчатость полутонов

Сообщение smirnov » Сб дек 12, 2009 2:40 pm

AviDemux не понял файл *.avs
XviD4PSP все равно открыл по-своему.
У меня в скрипте прописано следующее
-------------
#ASYNTHER Simple DirectShow reader
DirectShowSource("C:\Hardware24-ogonj.avi")
-------------
FFDShow в системе имеется, настроен на перехват всех обращений к кодекам.
smirnov
Старшина 2ой статьи
Старшина 2ой статьи
 
Сообщения: 129
Зарегистрирован: Чт янв 01, 1970 6:00 am

Re: Ступенчатость полутонов

Сообщение Gideon Vi » Сб дек 12, 2009 7:18 pm

FFDShow в системе имеется, настроен на перехват всех обращений к кодекам.

Надо понимать, что ему поставлен максимальный приоритет. Так же, если стоит windows 7, то нужно принудительно воспользоваться Win7DSFilterTweaker
Кроме того, зачем использовать какие-то промежуточные программы? Результат с синта лучше сразу отдавать консольному x264. Если нужно подбирать параметры декодера/фильтров, то поток из синта лучше просматривать в AvsP
Now we that are strong ought to
bear the infirmities of the weak
and not to please ourselves.
Gideon Vi
Капитан-Лейтенант
Капитан-Лейтенант
 
Сообщения: 803
Зарегистрирован: Ср июл 20, 2005 7:10 pm

Re: Ступенчатость полутонов

Сообщение smirnov » Вс дек 13, 2009 1:18 am

Gideon Vi писал(а):Кроме того, зачем использовать какие-то промежуточные программы? Результат с синта лучше сразу отдавать консольному x264. Если нужно подбирать параметры декодера/фильтров, то поток из синта лучше просматривать в AvsP

Просто из-за того, что я в середине фильма маленько напортачил с масками шума в одном из эпизодов, я этот эпизод исправил в отдельный маленький файл. А затем в видеоредакторе я открывал основной файл, с момента начала переделанного эпизода и до конца файла отрезал, затем добавлял исправленный эпизод, потом к концу добавлял снова основной файл, но уже отрезал от начала файла и до конца переделанного эпизода. Кино занимает 350 Гб, нету места создать единым файлом конечный вариант фильма. Потому и видеоредактор. А также меня пугают консольные команды кодеков, потому снова видеоредактор, где через GUI уже могу предполагать, какой имеется параметр и в какое значение его поставить.
У меня 2 вопроса.
1. Есть ли наисвежайшая справка по AviSynth на русском, я не владею английским, и справка по консольному х264, чтобы освоить командную строку?
2. Существует ли подобный вариант для кодирования в MPEG2?

К слову добавлю, что через окошко превью в AvsP тестовое кино открылось нормально, без скачков в полутонах, но ведь это просто текстовый редактор, с него нет хода до кодека. Это получается, что консольный х264 должен понимать файлы *.avs.
smirnov
Старшина 2ой статьи
Старшина 2ой статьи
 
Сообщения: 129
Зарегистрирован: Чт янв 01, 1970 6:00 am

Re: Ступенчатость полутонов

Сообщение Gideon Vi » Вс дек 13, 2009 7:58 am

1. Есть ли наисвежайшая справка по AviSynth на русском, я не владею английским, и справка по консольному х264, чтобы освоить командную строку?

синт:сначала ставишь 2,5,8, в процессе установки выбираешь русскую документацию. Затем поверх ставишь 2.6.0 Alpha 2 (не смотри, что альфа - работает стабильно)
по консольному x264 инфы, как грязи - гуголь в помощь.
От себя добавлю, что для такой простой задачи, как кодирование уже отреставрированного видео, ни тот, ни другой хэлпы тебе не нужны. Вот примерная ком. строка для x264, которая должна устроить тебя по качеству итогового видео:
x264.exe --profile high --level 4.1 --crf 20 --rc-lookahead 90 --weightp 2 --ref 5 --trellis 2 --deblock -2:-2 --bframes 3 --b-pyramid normal --partitions all --8x8dct --me umh --subme 10 --aq-mode 2 --aq-strength 1.0:1.0 --psy-rd 1.0:0.6 --b-adapt 2 --keyint 500 --min-keyint 25 --qpmax 27 --output "C:\1.mkv" "C:\1.avs"

по сути надо будет поменять только keyint в соответствии с fps твоего фильма. Попробуй закодировать так кусок и оцени результат. Если что-то будет не устраивать, можно изменить crf в сторону понижения.
2. Существует ли подобный вариант для кодирования в MPEG2?

Что значит, подобный? Для mpeg2 стандартная связка: синт+CCE2 (или синт + карбон).
К слову добавлю, что через окошко превью в AvsP тестовое кино открылось нормально

Что и требовалось доказать: проблемы на стадии декодирования вносит видео редактор. Если в avsp все нормально, значит и на вход x264 все нормально придет.
Это получается, что консольный х264 должен понимать файлы *.avs

именно так. Вот отрезок ком. строки, который отвечает за вход/выход:
--output "C:\1.mkv" "C:\1.avs"
Последний раз редактировалось Gideon Vi Вс дек 20, 2009 8:09 pm, всего редактировалось 1 раз.
Now we that are strong ought to
bear the infirmities of the weak
and not to please ourselves.
Gideon Vi
Капитан-Лейтенант
Капитан-Лейтенант
 
Сообщения: 803
Зарегистрирован: Ср июл 20, 2005 7:10 pm

Re: Ступенчатость полутонов

Сообщение smirnov » Вс дек 13, 2009 3:27 pm

Gideon Vi
Спасибо. :)
Для меня эта область только открылась с момента, как взялся за реставрацию данного фильма и принял решение воспользоваться контейнером MKV и кодеком х.264. А MPEG2 для меня был доступен только через прокодер. 8)
smirnov
Старшина 2ой статьи
Старшина 2ой статьи
 
Сообщения: 129
Зарегистрирован: Чт янв 01, 1970 6:00 am

Re: Ступенчатость полутонов

Сообщение smirnov » Вс дек 20, 2009 2:49 pm

Gideon Vi
Звиняюсь. Я не смог разобраться с ССЕ2
Запустил на кодирование в 3 прохода по максимальному постоянному битрейту (9800). Как я смог истолковать ошибку, вышла та же самая ошибка, что у меня возникала в Canopus Procoder 3 - нехватка размера видеобуфера (VBV) - когда вместо дефолтного 224 кб поставил 448, прокодер смог без ошибок закодировать. Попытался в этом кодеке найти такой же параметр - не смог, нигде его не было. Но зато наткнулся на такую интересную вещь. Через настойки VBR вышел на табличку "распределение VBR потока" - там есть ползунок, который позволяет выбирать в видеопотоке, какие участки с какими параметрами кодирования. И этот ползунок уперся в правый конец своей шкалы гораздо раньше, чем закончился видеопоток. Шкалы хватило только на 1 час и 5 минут. Что не так?
Ошибку не сохранил, думал, разберусь за полминуты. Но, не нашел данный параметр.
На всякий случай. На диске полно места, памяти еще больше.
-----------------------
Повторил кодирование, чтобы получить описание ошибки, но кодер прокодировал без ошибок. На сей раз он кодировал только до места, где он ошибся в прошлый раз. Фильм стал длиной 1 час и 5 минут. Оставшиеся полчаса фильма отсутствуют. И у меня возникло предположение, что первоначальная ошибка возникла из-за того, что следующую главу я задавал за областью доступного видео - после 65 минут видео.
-----------------------
Теперь я точно знаю, что было.
Когда создавался при первом проходе vaf-файл, то он прекратил формироваться в момент пресыщения VBV-буфера и возникновении ошибки с остановкой дальнейшего анализа видео. При следующей попытке кодер уже обращался к существующему vaf-файлу и кодировал строго в его пределах. Потому и без ошибок и не до конца фильма. При удалении vaf-файла кодирование началось опять с оценки видео-потока и создавания нового vaf-файла. А буфер переполнялся потому, что он очень маленький - всего 112 кб против 224 у СР. Ситуация была такая. Резкая смена содержимого кадра приводит к началу формирования очередного GOP. А он у меня задан размером в 12 кадров. Буфер начинает наполняться инфой, как этот GOP сформировать. Но тут вдруг засада. Буквально через 2 кадра опять резкое изменение содержимого кадра, причем в самом кадре очень и очень много инфы - там крупным планом растр телевизора, где каждая точечка видна, а через 2 кадра на этом растре появляется крупная надпись. Вот тут VBV-буфер и захлебывается от обилия инфы.
Странно, что никто не чухнулся с этой ошибкой. Либо надо предполагать, что разработчики ССЕ про эту ошибку знают и им начхать на потребителя - до сих пор не изменили размер VBV-буфера, а просто советуют потребителю упростить настройки (ухудшить качество кодирования), чтобы не было переполнения VBV-буфера.
Последний раз редактировалось smirnov Ср фев 03, 2010 4:26 pm, всего редактировалось 1 раз.
smirnov
Старшина 2ой статьи
Старшина 2ой статьи
 
Сообщения: 129
Зарегистрирован: Чт янв 01, 1970 6:00 am

Re: Ступенчатость полутонов

Сообщение Gideon Vi » Вс дек 20, 2009 8:07 pm

к сожалению с CCE помочь не смогу: в mpeg2 кодирую очень редко и с такой проблемой не сталкивался
Now we that are strong ought to
bear the infirmities of the weak
and not to please ourselves.
Gideon Vi
Капитан-Лейтенант
Капитан-Лейтенант
 
Сообщения: 803
Зарегистрирован: Ср июл 20, 2005 7:10 pm

Re: Ступенчатость полутонов

Сообщение Tempter57 » Вт апр 13, 2010 10:28 pm

Познакомьтесь с новой идеей борьбы с градиентами цветовых переходов (Debanding). В первую очередь эта идея должна заинтересовать рипперов анимэ. Обратите внимание на сравнение 4-х скринов, скрипты и в первую очередь Dither.avs и переработанные плагины в dfttest_mod16a.zip и mvtools2-mod16a.zip. Чувствую, если идея будет развита, грядут большие перемены по изменению многих скриптов шумоподавления по следующей схеме:
Код: Выделить всё
   w = Width ()
   h = Height ()

   super      = MSuper ()
   fwd_vect_2 = super.MAnalyse (isb=false, delta=2, overlap=4)
   fwd_vect_1 = super.MAnalyse (isb=false, delta=1, overlap=4)
   bck_vect_1 = super.MAnalyse (isb=true,  delta=1, overlap=4)
   bck_vect_2 = super.MAnalyse (isb=true,  delta=2, overlap=4)
   MDegrain2 (super, bck_vect_1, fwd_vect_1, bck_vect_2, fwd_vect_2, lsb=true)

   c_msb = last.Crop (0, 0, w, h)
   c_lsb = last.Crop (0, h, w, h)
   # ...
   # Insert some processing here on c_msb (and possibly c_lsb)
   # ...
   DitherPost (c_msb, c_lsb)

По умолчанию новый параметр lsb(возможность операций с плавающей запятой) lsb=false и можно работать, как с немодернизированной версией mvtools2.dll и все старые скрипты работают. Подобные изменения и с модернизированным фильтром dfttest, введён аналогичный параметр lsb:
Код: Выделить всё
w = Width ()
   h = Height ()
   dfttest (lsb=true)
   c_msb = last.Crop (0, 0, w, h)
   c_lsb = last.Crop (0, h, w, h)
   # ...
   # Insert some processing here on c_msb (and possibly c_lsb)
   # ...
   DitherPost (c_msb, c_lsb)

P.S. Попробовал на анимэ с источником света, дающим после шумодава характерные градиенты цветовых переходов на изображении, немного они всё же сохраняются, но если в конце скрипта добавить ещё и Gradfun2db(1.4), то градиенты уже едва заметны, а ещё лучше задействовать GradFunkMirror(). Это позволит не использовать шум, как это делалось ранее с помощью Gradfun2dbmod для того, чтобы разбить градиенты цветовых переходов и не расходовать лишний битрейт на шум при кодировании.
Примеры пресетов:
Код: Выделить всё
#plugin_files
#RemoveGrainSSE3.dll
#RepairSSE3.dll
#mvtools2.dll
#WarpSharp.dll
#mt_masktools-25.dll
#Average.dll
#MT.dll
#NoiseGenerator.dll
#Gradfun2db.dll
#Dither.avs
#LimitedSharpenFaster Mod.avs


setmtmode(2)
setmemorymax(1024)


# ColorYUV(levels="TV->PC")
source = last
preNR = source.blur(1)
preNR_super = preNR.MSuper(pel=2, sharp=2, rfilter=2)
source_super = source.MSuper(pel=2, sharp=2, levels=1)
vb2 = MAnalyse(preNR_super, isb=true, truemotion=true, delta=2, blksize=16, overlap=4, lambda=1600)
vb1 = MAnalyse(preNR_super, isb=true, truemotion=true, delta=1, blksize=16, overlap=4, lambda=1600)
vf1 = MAnalyse(preNR_super,isb=false, truemotion=true, delta=1, blksize=16, overlap=4, lambda=1600)
vf2 = MAnalyse(preNR_super,isb=false, truemotion=true, delta=2, blksize=16, overlap=4, lambda=1600)
maskp1 = MMask(vf1, kind=1, ysc=255).UtoY()
maskp2 = MMask(vf2, kind=1).UtoY()
maskp3 = MMask(vb1, kind=1, ysc=255).UtoY()
maskp4 = MMask(vb2, kind=1).UtoY()
maskf = average(maskp1, 0.25, maskp2, 0.25, maskp3, 0.25, maskp4, 0.25).spline36resize(source.width, source.height)
source2 = mt_merge(source,preNR,maskf)
source2.MDegrain2(source_super,vb1,vf1,vb2,vf2,thSAD=320,thSCD1=400,thSCD2=125,lsb=true)
w = last.width ()
h = last.height () / 2
c_msb = last.Crop (0, 0, w, h)
c_lsb = last.Crop (0, h, w, h)
DitherPost (c_msb, c_lsb)
LSFmod(defaults="slow",preblur="ON", strength=100)
Gradfun2db(1.4)

и для рипперов анимэ:
Код: Выделить всё
#mvtools2.dll
#EEDI2.dll
#asharp.dll
#awarpsharp2.dll
#mt_masktools-25.dll
#WarpSharp.dll
#SangNom.dll
#dfttest.dll
#SmoothUV.dll
#MT.dll
#nnedi2.dll
#TDeint.dll
#TMM.dll
#TIVTC.dll
#yadifmod.dll
#Toon-v1.1.dll
#NoiseGenerator.dll
#Gradfun2db.dll
#daa.avs
#ediaa.avs
#maa.avs
#rainbow_smooth2.avs
#ftoon2.avs
#fastlinedarkenmod.avs
#maa.avs
#Dither.avs
#LimitedSharpenFaster Mod.avs
#GradFunkMirror.avs


setmtmode(2)
setmemorymax(768)
#ColorYUV(levels="TV->PC")

###################### Варианты деинтерлейса #############################################
# 1-й вариант NTSC 29.97 fps
#tfm(order=1).tdecimate(hybrid=1)

# 2-й вариант NTSC 29.97 fps
#AssumeTFF() # подберите поле: верхнее поле первым для DVD
#AssumeBFF() # подберите поле: нижнее поле первым для видеокамер
#edeintted = nnedi2(field=-2,qual=3)
#res = TDeint(edeint=edeintted,order=-1,mode=2,sharp=true,mtnmode=3,full=false,tryWeave=false,type=1,emask=TMM(mode=1))
#tfm(order=-1,clip2=res,pp=7,slow=2,mode=2,chroma=false,display=false).tdecimate(hybrid=1,mode=1,vfrDec=0)

# 3-й вариант NTSC 29.97 fps
#interp = nnedi2(field=1,qual=3)
#deint = tdeint(mode=0,order=1,field=1,edeint=interp,slow=2,emask=TMM(mode=0,order=1,field=1))
#tfm(mode=3,order=1,clip2=deint,slow=2).tdecimate() # or tdecimate(hybrid=1)

# 4-й вариант PAL 25.00 fps
#edeintted = TDeint(edeint=TomsMoComp(-1,11,0),order=-1,mode=0,sharp=true,mtnmode=3,full=true,tryWeave=false,type=1,slow=2,emask=TMM(mode=0))
#Yadifmod(mode=0,edeint=edeintted)

# 5-й вариант PAL 25.00 fps
#AssumeTFF() # подберите поле: верхнее поле первым для DVD
#AssumeBFF() # подберите поле: нижнее поле первым для видеокамер
#edeintted = nnedi2(field=-2,qual=3)
#TDeint(edeint=edeintted,order=-1,mode=2,sharp=true,mtnmode=3,full=false,tryWeave=false,type=1,emask=TMM(mode=1))

# 6-й вариант PAL 25.00 fps
#interp = nnedi2(field=1,qual=3)
#tdeint(mode=0,order=1,field=1,edeint=interp,slow=2,emask=TMM(mode=0,order=1,field=1))
########################## подавление радужных помех ######################################
#rainbow_smooth(2)
###################### Варианты затемнения линий ##########################################
toon(0.2) # качественная функция затемнения линий
#ftoon(sstrength=180,srange=0,sdboost=1.0,warpdepth=6,warplevel=1) # качественная функция затемнения линий
#FastLineDarkenMOD(thinning=24, strength=40)
######################## Предварительное повышение резкости ###############################
asharp(1.5,3,0.25,hqbf=true)
#Warpsharp(depth=90)
###################### Варианты антиайлизинга #############################################
#daa()
#ediaa()
maa()
###########################################################################################
src = last
super = src.MSuper(pel=2, sharp=2, rfilter=2)
b2v = MAnalyse(super, isb=true, truemotion=true, delta=2, blksize=8, overlap=4)
b1v = MAnalyse(super, isb=true, truemotion=true, delta=1, blksize=8, overlap=4)
f1v = MAnalyse(super,isb=false, truemotion=true, delta=1, blksize=8, overlap=4)
f2v = MAnalyse(super,isb=false, truemotion=true, delta=2, blksize=8, overlap=4)
cf2 = MCompensate(super, f2v, thSCD1=300) # or MFlow
cf1 = MCompensate(super, f1v, thSCD1=300) # or MFlow
cb1 = MCompensate(super, b1v, thSCD1=300) # or MFlow
cb2 = MCompensate(super, b2v, thSCD1=300) # or MFlow
Interleave (cf2, cf1, src, cb1, cb2)
dfttest(sigma=3.4,f0beta=1.0,tbsize=5,lsb=true) # Double height
SelectEvery (5, 2)
w = last.width ()
h = last.height () / 2
c_msb = last.Crop (0, 0, w, h)
c_lsb = last.Crop (0, h, w, h)
DitherPost (c_msb, c_lsb)
LSFmod(defaults="slow", preblur="ON",strength=100)
GradFunkMirror()
#Gradfun2db(1.4)
Tempter57
Старшина 2ой статьи
Старшина 2ой статьи
 
Сообщения: 105
Зарегистрирован: Пт янв 23, 2009 3:43 am
Откуда: г.Донецк

Re: Ступенчатость полутонов

Сообщение Tempter57 » Пн июн 21, 2010 11:53 pm

Оцените такой фильтр DeBanding by Jawed, интересный, но медленный и без добавления шума
Код: Выделить всё
function BlockKiller(clip source)
{
    y=source.greyscale()
    y=y.ChannelBlockKiller()
    u=source.utoy()
    u=u.ChannelBlockKiller()
    v=source.vtoy()
    v=v.ChannelBlockKiller()
     
    return ytouv(u, v, y) 
}

function ChannelBlockKiller(clip source)
{
    source
"""   spline36resize(source.width*16,source.height*16)
    gradfunkmirror()
    gradfunkmirror()
    gradfunkmirror()
    spline36resize(source.width*8,source.height*8)
    gradfunkmirror()
    gradfunkmirror()
    gradfunkmirror() """
    spline36resize(source.width*4,source.height*4)
    gradfunkmirror()
    gradfunkmirror()
    gradfunkmirror()
    spline36resize(source.width*2,source.height*2)
    gradfunkmirror()
    gradfunkmirror()
    gradfunkmirror()
    spline36resize(source.width,source.height)
    gradfunkmirror()
    gradfunkmirror()
    gradfunkmirror()

    return last
}
Последний раз редактировалось Tempter57 Вт июн 22, 2010 2:53 pm, всего редактировалось 1 раз.
Tempter57
Старшина 2ой статьи
Старшина 2ой статьи
 
Сообщения: 105
Зарегистрирован: Пт янв 23, 2009 3:43 am
Откуда: г.Донецк

Re: Ступенчатость полутонов

Сообщение Gideon Vi » Вт июн 22, 2010 5:14 am

/me выпал в осадок от идеи

Комплект для теста.

Tempter57, что означают кавычки?
""" spline36resize(source.width*16,source.height*16)
gradfunkmirror()
gradfunkmirror()
gradfunkmirror()
spline36resize(source.width*8,source.height*8)
gradfunkmirror()
gradfunkmirror()
gradfunkmirror() """
Now we that are strong ought to
bear the infirmities of the weak
and not to please ourselves.
Gideon Vi
Капитан-Лейтенант
Капитан-Лейтенант
 
Сообщения: 803
Зарегистрирован: Ср июл 20, 2005 7:10 pm


Вернуться в Софт: описание работы с пакетами, кодеками. Вопросы и ответы

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 5

cron