All streams
Search
Write a publication
Pull to refresh
126
0
Send message
Для рендеринга использовались 16 четырёхядерных машин с 6 ГБ RAM и Debian и ещё 6 машин от Dell схожей конфигурации с Ubuntu (видео). На моём двухъядерном E8500 на эту корову в разрешении 1414*884 уходит ровно одна минута. В сферическом мире на такой ферме этот процесс займёт меньше двух секунд. Другое дело, что параллелизация идёт по кадрам и на практике рендеринг одного кадра всё равно занимает столько же времени, сколько на одном сервере.

По поводу анимации: она выполняется для низкополигональной модели. Результат скульптинга применяется программой в последний момент перед отправкой на рендер-движок. Скульптинг в Blender это и есть по сути последовательное применение нескольких дисплейсмент-карт, но не зависящих от UV-развёртки. Каждый новый уровень делит полигон на 4 части и тем самым увеличивает увеличивает количество микрополигонов в 4 раза. После пяти уровней получается 1231*4^5 = 1.2 миллионов микрополигонов.

Карты нормалей тоже используются, не очень понятно для чего. На этих картах небольшие складки на теле, похоже на результат от несильного раннего скульптинга.

PS: немного ошибся с расчётами в статье, уже исправил и добавил скрин чешуйчика со скульптингом.
Моя ошибка, там действительно CC-BY 3.0. Исправил в статье.
необходимый минимум

Для кого? Для большинства пользователей любого браузера инструменты веб-разработки находятся далеко за пределами необходимого минимума.

Изначально я говорил о максимуме по конкретной области, а именно по веб-разработке. Полный набор — это то, что всегда будет оставаться вне браузера, поскольку нужно одному проценту от одного процента. Но именно этот функционал держит разработчиков. Загляните по ссылке и поймёте, что по относительной шкале функционал других браузеров совсем не полный.
Хм, судя по минусам, я действительно отстал от жизни. Какой ещё браузер имеет такой функционал?
Вообще-то для firefox есть firebug. И там есть и нумерации, и консоли, и отладчики, и dom-инспекторы, и css-редактор с автодополнением и всё-всё-всё, что ещё много лет будут пытаться скопировать другие браузеры.

Да, и ещё…
Я начал пользоваться услугами руцентра в то далёкое время, когда фраза «домен за 100 рублей» означала очевидный лохотрон, в котором домен регистрировался не на вас, а на третье лицо, от которого вы в дальнейшем полностью зависели. Я не понимаю причину минусования моего комментария — фраза «сразу отказаться от услуг подобной организации» означала в принципе отказаться от регистрации домена.

Что касается других городов, я думал, что читателям комментария будет очевидно, что в случае с нотариусом можно отправить бланк по почте. Время на доставку на мой взгляд незначительно по сравнению с годами, на которые оплачивается домен. Зачем такая защита? Домены являются полноценными объектами собственности и цена на них может быть выше цены на жильё. Кому будет приятно, если по украденному паролю злоумышленник переведёт такой домен к какому-нибудь китайскому регистратору, после чего по правилам нового регистратора сменит паспортные данные без всякой проверки?
У RuCenter очень удобно организован перенос доменов. Дома заполнил бумажку, подъехал к офису, там получил бумажку с номером столика, сразу к нему подошёл и меньше чем за пять минут всё было сделано. Через пару часов принял домен у нового регистратора. Так что если вы в Москве (иначе придётся заверять бланк у нотариуса) и по какой-то причине платите 600 рублей за домен, настоятельно рекомендую повторить мой опыт.
Я бы поставил вопрос совсем кардинально: а нужна ли регистрация?
image
Классический веб-сервер ничего не знает о спецификации HTML. Под веб-сервером понимается сервер, принимающий HTTP-запросы от клиентов и выдающий им HTTP-ответы. Единственное требование для веб-сервера — соответствие спецификации HTTP. Вот в ней определены и GET, и POST, и все заголовки, и все ответы, и всё-всё, что нужно для работы. А вот понятия формы там нет, потому что клиентом веб-сервера может быть браузер, а может и не быть. Веб-сервер может поддерживать динамическую генерацию страниц, а может и не поддерживать. Всё это описано в Википедии и печатных источниках.
Словосочетание «отправка формы» — это бред хотя бы потому, что в спецификации HTTP нет понятия формы. Отправляются не формы, а данные из неё. А коли вы не отправляете данные, как же вы умудрились написать ответ на комментарий?

> Вы удивитесь,
Да, я удивлён, как вы исказили меня при цитировании, опустив часть «с гораздо более давних времён» прямо из середины цитаты.

> с однородным массивом в нем, который будет одним из его элементов
А если я настрою фильтр на nginx, чтобы он резал параметры со скобками? А если я mod_rewrite их перепишет? Не наступайте на грабли собственного опроса. Никто никому ничем не обязан.
Браузер отправит все поля вне зависимости от наличия скобок.
Браузер никому ничего не должен. Если вы не согласны, посмотрите форму добавления ответного комментария прямо на этой странице (onclick="comment_send(this.form, this)", далее содержание и место назначения запроса определяет функция comment_send).

По поводу третьего варианта: под массивом с гораздо более давних времён понимается серия однородных данных, расположенных последовательно в логической памяти. Ассоциативный массив типа $_GET из PHP очень далёк от этого. Так вот, в определённый момент данные запроса так или иначе окажутся выстроенными в памяти в вида массива символов. Это если притягивать правильный ответ из первых трёх вариантов. А так, конечно, да, «Ничего из перечисленного».
Сами сервер написали ;)?

Теперь осталось выяснить, что делать как минимум с 90% серверами (Apache, IIS, nginx, lighttpd), которые в принципе не знают такого слова как «массив» за пределами конфигурационных файлов.
Seriously? Прям даже интересно от результатов стало, что в головах у людей происходит…

Надо как-нибудь устроить опрос, например, по стеку протоколов tcp/ip или по параллельным вычислениям: взрыв мозга от результатов практически гарантирован.
И не открыла, а разместила на закрытом сервере. И не для всех, а только для избранных разработчиков, имеющих прямое отношения к NVidia. И не всей системы, а бэкэнда компилятора для llvm. И не «можно будет приспособить», а «можно будет приспособить за выплату лицензионных отчислений»
— Из анекдота про Ализара.
С сайта er.ru
Сайт создан компанией Notamedia

С сайта 76-82.ru
Сайт создан в дизайн студии Нотамедиа

По-моему, кое-где просто делают сайты на коленке, либо вообще не делают, используя непринятые макеты.

Для тех, кто не в курсе: такой код — типичная защита от поддельных сайтов, которые либо используют iframe, либо просто транслируют тот же код, но на своём домене (aka энциклонги).
Прекрасный алгоритм. Берём исходную фотографию, рисуем разными цветами линии перспективы и лампы, делаем автоконтраст, делаем сцену темнее, делаем сцену ярче, PROFIT!

image
Перезагрузите картинки на habrastorage.org/, будут отображаться у всех, заодно от удаления на внешнем сайте защитите.
Написал с начальным знанием питона и без заглядывания в документацию скрипт для Blender:
import os
import sys
import glob
import bpy

if len(sys.argv) != 7:
    print("Must provide input and output path")
else:
    for infile in glob.glob(os.path.join(sys.argv[5], '*.dae')):
        bpy.ops.object.select_all(action='SELECT')
        bpy.ops.object.delete()
        bpy.ops.wm.collada_import(filepath=infile)
        outfilename = os.path.splitext(os.path.split(infile)[1])[0] + ".obj"
        bpy.ops.export_scene.obj(filepath=os.path.join(sys.argv[6], outfilename))


Запускать как
blender --background --python runme.py -- input_dir output_dir


Для эстетов, во встроенном текстовом редакторе есть шаблоны скриптов для нормальной обработки аргументов или неконсольного режима (в терминологии Blender — скрипты операторов).

Для тех, кто не понимает, что значит без копания в документации: в Blender выполняемые функции отображаются по наведению курсора, а документация к параметрам — по автодополнению в консоли. Выглядит так:


<trollmode>А, ну да, не забудьте переслать мне 3500$, которые теперь вы сэкономите без 3ds Max.</trollmode>
Что интересно, эта цитата из стандарта C++11 не накладывает ограничения на порядок обхода. По крайней мере не так явно, как в старой версии стандарта:
25.2.3 Transform [lib.alg.transform]
Requires: op and binary_op shall not have any side effects.

Мне не очень понятно, зачем нужно было убирать. Вот оставшиеся ограничения:
Requires: op and binary_op shall not invalidate iterators or subranges, or modify elements in the ranges [first1,last1], [first2,first2 + (last1 — first1)], and [result,result + (last1 — first1)].

Parallel STL, впрочем, пока никто не отменял, поэтому спорить не буду. Пусть будет так:
...
    std::vector<double> &out;

public:
    MovingAverage(std::vector<double> &out, size_t period) : out(out), period(period) {}

    void operator()(double num) {
        sum += num;
        window.push(num);
        if (window.size() > period) {
            sum -= window.front();
            window.pop();
        }
        out.push_back(sum / window.size());
    }


    vector<double> out;
    out.reserve(size);
    for_each(indata, indata + size, MovingAverage(out, 5));
Кто-то упомянул C++? Вот мой вариант:
#include <iostream>
#include <iterator>
#include <algorithm>
#include <queue>
#include <vector>

class MovingAverage {
    std::queue<double> window; // окно
    size_t period; // максимальный размер окна
    double sum; // сумма элементов в окне
public:
    MovingAverage(size_t period) : period(period) {}
    double operator()(double num) {
        sum += num;
        window.push(num);
        if (window.size() > period) {
            sum -= window.front();
            window.pop();
        }
        return sum / window.size();
    }
};

int main() {
    using namespace std;
    double indata[] = {1, 2, 3, 2, 4, 5, 4, 5, 4, 5, 6, 2, 5, 6, 6, 7};
    size_t size = sizeof(indata) / sizeof(double);
    vector<double> out(size);

    // применение функтора MovingAverage к исходному массиву
    transform(indata, indata + size, out.begin(), MovingAverage(5));

    // вывод результирующего массива
    copy(out.begin(), out.end(), ostream_iterator<double>(cout, "\n"));
}


Кроме того, такой функтор удобно использовать в классической ситуации, когда данные приходят в реальном времени и по новому значению нужно достроить график скользящей.

Information

Rating
Does not participate
Registered
Activity