Cinema 4D: COFFEE vs Python
O C4D teve dois sistemas de scripting ao longo da sua história: o COFFEE (legado) e o Python (atual). Se você está começando hoje, pula o COFFEE e vai direto pro Python. Mas entender a diferença ajuda a navegar tutoriais antigos sem se perder.
Caution
Se abrir um arquivo antigo com expressões COFFEE, elas ainda rodam — mas não escreva código novo em COFFEE. Está em modo de manutenção desde que o Python entrou.
COFFEE: o sistema legado
O COFFEE foi a linguagem de scripting original do C4D, baseada em C++/Java simplificados. Você vai encontrá-lo em tutoriais antigos (pré-2012) e em alguns plugins legados que nunca foram portados. A Maxon não desenvolve mais.
Python no C4D
O C4D usa Python 3 (desde a versão R23) integrado ao ambiente do software. Os pontos de entrada:
- Script Manager (
Extensions > Script Manager), para rodar scripts avulsos - Python Tag, tag aplicada a objetos para rodar código por frame
- Python Generator, gera geometria proceduralmente
- Python Effector, effector do MoGraph controlado por Python
- XPresso com nó Python, integra Python dentro do sistema de nós visual
XPresso: scripting visual (sem código)
O XPresso é o sistema de programação visual do C4D. Você conecta nós em rede para criar lógica sem escrever código.
Acesse: selecione um objeto, Tags > XPresso.
Casos de uso comuns:
- vincular parâmetros de objetos diferentes
- criar rigs simples (olhos que seguem um alvo)
- automatizar movimentos condicionais
Python Tag: código por frame
A Python Tag é o equivalente das expressões do after, mas com toda a potência do Python:
import c4dimport math
def main(): # acessa o objeto ao qual a tag está aplicada obj = op.GetObject()
# pega o frame atual frame = doc.GetTime().GetFrame(doc.GetFps())
# move o objeto em Y baseado no frame pos = obj.GetAbsPos() pos.y = math.sin(frame * 0.1) * 100 obj.SetAbsPos(pos)A função main() é chamada a cada frame. op é a tag, doc é o documento atual.
Python Generator: geometria procedural
O Python Generator cria geometria real a partir de código:
import c4d
def main(): obj = c4d.BaseObject(c4d.Opolygon)
# cria 4 pontos obj.ResizeObject(4, 2) obj.SetPoint(0, c4d.Vector(-100, 0, -100)) obj.SetPoint(1, c4d.Vector(100, 0, -100)) obj.SetPoint(2, c4d.Vector(100, 0, 100)) obj.SetPoint(3, c4d.Vector(-100, 0, 100))
# cria 2 polígonos obj.SetPolygon(0, c4d.CPolygon(0, 1, 2)) obj.SetPolygon(1, c4d.CPolygon(0, 2, 3))
obj.Message(c4d.MSG_UPDATE) return objScript Manager: comandos avulsos
Para tarefas que você roda uma vez, usa o Script Manager (Extensions > Script Manager). Não precisa de tag:
import c4d
def main(): obj = doc.GetActiveObject() if obj is None: return
# move o objeto para o centro obj[c4d.ID_BASEOBJECT_POSITION] = c4d.Vector(0, 0, 0) c4d.EventAdd()Info
c4d.EventAdd() é obrigatório no final de qualquer script que modifica a cena — sem ele o C4D não atualiza a viewport.
A API do C4D: módulos principais
c4d, o módulo raiz, acesso a tudoc4d.documents, acesso ao documento e cenac4d.gui, criação de interfacesc4d.utils, matemática e utilitáriosc4d.modules.mograph, acesso a dados do MoGraph
Documentação completa: developers.maxon.net