首页/新闻资讯/正文详情

Manim实现阴影特效

发布时间:2026/11/15 16:33:10 来源:云帆数科 栏目:资讯中心
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动画中用阴影为数学之美增添深度与质感。

相关推荐

开源AI基础设施:核心组件、优化技术与社区协作
开源AI基础设施:核心组件、优化技术与社区协作

1. 开源AI基础设施的行业价值与现状2023年全球AI基础设施市场规模已突破500亿美元,其中开源技术占比超过35%。这个数字背后反映的是AI发展正从封闭走向开放协作的新阶段。作为从业十年的AI工程师,我亲眼见证了开源社区如何推动着AI基础设施的民主化进程。… · 2026/11/14 13:34:44

AI辅助技术专著创作全流程实战指南
AI辅助技术专著创作全流程实战指南

1. 项目概述作为一名写过三本技术书籍的过来人,我深知专著创作的痛苦:从选题构思到资料收集,从章节编排到文字打磨,每个环节都让人头秃。去年尝试用AI工具辅助完成了一本28万字的技术手册后,我发现现代AI写作工具已经能… · 2026/11/14 22:12:37

10分钟掌握Octopii高级用法:自定义正则规则与多区域PII识别技巧
10分钟掌握Octopii高级用法:自定义正则规则与多区域PII识别技巧

10分钟掌握Octopii高级用法:自定义正则规则与多区域PII识别技巧 【免费下载链接】Octopii An AI-powered Personal Identifiable Information (PII) scanner. 项目地址: https://gitcode.com/gh_mirrors/oc/Octopii Octopii是一款AI驱动的个人身份信息&#… · 2026/11/14 22:11:46

低压操作电工证题库怎么报名?学历不高怕报不上名的看过来
低压操作电工证题库怎么报名?学历不高怕报不上名的看过来

低压操作电工证题库怎么报名?学历不高怕报不上名的看过来 学历不高怕报不上名?别急,低压操作电工证题库怎么报名其实没你想象中难,关键看你有没有找对门路。很多同行朋友都跟我聊过,他们以为自己没学历、没背景就没办法考电工证,结果发现其实只要准备到… · 2026/11/15 16:31:30

开封劳务班组负责人必看:特种作业操作证 种类值不值得考
开封劳务班组负责人必看:特种作业操作证 种类值不值得考

开封劳务班组负责人必看:特种作业操作证 种类值不值得考 怕考不过白交培训费?开封某劳务班组负责人老李,去年因为没给工人办特种作业操作证,结果工地被安监部门查出隐患,班组被罚款2万,还被暂停施工。老李说:“那会儿才知道,特种作业操作证… · 2026/11/15 16:31:30

特种车制板工岗位职责别乱报!考前押题拿捏关键考点
特种车制板工岗位职责别乱报!考前押题拿捏关键考点

特种车制板工岗位职责别乱报!考前押题拿捏关键考点 怕考不过白交培训费?特种车制板工岗位职责你真的搞懂了吗?现在报名培训的人越来越多,但很多人还是稀里糊涂报了名,结果考试挂了,钱花了不说,还得再花时间精力重来一遍。… · 2026/11/15 16:31:30

周口房建工程从业者考安监局电工证报考地点真实经历全解析
周口房建工程从业者考安监局电工证报考地点真实经历全解析

周口房建工程从业者考安监局电工证报考地点真实经历全解析 实操考试心里没底怕挂科?我身边好几个老电工朋友都因为没提前准备,结果在操作台上手忙脚乱,差点挂科。这年头,安监局电工证是不少周口房建工程从业者必须拿到的“通行证”,但很多人对… · 2026/11/15 16:31:30

邢台市考特种低压电工证多少钱多久拿证怕挂科?这几点必须提前知道
邢台市考特种低压电工证多少钱多久拿证怕挂科?这几点必须提前知道

邢台市考特种低压电工证多少钱多久拿证怕挂科?这几点必须提前知道 实操考试心里没底怕挂科,这几乎是所有准备考低压电工证的学员共同的担忧。尤其是在邢台市,特种作业操作证的报考门槛高、流程复杂,稍有不慎就可能耽误几个月的时间。很多学员问:… · 2026/11/15 16:31:30

上海电工作业千万别踩坑!外省证怎么转过来全攻略
上海电工作业千万别踩坑!外省证怎么转过来全攻略

上海电工作业千万别踩坑!外省证怎么转过来全攻略 之前考的证在外省能不能转过来?这个问题我天天被问,今天一次性给你说清楚,上海电工作业考试到底该怎么考、怎么转, 千万别踩坑… · 2026/11/15 16:30:29

长春初级电工证怎么考?通过率揭秘全在这里
长春初级电工证怎么考?通过率揭秘全在这里

长春初级电工证怎么考?通过率揭秘全在这里 之前考的证在外省能不能转过来?这几乎是每个想从事电工工作的人都会问的问题。特别是那些在外地打拼多年、手里握着一张“外地电工证”的人,到了长春想继续干这一行,第一反应就是“我的证能用吗?”。今天我们就… · 2026/11/15 0:00:50

国内电工证报考条件与考试时间
国内电工证报考条件与考试时间

低压电工证怎么考?学历不高也能报名,官方报名入口全在这 你是不是经常听说“电工证是入行门槛”,但又担心自己学历不够、经验不足,根本报不了名?别急,今天就带你从零了解【国内电工证】的报考流程、考试内容,还有怎么在 官方报名入口… · 2026/11/15 0:00:50

电工作业时如何断电?电子证书到底能不能全国通用?
电工作业时如何断电?电子证书到底能不能全国通用?

电工作业时如何断电?电子证书到底能不能全国通用? 实操考试心里没底怕挂科,特别是电工作业时如何断电这一操作,不仅关系到你能不能拿到证书,更关系到以后能不能顺利上岗。很多人觉得这不过就是“断个电”,但其实这里面的门道可不少,稍有不慎就可能出错… · 2026/11/15 0:00:50

长春初级电工证怎么考?通过率揭秘全在这里
长春初级电工证怎么考?通过率揭秘全在这里

长春初级电工证怎么考?通过率揭秘全在这里 之前考的证在外省能不能转过来?这几乎是每个想从事电工工作的人都会问的问题。特别是那些在外地打拼多年、手里握着一张“外地电工证”的人,到了长春想继续干这一行,第一反应就是“我的证能用吗?”。今天我们就… · 2026/11/15 0:00:50

国内电工证报考条件与考试时间
国内电工证报考条件与考试时间

低压电工证怎么考?学历不高也能报名,官方报名入口全在这 你是不是经常听说“电工证是入行门槛”,但又担心自己学历不够、经验不足,根本报不了名?别急,今天就带你从零了解【国内电工证】的报考流程、考试内容,还有怎么在 官方报名入口… · 2026/11/15 0:00:50

电工作业时如何断电?电子证书到底能不能全国通用?
电工作业时如何断电?电子证书到底能不能全国通用?

电工作业时如何断电?电子证书到底能不能全国通用? 实操考试心里没底怕挂科,特别是电工作业时如何断电这一操作,不仅关系到你能不能拿到证书,更关系到以后能不能顺利上岗。很多人觉得这不过就是“断个电”,但其实这里面的门道可不少,稍有不慎就可能出错… · 2026/11/15 0:00:50

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/15 1:51:20

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/15 4:02:19

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/15 3:02:05

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码