All streams
Search
Write a publication
Pull to refresh
103
0
Максим Васильев @qmax

Инженер

Send message
У трезвых животных точность калибровки на несколько порядков выше, и вместо переступания они используют микровибрации, почти незаметные на глаз.

Чтобы ощутить на себе, достаточно постоять на одной ноге.
При балансировке на двух или четырёх ногах вибрации становятся менее заметными, но они есть.
Непонятно — он умеет швырять кирпичи или нет?
Если суметь подумать «мыслю, следовательно существую» не двигая языком, сознание сразу переходит на следующий уровень!
(и говорить становится больше не о чем)
50% похожести гарантирвоано!
Что-то мне подсказывает, что скопировать девушку 50кг без одежды можно гораздо проще.

Групповое фото зачётное.
Хотя, похоже, очень древнее.
Как минимум третья эпоха Средиземья — не хухры мухры.
Формат EXR поддерживает неорганиченное количество каналов.
там шейдеров нету.
А это чем-то принципиально отличается от спецификации OpenGL и GLSL?
Ну да. Таже морда, другие технологии. На ютюбе приписка.

В описании на ютюбе упоминаются normal and displacement composite maps, а в описании публикации Хименеса на эту тему bump/normal textures. Тоесть используется и то и другое.

Секрет откроется только за $57.98
На другом видео, вот тут: youtu.be/5d1ZOYU4gpo?t=9m3s видно, что складки и прыщики отбрасывают тень под острым углом освещения.
Вобще-то в видео есть несколько уровней детализации.
Самая низкополигональная появляется на секунду в 1:52-1:53.
Скорее всего, эта та, по которой модель и дизайнилась вручную, квадами, со стрипами удобными для програмимрования мимики.
В остальное время показывают subdivision 1 и 2 уровня (1:4 по треугольникам).
Остальные уровни нам просто не показали.

А какие такие продвинутые шейдеры бывают, чтобы сделать морщины на коже без повышения уровня тесселяции?
Да, я поторопился с выводами.
В HD на полный экран видно sss.

А полигональная модель явно не та, которая рендерится.
Какой-то промежуточный уровень детализации чтобы только показать, что это таки mesh.
Ну и явно не та, которая моделирует физику кожи (а я сильно сомневаюсь, что упругость кожи делалась дизайнерами).

Морщинки в углу глаз гораздо детальнее показанных полигонов, и сделаны явно не через bumpmapping — их специально показали под острым углом освещения.
Да, уже дошло.
Но всётаки, имеет смысл заменить в тексте «скрипт» на «URL».
Всё-таки это совершенно разные вещи.
Извините, я что-то не въеду: а сам скрипт-то куда вставляется?
А, ну и для общения со скриптами в родных доменах (у меня это были iframы):
function WinBus(handlers) {
  this.handlers = handlers;
};

WinBus.prototype = {
  init: function() {
    var self = this;
    window.addEventListener("message", function(event){ self.onWinMessage(event) });
  },

  postWinMessage: function(id, msg) {
    var origin = window.location.origin;
    msg = msg || {};
    msg.id = id;
    window.postMessage( msg, origin );
  },

  onWinMessage: function(event) {
    method = this.handlers[event.data.id];
    if( method ) method.call(this, event.data);
  },

}

В своё время родил такую конструкцию:
function ChromeBus(channel, handlers) {
	this.channel = channel;
	this.handlers = handlers;
};

ChromeBus.prototype = {
	init: function() {
		var self = this;
		if( this.channel == null ) { 
			/* background script */
			this.ports = {};
			chrome.extension.onConnect.addListener(function(port){ self.onConnect(port); });
			this.postMessage = this.postMessage_chan;
		} else { 
			/* content script */
			this.port = chrome.extension.connect({'name': this.channel});
			this.port.onMessage.addListener(function(msg, port){ 
				self.onMessage_ext(msg, port); 
			});
			this.postMessage = this.postMessage_ext;
		}
	},

	onConnect: function(port) {
		var self = this;
		var channel = port.name;
		if( this.ports[channel] === undefined ) 
			this.ports[channel] = [port];
		else
			this.ports[channel].push(port);
		port.onDisconnect.addListener(function(port){ self.onDisconnect(port); });
		port.onMessage.addListener(function(msg, port){ self.onMessage_chan(msg, port); });
		if( this.handlers['onConnect'] !== undefined )
			this.handlers['onConnect'].call(this, channel, port);
	},

	onDisconnect: function(port) {
		var self = this;
		var channel = port.name;
		this.ports[channel] = this.ports[channel].filter(function(p){return p != port;});
		if( this.handlers['onDisconnect'] !== undefined )
			this.handlers['onDisconnect'].call(this, channel, port);
	},

	postMessage_ext: function(id, msg) {
		msg = msg || {};
		msg.id = id;
		this.port.postMessage(msg);
	},

	onMessage_chan: function(msg, port) {
		method = this.handlers[msg.id];
		if( method ) method.call(this, port.name, msg);
	},

	postMessage_chan: function(channel, id, msg) {
		msg = msg || {};
		msg.id = id;
		this.ports[channel].forEach(function(port){	port.postMessage(msg);});
	},

	onMessage_ext: function(msg, port) {
		method = this.handlers[msg.id];
		if( method ) method.call(this, msg);
	}
}


Используется одинаково и на фоновой, и на встроенных:

function Background() {
	this.init();
}

Background.prototype = new ChromeBus(null, {
	'ack': function(channel, args) {
		this.postMessage(channel, 'hello');
	},

	'user-logged': function() {
		this.postMessage('embedded', 'reload');
		this.postMessage('frame', 'reload');
	},
})

Знатоки, скажите, а кожа у него мелованная потомучто без SSS или просто освещение такое?
Подозреваю, что статью доконца поняли только те, кто и так всё знал.

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Registered
Activity