Manim实现阴影特效
Manim实现阴影特效从原理到实践引言ManimMathematical Animation Engine是由3Blue1Brown开发的强大动画引擎广泛应用于数学可视化。阴影特效是提升视觉层次感和深度的关键技巧。本文将深入剖析Manim阴影实现的底层原理并提供可运行的代码示例帮助你在动画中打造专业级阴影效果。## 阴影的视觉原理在计算机图形学中阴影本质上是光源被物体遮挡后形成的暗区。Manim并非实时渲染引擎而是基于场景树Scene Tree和矢量图形SVG/OpenGL的动画系统。因此其阴影特效是通过几何变换和透明度叠加模拟的而非传统的光线追踪。核心机制包括-偏移复制将原图形复制并平移作为阴影基底。-模糊处理通过高斯模糊GaussianBlur模拟阴影的软边缘。-透明度衰减降低阴影的alpha值使其自然融入背景。Manim内部使用VMobject矢量图形对象的copy()方法和apply_function()来实现这些操作。## 基础阴影实现### 原理拆解最简单的阴影通过两步实现1. 创建原物体的副本并应用shift()偏移。2. 设置副本的fill_opacity为0.3左右并添加高斯模糊。Manim的VGroup可以组合这些对象但注意阴影应位于原物体下方通过z_index控制。### 可运行代码示例1静态圆形阴影pythonfrom manim import *class BasicShadow(Scene): def construct(self): # 创建主物体一个蓝色圆形 circle Circle( radius1.5, colorBLUE, fill_opacity0.8 ) # 创建阴影复制圆形并向右下偏移 shadow circle.copy() shadow.shift(RIGHT * 0.3 DOWN * 0.3) # 偏移产生投影 shadow.set_fill(opacity0.3) # 透明阴影 shadow.set_stroke(opacity0) # 去掉边框 shadow.apply_function( # 应用缩放扭曲模拟透视 lambda p: np.array([p[0]*1.1, p[1]*0.9, p[2]]) ) # 添加高斯模糊Manim 0.18支持 shadow.insert_n_curves(10) # 增加曲线点便于模糊 shadow.set_opacity(0.2) # 进一步降低不透明度 # 显示顺序先阴影后主物体 self.add(shadow, circle) self.wait(2) # 添加微动画让阴影轻微移动 self.play( shadow.animate.shift(LEFT * 0.2 UP * 0.2), run_time3 )关键点解释-apply_function对阴影的每个点进行自定义变换这里模拟了透视收缩。-insert_n_curves增加曲线插值点使后续模糊效果更平滑。- 阴影的z_index默认基于添加顺序先添加的在后层。## 高级阴影特效动态与材质### 原理深入基于顶点的模糊真正的软阴影需要高斯模糊。Manim的VMobject本身不直接支持模糊但可以通过以下方式实现- 使用FadeTransform或AnimationGroup结合set_opacity过渡。- 利用CairoRenderer或OpenGLRenderer的硬件加速。更高级的阴影可以结合光源方向和物体材质。例如通过计算物体边缘到光源的向量动态调整阴影的偏移量和形状。### 可运行代码示例2动态旋转立方体阴影pythonfrom manim import *import numpy as npclass DynamicShadow(ThreeDScene): def construct(self): # 创建3D立方体 cube Cube(side_length2, fill_opacity0.7, colorTEAL) cube.rotate(PI/4, axisUP) # 初始旋转 # 创建阴影平面一个半透明矩形 shadow_plane Rectangle( width4, height4, fill_opacity0.15, colorBLACK, stroke_opacity0 ) shadow_plane.shift(DOWN * 1.5) # 放置在立方体下方 # 动态阴影轮廓从立方体投影到平面 # 方法复制立方体的底面顶点投影到平面 def get_shadow_points(mob): # 获取立方体底部四个顶点假设立方体中心在原点 points mob.get_all_points() # 筛选z值最小的点底面 bottom_points [p for p in points if p[2] -0.9] if len(bottom_points) 3: return None # 投影到z-1.5平面 projected [] for p in bottom_points: # 简单正交投影保持x,y不变z固定 projected.append([p[0], p[1], -1.5]) return projected # 创建阴影多边形动态更新 shadow_poly always_redraw(lambda: self._create_shadow(cube)) # 添加到场景 self.add(cube, shadow_plane, shadow_poly) # 动画旋转立方体 self.play( Rotate(cube, angle2*PI, axisUP, run_time6), rate_funclinear ) self.wait() def _create_shadow(self, cube): 根据立方体位置更新阴影多边形 # 获取立方体底面点简化使用包围盒 bbox cube.get_bounding_box() x_min, y_min, z_min bbox[0] x_max, y_max, z_max bbox[1] # 构造底面矩形四个角点在z-1.5平面 corners [ [x_min, y_min, -1.5], [x_max, y_min, -1.5], [x_max, y_max, -1.5], [x_min, y_max, -1.5] ] # 创建多边形阴影 poly Polygon( *corners, colorBLACK, fill_opacity0.3, stroke_opacity0 ) # 应用模糊效果通过多次复制偏移模拟 blurred VGroup() for dx, dy in [(0,0), (0.05,0.05), (-0.05,-0.05)]: copy_poly poly.copy() copy_poly.shift(RIGHT*dx UP*dy) copy_poly.set_opacity(0.1) blurred.add(copy_poly) return blurred高级技巧说明-always_redraw让阴影随立方体旋转实时更新。-get_bounding_box获取物体的轴对齐包围盒用于计算投影。- 多重复制偏移模拟高斯模糊的廉价方案适合实时动画。## 性能优化与最佳实践阴影特效虽美但需注意性能影响1.减少顶点数复杂形状的阴影计算量呈指数增长。使用simplify()方法压缩曲线。2.缓存阴影对于静态场景预计算阴影并缓存为VGroup避免每帧重建。3.分层渲染将阴影放在单独的VGroup中通过set_z_index控制深度。python# 性能优化示例shadow_group VGroup()for _ in range(3): s circle.copy() s.shift(np.random.uniform(-0.1, 0.1, 3)) s.set_opacity(0.1) shadow_group.add(s)# 一次性添加到场景减少渲染调用self.add(shadow_group, circle)## 总结本文从视觉原理到Manim实现系统阐述了阴影特效的构建方法。核心在于理解Manim的矢量图形操作机制通过copy()、shift()、set_opacity()和apply_function()的组合可以模拟出从简单投影到动态软阴影的丰富效果。高级实现中利用always_redraw和几何投影计算能创造出符合物理规律的动态阴影。实践建议先从简单形状圆形、矩形入手逐步过渡到复杂3D物体。记住阴影的目的是增强空间感而非喧宾夺主。合理控制透明度0.2-0.4和模糊半径是关键。希望本文能帮助你在Manim动画中用阴影为数学之美增添深度与质感。

相关新闻

使用PySide/PyQt实现全国省市区的级联选择组件

使用PySide/PyQt实现全国省市区的级联选择组件

使用PySide/PyQt实现全国省市区的级联选择组件 引言在桌面应用开发中,地区选择是一个常见的功能需求。无论是用户注册、地址填写还是数据筛选,级联选择器都能提供直观、高效的交互体验。PySide/PyQt作为Python生态中成熟的GUI框架,提供了丰富…

2026/8/15 8:55:34 阅读更多 →
Krea2高清图像生成工作流:4K/6K本地部署与API集成指南

Krea2高清图像生成工作流:4K/6K本地部署与API集成指南

这次我们来看 Krea2 高清成片链的最新升级,重点不是概念多复杂,而是这套工作流能不能在你的设备上稳定跑出 4K/6K 级别的超高清图像。如果你关心本地部署的显存占用、批量任务效率和接口调用灵活性,这篇文章可以直接收藏。Krea2 是一个基于 C…

2026/8/15 8:52:06 阅读更多 →
从Linux到K8S:云原生运维实战入门路径与避坑指南

从Linux到K8S:云原生运维实战入门路径与避坑指南

这类教程最值得先看的不是它覆盖了多少知识点,而是能不能帮你把 Docker 和 Kubernetes (K8S) 这两项云原生运维的核心技术,从“知道名字”变成“能在自己环境里跑起来、管起来”。很多新手卡在第一步:环境装不上、命令看不懂、概念太抽象。这…

2026/8/13 15:31:41 阅读更多 →

最新新闻

测试用例设计与管理实战:从核心要素到自动化策略

测试用例设计与管理实战:从核心要素到自动化策略

1. 项目概述:从“测试用例”说起,为什么它远不止一份文档 在软件研发这个行当里干了十几年,我见过太多团队把“测试用例”当成一个不得不填的表格,一份应付流程的文档。新入行的测试工程师,往往第一项任务就是“照着需…

2026/8/15 8:55:10 阅读更多 →
外卖CPS营销系统开发活动弹窗技术实现

外卖CPS营销系统开发活动弹窗技术实现

外卖CPS营销系统开发活动弹窗技术实现 外卖CPS营销系统的活动弹窗是平台拉新、促活、提升下单转化率的核心轻量化营销组件,常用于新人福利、限时返利、节日活动、充值激励、裂变活动等场景。弹窗的精准触发、权限控制、频次限制、用户去重展示,直接影响用…

2026/8/15 8:55:10 阅读更多 →
外卖CPS平台开发推广员上下级关系处理

外卖CPS平台开发推广员上下级关系处理

外卖CPS平台开发推广员上下级关系处理 外卖CPS平台的核心裂变体系依托推广员上下级层级关系运转,用户通过老推广员链接注册绑定关系后,形成稳定的分销、分佣、团队统计链路。上下级关系的精准绑定、防篡改、终身锁定、层级溯源,是保障团队分润…

2026/8/15 8:55:10 阅读更多 →
下载卡在 0% 不只是网速的问题,83 个公共 Tracker 才是让 BT 提速的关键

下载卡在 0% 不只是网速的问题,83 个公共 Tracker 才是让 BT 提速的关键

下载卡在 0% 不只是网速的问题,83 个公共 Tracker 才是让 BT 提速的关键 【免费下载链接】trackerslist Updated list of public BitTorrent trackers 项目地址: https://gitcode.com/GitHub_Trending/tr/trackerslist 想给朋友的 BT 下载把把脉?…

2026/8/15 8:55:10 阅读更多 →
【原创唯一】基于SpringBoot+Vue的在线论坛系统 课程设计/大作业/期末作业(源码+MySQL数据库+实验报告+PPT+远程部署)

【原创唯一】基于SpringBoot+Vue的在线论坛系统 课程设计/大作业/期末作业(源码+MySQL数据库+实验报告+PPT+远程部署)

摘要 随着移动互联网与社交媒体的普及,网络论坛仍是用户进行深度讨论、知识分享与兴趣交流的重要载体。传统论坛系统往往功能单一、界面陈旧,难以满足年轻用户对交互体验与内容治理的双重要求。本文设计并实现了一套基于 B/S 架构的 Web 论坛系统&#x…

2026/8/15 8:55:10 阅读更多 →
数学建模国赛C题解题框架:从破题到论文的完整实战指南

数学建模国赛C题解题框架:从破题到论文的完整实战指南

1. 项目概述:从“思路”到“解题框架”的深度解析每年一到数学建模国赛的节点,各大平台和社群最火热的词条莫过于“XX题思路首发”。对于参赛者,尤其是初次接触国赛的同学来说,这六个字背后承载的,远不止是几行解题提示…

2026/8/15 8:54:10 阅读更多 →

日新闻

内景 空间站内部 中国空间站 太空 内仓

内景 空间站内部 中国空间站 太空 内仓

本项目为前几天收费帮学妹做的一个项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 空间站内部 中国空间站 太空 内仓 地址:本地PC端运行(或Web…

2026/8/15 0:00:30 阅读更多 →
重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 当我们面对海量金融数据时,传统的数据获取方式往往让我们陷入困境—…

2026/8/15 0:00:30 阅读更多 →
一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

快消品(FMCG)是流通速度较快、竞争较为激烈的行业之一。一瓶饮料从出厂到消费者手中,往往只有几十天甚至几天的周转窗口。这决定了快消行业的仓储管理系统(WMS)与制造业、电商行业存在明显区别:它不仅需要管…

2026/8/15 0:02:30 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/14 13:40:53 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/14 14:06:45 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/15 2:35:29 阅读更多 →