Files
2026-10-31 20:16:32 +01:00

4.8 KiB
Raw Permalink Blame History

Ściąga — ue_workshop

Import: from ue_workshop import Scene, Sequence, Renderer, camera, lighting, materials, assets, blender, render

REIMPORT=False w plikach ćwiczeń używa istniejących assetów UE; brakujące są importowane. REIMPORT=True ponownie importuje modele i klipy, także po edycji .blend. Własny skrypt: scene.skeletal_model(..., reimport=True) lub scene.model(..., reimport=True). Nie ma automatycznego wykrywania zmian źródeł.

camera.create(..., fov=60) ustawia poziomy kąt widzenia w stopniach: większy FOV daje szerszy kadr. Zakres: 0 < fov < 180. Domyślne 43.6 odpowiada obiektywowi 45 mm na sensorze o szerokości 36 mm.

Operacja Przykład
Własna mapa scene = Scene("MyShot")
Kolor PBR (wartości liniowe 0–1) mat = materials.color("Red", (0.8, 0.02, 0.01), roughness=0.4)
Prosta postać actor = scene.character(material=mat, head_scale=1.3)
Bryła scene.primitive("Sphere", name="Ball", location=(0, 100, 50), material=mat)
Import statycznego modelu mesh = assets.import_model("C:/models/model.glb", name="MyModel")
Eksport + import Blendera mesh = blender.import_character("C:/models/character.blend")
Model na scenie actor = scene.mesh(mesh, name="Hero")
Import z dopasowaniem rozmiaru i pivotu actor = scene.model("source_assets/models/hero.glb", name="Hero", height=200)
Korekta osi modelu przed dopasowaniem actor = scene.model("hero.fbx", rotation=(0, 0, 90))
Światła studyjne lights = lighting.studio(scene)
Pojedyncze światło lighting.area(scene, location=(200, -200, 350), intensity=10000, color=(1, 0.5, 0.2))
Kamera cam = camera.create(scene, location=(450, -550, 300), target=(0, 0, 100), fov=43.6)
Zmiana kierunku camera.look_at(cam, (0, 0, 150))
Sekwencja shot = Sequence(scene, fps=24, frames=48)
Aktywna kamera shot.camera(cam)
Klucz pozycji shot.transform_key(actor, 0, location=(0, 0, 0))
Klucz rotacji shot.transform_key(actor, 47, rotation=(0, 0, 360))
Klucz skali shot.transform_key(actor, 24, scale=(1.2, 1.2, 1.2), interpolation="auto")
Zapis + otwarcie Sequencera shot.save()
Własny renderer renderer = Renderer(width=1920, height=1080, samples=8, warmup=32, mp4=True)
Preset z własnymi wartościami renderer = Renderer.from_preset("final", samples=8)
Render z własnymi ustawieniami renderer.render(shot)
Podgląd tym samym rendererem renderer.render(shot, single_frame=24)
PNG + MP4 render.start(shot, preset="preview")
Tylko PNG render.start(shot, mp4=False)
Jedna klatka render.start(shot, single_frame=24)

UE: centymetry, Z w górę. Rotacja w kluczach: roll, pitch, yaw, stopnie. Klatki: 0..frames-1, koniec zakresu wyłączny. Interpolacja: linear, auto, constant. Cały obrót: klucze 0 i 360, nie 0 i 0. Kamera i modele to oryginalne obiekty UE: możesz wywoływać ich metody, np. actor.set_actor_label("MyHero"). shot.asset to oryginalny LevelSequence, shot.bind(actor) zwraca binding UE.

W my_shot.py: MODEL="fighter" lub MODEL="creature" wybiera postać ze szkieletem. Nazwy klipów pochodzą z plików, np. great_sword_walk i mutant_swiping. scene.skeletal_model(...) samo znajduje wszystkie FBX obok modelu — bez animations. Dostępne jest 51 animacji fighter i 12 animacji creature; pełny katalog. Własny FBX lub .blend z Armature: MODEL="file", SKELETAL=True, MODEL_FILE=.... ANIMATION_FILE=None odtwarza animację z pliku modelu; można wskazać osobny FBX z animacją dla tego samego szkieletu. Dla statycznego modelu ustaw SKELETAL=False.

character = scene.skeletal_model("source_assets/character/my_character.fbx", name="Hero")
shot.animation(character)  # tylko gdy postac ma jedna dostepna animacje
# Gdy jest ich wiecej: shot.animation(character, "nazwa_pliku_animacji")
# Albo nazwane klipy: scene.skeletal_model(..., animations={"walk": walk_fbx, "idle": idle_fbx})
# shot.animation(character, "walk", start=0, end=48, speed=1.0)
# shot.animation(character, "idle", start=48, end=120)
# Plynne przejscie: pierwszy klip 0..60, drugi 48..120:
# shot.animation(character, "walk", start=0, end=60)
# shot.animation(character, "idle", start=48, end=120)  # automatyczny blend 12 klatek

Krótsza animacja zapętla się w swojej sekcji. transform_key porusza całym aktorem równolegle z animacją kości. Do własnych tras wybieraj klipy In Place. Blender: kolekcja Character, siatki przypisane do jednego Armature, aktywna akcja i zakres klatek sceny. Zapisz plik przed ponownym uruchomieniem skryptu w UE.

Przy pojedynczym podglądzie nie uruchamiaj dodatkowo pełnego renderu: jednocześnie może pracować tylko jeden renderer warsztatowy.