shader - 你如何在 blender 循环节点着色器中添加时间关系?

标签 shader nodes blender

在 GLSL 中有 gl_Time 属性。
blender cylces节点中的等价物是什么? 我发现使用关键帧作为答案,但我必须为每手数百帧设置关键帧(帧 1:值 = 1;帧 2 = 值 = 2;...)
必须有更好的方法让纹理在某物上滚动。

最佳答案

在循环 Material 中,您可以添加 Mapping node并使用位置、旋转和缩放值来移动纹理。这些值可以设置关键帧,以便它们随时间变化,通常设置两个关键帧足以在动画期间连续滚动。

Drivers允许我们使用 Python 表达式以编程方式为值设置动画。

在节点树中,您可以添加 value input node并为该值设置一个驱动程序。输入表达式的快捷方式是编辑值并在 # 后输入表达式。通过在值字段中输入 #frame,您将获得一个等于当前帧号的驱动程序。

请注意,在节点树中使用驱动程序时存在依赖性问题。虽然这已在 2.80 中得到修复,但在使用旧版本时,您应该使用 --enable-new-depsgraph CLI option 启用新的依赖关系图。 .

还可以选择使用脚本创建具有计算值的关键帧。

import bpy

scn = bpy.context.scene
node = bpy.context.object.material_slots['Material'].material.node_tree.nodes['Value']

for f in range(scn.frame_start, scn.frame_end):
    node.outputs[0].default_value = f * 1.25
    node.outputs[0].keyframe_insert("default_value", frame=f)

关于shader - 你如何在 blender 循环节点着色器中添加时间关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53706780/

相关文章:

c++ - 如何使用 DirectX11 着色器将纹理应用到正交平面

opengl - OpenGL Pixel Shader:如何在每个像素上生成0和1的随机矩阵?

Blender如何使脸的边缘变圆

python - 将 CSV 导入 Blender 时出现 "Could not convert string to float"

java - 为什么我的模型没有在 LWJGL 中使用着色器和 VBO 渲染任何内容

three.js - Three.js GPU 中的变形目标是否受支持?

javascript - 使用 on click vanilla JS,在错误的节点上激活

c++ - 如何使用引用传递的值进行更新以删除双链表中的出现

nodes - Ada 通用链表和通用包访问

blender - 3D 模型(.obj 或 .fbx 或 .glb)无法在 Hololens 2 3d 查看器中加载