Інтернет, як ми це знаємо, постійно змінюються та розвиваються. Те, що ми ще можемо пам'ятати, як простий і прямий носій, отриманий ще кілька років тому, і він не схожий на те, що він буде зупинятися там. Для Веб-будівельник , що колись було частиною науково-фантастичних фільмів, тепер можливе на таблетці, що лежить на вашому дивані, і є будівлі, що охоплюються великомасштабними інтерактивними установками, які насправді просто повноекранні вікна Google Chrome.
Виконайте наведені нижче дії, щоб дізнатись, як створити реалістичний ефект плавлення з трьома.JS.
Ідіть вперед і захопити бібліотеку Three.js і включіть його на свій сайт. Вам потрібно буде встановити веб-годинник, сцену та перспективу. Після того, як це миттєво, вам доведеться зробити сцену Requestanimationframe .
Далі вогні потрібно додати до 3D-сцени. У цьому прикладі будуть використані два вогні: навколишнє світло і точковий світло. Ам навколишнього світла служить загальним глобальним кольором для сцени, тоді як точка світла випускає світло, що зменшується з відстані. Це дасть сцену певний контраст.
Var Ambientlight = Новий три. Амбієнтний (0xcccccc);
scene.add (Ambientlight);
var pointlight = нові три.Pointlight (0xffffff, 1);
pointlight.position.set (10, 5, 0);
Тепер, коли сцена була створена, 3D-модель повинна бути завантажена. Модель може бути завантажена за допомогою будь-якого підтримуваного формату (JSON, OBJ, DAE та ін.). Нижче наведено приклад завантаження моделі DAE. У цьому прикладі дуже важливо, щоб модель має достатньо полігонів для виконання модифікацій вершин.
Череп оленя, який використовується у цьому прикладі, має 3500 полісів. Якщо політ є занадто низьким, анімація вершин буде надто явним і спотвореним.
Навантажувач = Новий три.ColladaLoader ();
loader.load ('dae / deer_skull / deer_skull.dae', onloadcompletehandler);
Bump Maps ідеально підходять для додавання глибини до текстур за низькою вартістю. Після того, як ви створите зображення Bump карта, ви можете реалізувати його, просто застосувавши його до матеріалу, як нижче. Також вам потрібно буде налаштувати масштаб вашої карти bump, щоб відповідати шкалі вашої моделі.
матеріал.bumpmap = 'img / deer_skull / deer-bump.jpg';
material.bumpscale = .008;
На своєму сайті Johnny використовує розширення гри Jerome Etienne за три.JS, що полегшує виконання вершин. Це розширення дозволяє легко доступу до кожної вершини моделі на частоті кадрів, що робить його простим для маніпулювання вершинами за допомогою сигналів.
Точний Подовження анімації вершини доступний за допомогою Github Etienne. Ми будемо йти далі, як це використовується на наступних кроках.
Танення частина геометрії включає в себе кілька загальних кроків. По-перше, кожен момент постійно підштовхує вниз. Коли точка досягає землі, вона виштовхується назовні, використовуючи те, що ми називатимемо "push vector".
Далі ми дамо точки, які збираються вздовж нижньої товщини, тому розплавлена геометрія не повністю плоска. Для того, щоб досягти цього, Джонні перенесений код від Skeel Lee's VFX Shader в Houdini і модифікував його.
Нижче наведено приклад використання використання вершини аніматора, щоб постійно натиснути геометрію моделі до землі.
ВАР ВЕРТЕКСАНІМАЦІЯ = Нова трикси. Ектексанімація (геометрія, функція (походження, положення, дельта, зараз) {position.y - = meltamount * modelheight;}
Це буде проштовхувати точки за курсом, визначеною розлюд . Не забудьте також зателефонувати "Оновити" у вашій вершинній анімації у циклі рендерингу.
Коли точка досягла землі, вона повинна бути висунута назовні, щоб досягти ефекту розплаву. Код нижче визначає, який напрямок у осей X та Z, щоб натиснути вершину, щоб ви отримали рівномірне переміщення. Умовні гарантують, що лише точки, які досягли найнижчих меж моделі (земля), висунуті назовні.
if (position.y & lt; bboppom.min.y) {
var centroid = bboppom.max.clone (). Додати (bbox.min.clone ()). dividescalar (2.0);
pushvector = postion.clone (). Sub (Centroid);
pushvector.y = 0; }
Код нижче використовує шум, щоб створити випадковість у русі, тому розплав відчуває органічно. Змінні шуму можна налаштувати, щоб отримати бажаний ефект. Потім шум застосовується до натискання розлюд і розпусний контролювати швидкість і розмір розплавленого басейну. Цей зовнішній вектор нарешті обчислюється, а потім застосовується до вершини.
var n = noiseamplitude * generator.getval ((position.x) * шум для шуму + шум);
var OutwardVector = pushvector.multiplyscalar (((meltamount * Розповсюдження) + n) *
Позиція.
Цей код пояснюється до цих пір, щоб досягти ефекту розплаву, але з ним не так. По-перше, басейн відчуватиметься досить рівною, тому що всі точки розплавлялися до однієї позиції Y. По-друге, оскільки всі вони поділяють той самий Y, занадто багато точок буде складатися на тій же висоті, що може викликати мерехтіння. Щоб уникнути цього, при застосуванні товщини застосовується при розплаві:
position.y + = meltamount * poolthickness;
З кодом вище, будь-яка модель з достатньою кількістю полігонів може бути розплавлена. Завантажте поштовий файл з коду тут і поміняти модель з усіма ви хочете. Весело!
Ця стаття спочатку з'явилася Веб-дизайнер випуск 265. Купити його тут .
Пов'язані статті:
(Зображення кредиту: майбутнє) Перейти до: Основ..
Ласкаво просимо до нашого керівництва щодо того, як намалювати лев. Король джунглів, ..
У світі, де користувачі мають високі очікування щодо свого досвіду в Інтернеті та мобільному, прототипі�..
Створення перебільшених чоловічих персонажів - це все про перебільшен..
Матеріали Marjolein використовує лляне масло як середовище, щ�..
Після того, як ви придумаєте ідею для фантастичної істоти, наступний к�..
Реагувати це популярна бібліотека JavaScript для побудови інтерфейс..
Цей підручник покаже вам, як імітувати ефект рідини. Існує різноманітн..