인터랙티브 한 3D 타이포그래피 효과 만들기

작가: Randy Alexander
창조 날짜: 3 4 월 2021
업데이트 날짜: 16 할 수있다 2024
Anonim
Photoshop의 액체 페인트 마블링 효과
동영상: Photoshop의 액체 페인트 마블링 효과

콘텐츠

타이포그래피는 메시지를 강화하고 전달되는 내용에 적합한 컨텍스트를 제공하는 올바른 서체를 선택하기 때문에 디자이너의 도구 무기고에서 항상 중요한 역할을 해왔습니다. 지난 8 년 동안 웹 디자이너는 키네틱 타이포그래피와 같은 사용자 정의 서체를 디자인에 가져올 수 있었고 인쇄 디자이너가 즐기는 것과 유사한 타이포그래피 제어 기능을 가지고있었습니다.

수상 경력이 있거나 '오늘의 사이트'타이틀로 선정 된 많은 사이트를 살펴보면 타이포그래피 사용이 디자인의 중심이되어 경쟁에서 우위를 점할 수 있음을 곧 알게 될 것입니다. 여기에는 애니메이션 문자 양식, 사용자 상호 작용에 대한 반응 적 움직임, 중심 단계에있는 유형 양식의 대담한 사용 (클라우드 저장소에 타이포그래피 파일을 안전하게 보관)에 이르기까지 다양합니다.


소란스럽지 않은 관심을 끄는 사이트를 만들고 싶다면 웹 사이트 빌더도 사용해보십시오. 또한 최고의 웹 호스팅으로 사이트 성능이 최적화되었는지 확인하십시오.

  • 3D 글꼴 : 9 가지 주요 유형 팁

이 튜토리얼에서 문자 효과는 문자의 모양을 마스크로 사용하여 문자 사이를 동적으로 소용돌이 치고 이동하는 빠르고 자유롭게 흐르는 입자 흔적에 적용합니다. 이 아름다운 애니메이션이있을뿐만 아니라 HTML5 캔버스 요소에 렌더링 될 것이므로 3D로 변형되어 화면 주위를 이동할 때 마우스를 향해 회전합니다. 사이트 헤더 또는 클릭 유도 문안을 위해 사용자의 관심을 끌 필요가있을 때 적합합니다.

여기에서 튜토리얼 파일 다운로드

01. 프로세스 시작

코드 IDE의 프로젝트 파일에서‘시작’폴더를 엽니 다. 프로젝트는 파티클 오브젝트 클래스를 만드는 것으로 시작합니다. 이것은 프로젝트의 텍스트 내에 흐르는 이미지를 만드는 데 사용됩니다. 'sketch.js'파일을 열고 다음 변수를 추가하여 기본 입자 생성을 시작합니다.


function Particle () {this.pos = createVector (random (width), random ((height-100))); this.vel = createVector (0, 0); this.acc = createVector (0, 0); this.maxspeed = maxSpeed; this.prevPos = this.pos.copy ();

02. 파티클 업데이트

입자를 이동하기 위해 각 프레임마다 업데이트 기능이 실행됩니다. 이것은 입자의 속도와 속도에 대한 가속도를 계산합니다. 속도는 결국 나중에 추가 될 전역 변수에 의해 제한됩니다. 속도는 개별 입자의 위치에 추가됩니다. 하나의 입자를 생성하면 한 번에 수천 개의 입자가 화면에 생성됩니다.

this.update = function () {this.vel.add (this.acc); this.vel.limit (this.maxspeed); this.pos.add (this.vel); this.acc.mult (0); }

03. 흐름에 따라

입자에 흐르는 움직임을 제공하기 위해 소음에 의해 생성 된 유동장을 따릅니다. 여기서 생성 된 함수는 흐름의 벡터가 전달 될 수있게하고 그 뒤에 따라 오므로이 함수의 이름이됩니다. 벡터 방향의 힘이 입자에 적용됩니다.


this.follow = function (벡터) {var x = floor (this.pos.x / scl); var y = floor (this.pos.y / scl); var index = x + y * cols; var force = 벡터 [인덱스]; this.applyForce (force); }

04. 너무 가깝지는 않지만 따르십시오

이러한 종류의 움직임으로 쉽게 발생할 수있는 모든 입자가 함께 뭉쳐지는 것을 막기 위해 입자의 위치에 매우 적은 양의 임의성이 추가됩니다. 이로 인해 약간의 산란이 발생합니다.

this.scatter = 함수 (벡터) {this.pos.x + = random (-0.9, 0.9); this.pos.y + = random (-0.9, 0.9); } this.applyForce = function (force) {this.acc.add (force); }

05. 입자 표시

여기의 show 기능은 입자를 표시합니다. 가장 먼저하는 일은 밝은 회색의 1 픽셀 스트로크를 추가하여 선을 만드는 것입니다. 선은 현재 위치에서 이전 프레임의 마지막 위치로 그려집니다. 이전 위치는 루프를 통해 다음 번에 저장됩니다.

this.show = function () {stroke (180); strokeWeight (1); line (this.pos.x, this.pos.y, this.prevPos.x, this.prevPos.y); this.updatePrev (); } this.updatePrev = function () {this.prevPos.x = this.pos.x; this.prevPos.y = this.pos.y; }

06. 감싸기

가장자리 기능은 입자가 화면의 가장자리에 도달하면 작동하고, 그렇다면 반대편에 오도록 감싸줍니다. 이 섹션에서는 x 위치를 다루므로 화면 너비보다 큰지 감지 한 다음 왼쪽 가장자리로 보내고 그 반대의 경우도 마찬가지입니다.

this.edges = function () {if (this.pos.x> width) {this.pos.x = 0; this.updatePrev (); } if (this.pos.x 0) {this.pos.x = 너비; this.updatePrev (); }

07. 래퍼의 기쁨

이 코드는 가장자리 감지의 나머지 부분이며 화면 상단 및 하단의 y 축에서 입자를 감지합니다. 여기의 대괄호는 전체 입자 클래스를 마무리합니다. 이것은이 클래스를 사용하여 많은 입자를 만들 수 있음을 의미합니다.

if (this.pos.y> 높이) {this.pos.y = 0; this.updatePrev (); } if (this.pos.y 0) {this.pos.y = 높이; this.updatePrev (); }}}

08. 많은 입자 만들기

이제 입자가 만들어지면 많은 입자를 만드는 것에 대해 생각할 차례입니다. 이를 위해 우리의 모든 코드는 Particle 함수 클래스 위에 올 수 있습니다. 여기에는 시스템이 실행될 수 있도록 여러 글로벌 변수가 선언되어 있습니다. 코드가 진행되는 동안 여러 번 호출되므로 탐색 할 수 있습니다.

var inc = 0.1; var scl = 100, zoff = 0; var cols, rows, movement = 0; var 입자 = []; var flowfield; var img; var maxSpeed; var t, calcX = 0, calcY = 0, currX = 0, currY = 0, targetX = 0, targetY = 0;

09. 모든 설정

여기에 선언 된 설정 함수는 시작시 화면이 어떻게 보이는지 설정합니다. 수행되는 첫 번째 감지는 화면의 너비를 확인하는 것입니다. 상대적으로 크면 큰 이미지가로드되고 캔버스가 생성되고 디스플레이에 맞게 CSS를 통해 크기가 조정됩니다.

function setup () {if (windowWidth> 1200) {img = loadImage ( "assets / studio.png"); var canvas = createCanvas (1920, 630); maxSpeed ​​= 10.5; }

10. 기타 화면

나머지 if 문은 다양한 화면 해상도를 확인하고 해당 화면 크기에 가장 적합한 이미지를로드합니다. 마찬가지로 크기가 다른 캔버스 요소가 생성됩니다. 이것은 주로 모바일이 필요한 것보다 더 많은 픽셀을 처리하는 것을 중지하기위한 것입니다.

else if (windowWidth> 900) {img = loadImage ( "assets / studio-tablet-wide.png"); var canvas = createCanvas (1200, 394); scl = 60; maxSpeed ​​= 7; } else {img = loadImage ( "assets / studio-tablet-tall.png"); var canvas = createCanvas (700, 230); scl = 40; maxSpeed ​​= 5; }

11. 그리드 만들기

화면 크기가 조정되면 캔버스는 index.html 페이지의 헤더 div 태그 안에 배치됩니다. 너비와 높이에 따라 많은 열과 행이 계산됩니다. 보이지 않는 격자와 비슷합니다. 마지막으로 흐름 필드에 대한 배열이 설정됩니다.

canvas.parent ( '헤더'); cols = 바닥 (너비 / scl); 행 = 바닥 (높이 / scl); flowfield = new Array (cols);

12. 입자 만들기

입자의 수는 화면의 너비를 기준으로 설정됩니다. 화면이 1920 픽셀이면 2500 개의 입자가 만들어지고 거기에서 아래쪽으로 이동합니다. for 루프는 새 입자를 만듭니다. 화면의 배경색은 거의 완전한 흰색으로 설정됩니다.

var numParticles = Math.floor ((2500/1920) * width); for (var i = 0; i numParticles; i ++) {particle [i] = new Particle (); } background (245); }

13. 화면 그리기

모든 계산의 결과는 그리기 기능의 모든 프레임에 화면에 그려집니다. 첫째, 불투명도가 매우 낮은 밝은 회색 사각형이 화면을 채워 이전에 그려진 내용이 희미 해집니다. 이것이 그려진 후에는 입자가 채우기가 아닌 획으로 구성되므로 채우기가 꺼집니다.

function draw () {noStroke (); fill (245, 10); rect (0, 0, 너비, 높이); noFill (); var yoff = 0;

14. 흐름 효과 만들기

흐름 효과를 얻으려면 노이즈 값을 업데이트하기 위해 행과 열을 이동하는 두 개의 'for'루프가 있습니다. 그런 다음 화면의 각 위치에 대한 입자를 업데이트 할 준비가 된 노이즈 값의 각도로 변경됩니다.

for (var y = 0; y 행; y ++) {var xoff = 0; for (var x = 0; x cols; x ++) {var index = (x + y * cols); var angle = noise (xoff, yoff, zoff) * TWO_PI * 4; var v = p5.Vector.fromAngle (angle);

15. 어레이 업데이트

흐름의 배열이 각도로 업데이트되고 값이 증가하여 각 위치의 오프셋이 올라갈 때마다 증가합니다. 이것은 복잡해 보일 수 있지만 실제로는 입자가 화면에서 따라가는 임의의 유동 모션을 생성합니다.

v.setMag (1); 유동장 [인덱스] = v; xoff + = inc; } yoff + = inc; zoff + = 0.001; }

16. 입자 업데이트

이제 입자는 모두 배열에서 반복됩니다. 각 개별 입자는 유동장을 따르고, 화면의 가장자리를 업데이트하고, 확인하고, 약간 흩어져서 마지막으로 show 기능을 사용하여 화면에 그려야합니다. 파일을 저장하고‘index.html’을 테스트하여 입자가 움직이는 것을 확인합니다.

for (var i = 0; i particle.length; i ++) {particle [i] .follow (flowfield); 입자 [i] .update (); 입자 [i] .edges (); 입자 [i] .scatter (); 입자 [i] .show (); }}

17. 텍스트 추가

텍스트는 상단에 배치되는 마스크입니다. 이를 위해 올바른 이미지가 입자 위에 배치됩니다. 그리기 함수의 닫는 중괄호 앞에이 코드를 추가합니다. 지금 텍스트와 함께 작동하는 효과를 보려면 브라우저를 저장하고 확인하십시오.

이미지 (img, 0, 0);

18. 마우스 위치 감지

마우스 위치가 참조되고 x 및 y 값이 이동할 수있는 각도에 매핑됩니다. y 축에서 이것은 -25에서 25이고 x 축에서는 그 반대입니다. 나머지 코드는 마지막 코드가 추가 된 후 그리기 기능이 끝나기 전에 배치되어야합니다.

targetY = Math.round (map (mouseX, 0, 너비, -25, 25)); targetX = Math.round (map (mouseY, 0, 높이, 25, -25));

19. 제자리에 쉽게

이제 목표 위치에 약간의 여유가 주어 지므로 각도가 천천히 목표에 도달합니다. 이것은 목적지에서 현재 위치를 떼어 내고 낮은 숫자를 곱하는 고전적인 여유 알고리즘을 사용하여 만들어집니다.

var vx = (targetX-currX) * 0.05; var vy = (targetY-currY) * 0.05; calcX + = vx; calcY + = vy;

20. CSS 작성

여기서 't'변수는 계산 된 값을 가져와 rotateX 및 rotateY의 변환 값을 사용하여 CSS 문자열에 배치합니다. 현재 위치는 캔버스가 현재 회전 된 위치에서 계산됩니다.

t =’rotateX (’+ calcX +’deg) rotateY (’+ calcY +’deg)’; currX = calcX; currY = calcY;

21. 마무리

이제 CSS가이 코드의 캔버스 요소에 적용됩니다. 페이지를 저장하고 브라우저에서 미리 봅니다. 이제 마우스가 캔버스의 회전을 완전히 업데이트하여 마우스가 움직일 때 회전하도록합니다. 물론 그 공간의 모든 입자는 화면에서 함께 이동합니다.

canvas.style.WebkitTransform = t; canvas.style.msTransform = t; canvas.style.transform = t;

이 기사는 원래 크리에이티브 웹 디자인 잡지 인 Web Designer에 게재되었습니다. 구입271 호또는구독.

출판물
이것을보세요! 다락방의 장난감
더 나아가

이것을보세요! 다락방의 장난감

체코 초현실주의 자 Jan vankmajer의 어두운 상상력으로 만든 토이 스토리가 어떻게 진행 될지 알고 싶다면 Toy in the Attic이 애니메이션 영화입니다. vankmajer의 다작 제자 Jiri Barta가 만든이 건물은 Buttercup이라는 로프트 주거 인형을 중심으로합니다. 그녀는 검은 고양이가 그녀를 납치 해 악의 땅으로 데려 갈 때까...
INDUSTRY INSIGHT : 디자이너가 iOS UI에 대한 의견
더 나아가

INDUSTRY INSIGHT : 디자이너가 iOS UI에 대한 의견

지난 몇 년 동안 Apple의 스큐 어모 픽 UI 디자인을 둘러싼 많은 논의가있었습니다. 크리에이티브는 물리적 세계를 복제하려는 거대 컴퓨터의 시도를 좋아하거나 싫어하는 것 같습니다.최근 업계는 새로운 비-스큐 어모 픽 디자인을 특징으로하는 소수의 소프트웨어 및 기술 업데이트를 보며 둘 사이의 새로운 균형을 찾을 때가되었을 지 모른다는 논쟁을 불러 일으켰습...
일관된 브랜딩을 보장하는 5 가지 황금률
더 나아가

일관된 브랜딩을 보장하는 5 가지 황금률

새로운 브랜딩 프로젝트의 가장 큰 과제 중 하나는 디자인이 모든 플랫폼, 접점 및 지역에서 일관되도록 보장하는 것입니다. 당신이 할 수있는 최악의 실수는 클라이언트가 구현하고 사용하는 것이 불가능하고 비실용적 인 브랜드를 만드는 것입니다.브랜딩에서 이러한 뛰어난 색상 사용에서 영감을 얻으십시오.그렇다면 점점 복잡 해지는 세상에서 완벽한 브랜딩을 만드는 방법...