Remotion LabRemotion Lab
返回模板庫

全息投影六芒星 Logo

深藍黑背景上,青色六芒星(兩個疊合三角形)以 SVG 描邊動畫逐步顯現,搭配持續循環的水平掃描線與微幅閃爍,呈現 AI 科幻全息投影質感,品牌名與系統狀態文字依序登場。適合 AI、科技或賽博龐克風格品牌。

Logo動畫品牌全息科幻六芒星AI青色
提示詞(可直接修改內容)
import React from "react";
import {
  AbsoluteFill,
  interpolate,
  useCurrentFrame,
} from "remotion";

export const LogoHologram: React.FC = () => {
  const frame = useCurrentFrame();

  // frame 0-20:整體容器淡入 + scaleY 1.2→1.0
  const containerOpacity = interpolate(frame, [0, 20], [0, 1], {
    extrapolateLeft: "clamp",
    extrapolateRight: "clamp",
  });
  const containerScaleY = interpolate(frame, [0, 20], [1.2, 1.0], {
    extrapolateLeft: "clamp",
    extrapolateRight: "clamp",
  });

  // 掃描線位置:持續循環,frame * 2 - 150,clamp 在 -150 到 150
  const rawScanY = (frame * 2) % 300 - 150;

  // 微幅閃爍 opacity(整體)
  const flickerOpacity = 0.85 + 0.15 * Math.sin(frame * 0.3);

  // 六芒星兩個三角形描邊:frame 20-60
  const starPerimeter = 480; // 六芒星近似周長
  const starStrokeOffset = interpolate(frame, [20, 60], [starPerimeter, 0], {
    extrapolateLeft: "clamp",
    extrapolateRight: "clamp",
  });

  // frame 55-85:「AI」字樣淡入
  const aiOpacity = interpolate(frame, [55, 85], [0, 1], {
    extrapolateLeft: "clamp",
    extrapolateRight: "clamp",
  });

  // frame 70-100:品牌名淡入
  const brandOpacity = interpolate(frame, [70, 100], [0, 1], {
    extrapolateLeft: "clamp",
    extrapolateRight: "clamp",
  });
  const brandY = interpolate(frame, [70, 100], [10, 0], {
    extrapolateLeft: "clamp",
    extrapolateRight: "clamp",
  });

  // frame 90-115:狀態文字淡入
  const statusOpacity = interpolate(frame, [90, 115], [0, 1], {
    extrapolateLeft: "clamp",
    extrapolateRight: "clamp",
  });

  // 六芒星頂點計算(兩個等邊三角形,中心 960,430,半徑 80px)
  const cx = 960;
  const cy = 430;
  const r = 80;

  // 三角形 1(朝上)
  const t1Points = [
    [cx + r * Math.sin(0), cy - r * Math.cos(0)],
    [cx + r * Math.sin((2 * Math.PI) / 3), cy - r * Math.cos((2 * Math.PI) / 3)],
    [cx + r * Math.sin((4 * Math.PI) / 3), cy - r * Math.cos((4 * Math.PI) / 3)],
  ]
    .map((p) => p.join(","))
    .join(" ");

  // 三角形 2(旋轉 60°,朝下)
  const t2Points = [
    [cx + r * Math.sin(Math.PI / 3), cy - r * Math.cos(Math.PI / 3)],
    [cx + r * Math.sin(Math.PI), cy - r * Math.cos(Math.PI)],
    [cx + r * Math.sin((5 * Math.PI) / 3), cy - r * Math.cos((5 * Math.PI) / 3)],
  ]
    .map((p) => p.join(","))
    .join(" ");

  return (
    <AbsoluteFill
      style={{
        background: "#050a0f",
        justifyContent: "center",
        alignItems: "center",
      }}
    >
      {/* 整體容器(控制淡入與 scaleY) */}
      <div
        style={{
          position: "absolute",
          top: 0,
          left: 0,
          right: 0,
          bottom: 0,
          opacity: containerOpacity * flickerOpacity,
          transform: `scaleY(${containerScaleY})`,
        }}
      >
        {/* SVG:六芒星 + 掃描線範圍遮罩 */}
        <svg
          width="1920"
          height="1080"
          viewBox="0 0 1920 1080"
          style={{ position: "absolute", top: 0, left: 0 }}
        >
          {/* 六芒星三角形 1 */}
          <polygon
            points={t1Points}
            stroke="#00ffff"
            strokeWidth="2"
            fill="rgba(0,255,255,0.05)"
            strokeDasharray={starPerimeter}
            strokeDashoffset={starStrokeOffset}
          />
          {/* 六芒星三角形 2 */}
          <polygon
            points={t2Points}
            stroke="#0ea5e9"
            strokeWidth="2"
            fill="rgba(14,165,233,0.05)"
            strokeDasharray={starPerimeter}
            strokeDashoffset={starStrokeOffset}
          />

          {/* 外圈光暈圓形 */}
          <circle
            cx={cx}
            cy={cy}
            r="105"
            stroke="rgba(0,255,255,0.15)"
            strokeWidth="1"
            fill="none"
          />
        </svg>

        {/* 掃描線(橫向漸層,從上到下循環移動) */}
        <div
          style={{
            position: "absolute",
            left: "50%",
            top: cy + rawScanY,
            transform: "translateX(-50%)",
            width: 300,
            height: 3,
            background: "linear-gradient(to right, transparent, #00ffff, transparent)",
            opacity: 0.7,
          }}
        />

        {/* 「AI」字樣(中心) */}
        <div
          style={{
            position: "absolute",
            top: cy - 30,
            left: 0,
            right: 0,
            display: "flex",
            justifyContent: "center",
            alignItems: "center",
            opacity: aiOpacity,
          }}
        >
          <span
            style={{
              fontSize: 50,
              fontWeight: 900,
              color: "#00ffff",
              fontFamily: "monospace",
              letterSpacing: "-0.02em",
              textShadow: "0 0 20px #00ffff, 0 0 40px rgba(0,255,255,0.5)",
            }}
          >
            AI
          </span>
        </div>

        {/* 品牌名 */}
        <div
          style={{
            position: "absolute",
            top: cy + 120,
            left: 0,
            right: 0,
            display: "flex",
            justifyContent: "center",
            opacity: brandOpacity,
            transform: `translateY(${brandY}px)`,
          }}
        >
          <span
            style={{
              fontSize: 36,
              fontWeight: 700,
              color: "#00ffff",
              fontFamily: "monospace",
              letterSpacing: "0.05em",
              textShadow: "0 0 15px rgba(0,255,255,0.6)",
            }}
          >
            Hologram.ai
          </span>
        </div>

        {/* 狀態文字 */}
        <div
          style={{
            position: "absolute",
            top: cy + 170,
            left: 0,
            right: 0,
            display: "flex",
            justifyContent: "center",
            opacity: statusOpacity,
          }}
        >
          <span
            style={{
              fontSize: 14,
              fontWeight: 400,
              color: "rgba(0,255,255,0.7)",
              fontFamily: "monospace",
              letterSpacing: "6px",
              textTransform: "uppercase",
            }}
          >
            SYSTEM ONLINE
          </span>
        </div>
      </div>
    </AbsoluteFill>
  );
};

登入後查看完整程式碼