Hatte vor einigen Monaten mal eine Smoke Simulation in Blender umgesetzt. Da sie für den eigentlich Zweck nicht gebraucht wurde und jetzt auf meiner Platte vergammelt, hier das Rendering:
Und hier die Blender Scene.: SmokeSim_DEMO
Hatte vor einigen Monaten mal eine Smoke Simulation in Blender umgesetzt. Da sie für den eigentlich Zweck nicht gebraucht wurde und jetzt auf meiner Platte vergammelt, hier das Rendering:
Und hier die Blender Scene.: SmokeSim_DEMO
Hier mal eine Idee für einen Batch updater. Gedacht ist, dass das Batchprogramm alle 4 Monate Updates installiert. Das ganze ist sehr einfach gehalten, wie man sieht werde Schaltjahre und Monatslängen nicht berücksichtigt. Im Grunde wird einfach überprüft ob zum letzten mal Ausführen schon 120 Tage vergangen sind, wenn ja kann man wählen ob das Batch vorsetzen soll.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | @echo off Setlocal EnableDelayedExpansion :: path to update ini set "ini=D:\Dateien\DEV\BatchScripts\update.ini" set year=%date:~-4% set month=%date:~-7,2% set day=%date:~-10,2% set splitMonth=%month:~0,1% set splitDay=%day:~0,1% if %splitMonth%==0 ( set month=%month:~-1% ) if %splitDay%==0 ( set day=%day:~-1% ) if not exist %ini% ( echo.year=%year%>>%ini% echo.month=!month!>>%ini% echo.day=!day!>>%ini% ) for /F "tokens=2 delims==" %%a in ('findstr /i year %ini%') do ( set oldYear=%%a ) for /F "tokens=2 delims==" %%b in ('findstr /i month %ini%') do ( set oldMonth=%%b ) for /F "tokens=2 delims==" %%c in ('findstr /i day %ini%') do ( set oldDay=%%c ) set /a calcDays = %year% * 365 + %month% * 30 + %day% set /a calcOldDays = %oldYear% * 365 + %oldMonth% * 30 + %oldDay% set /a diffDays = %calcDays% - %calcOldDays% :: update cycle 120 days = 4 month if %diffDays% LSS 120 GOTO run echo. echo.................................................................... echo. echo.....Update Progress................................................ echo. echo.................................................................... echo. echo. echo.Do you want to update media_compressor? Type: yes or no echo. set /P keyInput="Update Process:" echo. if %keyInput% == no exit if %keyInput% == yes ( del %ini% echo.year=%year%>>%ini% echo.month=!month!>>%ini% echo.day=!day!>>%ini% ) :run pause |
In 3ds Max 2014 (früher vielleicht auch schon), läuft der user_ibl_rect shader eigentlich recht gut. Um ihn zu verwenden muss er in dem „standard.mi“ file verlinkt werden.
Hier noch eine passende GUI dafür:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | gui "gui_user_ibl_rect" { control "Global" "Global" ( "uiName" "User IBL Rectangle" ) control "texture" "color texture" ( "uiName" "HDR Texture" ) control "samples" "integer" ( "uiName" "Samples", "value" 0, "nonConnectable" ) control "color" "color" ( "uiName" "Color", "value" 1 1 1 ) control "intensity" "scalar" ( "uiName" "Intensity", "value" 1.0 ) control "shadow_mode" "integer" ( "uiName" "Shadow Mode", "enum", "value" "0 no shadow, 1 opaque, 2 transparent", "range" 0 2, "nonConnectable" ) control "cone" "scalar" ( "uiName" "Cone", "value" 90.0 ) control "falloff" "scalar" ( "uiName" "Falloff", "value" 2.0 ) control "angular_falloff" "scalar" ( "uiName" "Angular Falloff", "value" 1.0 ) control "swap_uv" "boolean" ( "uiName" "Swap UV", "nonConnectable" ) } |
Vielleicht zu dem Thema die Tage noch mehr.
Heute gibt es nur einen Link… Hatte mir die Tage Gedanken drüber gemacht ob man per Script die Position einer Lichtquelle, anhand des gewünschten Glanzpunktes, erstellen lassen kann. Und siehe da, das Script gibt es schon und funktioniert super! Besser als ich es hin bekommen hätte.
Wenn man mehrere Filme auf mehreren Bildschirmen gleichzeitig abspielen möchte kann man das über ein Batchscript sehr schön lösen. Je nach Leistung des Computers funktioniert das nicht zu 100%, aber einige Millisekunden sollten verschmerzbar sein.
In dem folgenden Beispiel werden 5 Bildschirme angesteuert:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @echo off set vlcPath="C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" start "erster VLC" %vlcPath% --loop "Clip1.mp4" --no-qt-fs-controller --qt-start-minimized --qt-fullscreen-screennumber=3 --video-x=-5120 --video-y=100 --no-embedded-video --fullscreen --video-on-top --no-video-title-show start "zweiter VLC" %vlcPath% --loop "Clip2.mp4" --no-qt-fs-controller --qt-start-minimized --qt-fullscreen-screennumber=5 --video-x=-3090 --video-y=100 --no-embedded-video --fullscreen --video-on-top --no-video-title-show start "dritter VLC" %vlcPath% --loop "Clip3.mp4" --no-qt-fs-controller --qt-start-minimized --qt-fullscreen-screennumber=1 --video-x=-1030 --video-y=100 --no-embedded-video --fullscreen --video-on-top --no-video-title-show start "vierte VLC" %vlcPath% --loop "Clip4.mp4" --no-qt-fs-controller --qt-start-minimized --qt-fullscreen-screennumber=2 --video-x=0 --video-y=0 --no-embedded-video --fullscreen --video-on-top --no-video-title-show start "fuenfte VLC" %vlcPath% --loop "Clip5.mp4" --no-qt-fs-controller --qt-start-minimized --qt-fullscreen-screennumber=4 --video-x=1030 --video-y=100 --no-embedded-video --fullscreen --video-on-top --no-video-title-show pause tskill vlc /A |
Um die Position zu ermitteln, am besten über Grafiktreiber die Bildschirm ID anzeigen lassen, und in Script korrigieren, auch was den Versatz angeht.
VLC bietet auch eine Master/Slave Funktion über Netzwerk an. Hier einfach noch mal nach googlen.
Im vorherigen Beitrag habe ich ein Script veröffentlicht mit dem man Objekte in Würfel zerlegen kann.
Hier kommt nun das überarbeite Script mit grafischer Oberfläche:
Download: https://github.com/jb-alvarado/CubicShatter/archive/master.zip
Voronoi shatter gibt es einige, möchte man jedoch sein Objekt in Würfel zerlegen wird es schon etwas dünner mit dem Angebot. Hier ein Art, wie man das ganze mit maxscript umsetzten kann (GUI wird noch folgen):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | orgObj = selection[1] -- process slices fn process orgObj = ( if (orgObj != undefined) then ( -- copy original for processing, set pivot and reset all transformations obj = copy orgObj obj.pivot = obj.center obj.pivot.z = obj.min.z resetXForm obj convertToMesh obj objDim = obj.max - obj.min -- size of the quad pieces in scene units PlaneDistance = 8 -- calculate how many cuts in every dimension planeCountX = (objDim.x / PlaneDistance) as integer planeCountY = (objDim.y / PlaneDistance) as integer planeCountZ = (objDim.z / PlaneDistance) as integer --check if count come to the "soft" limit sum = planeCountX * planeCountY * planeCountZ if ( sum > 4000) do ( if queryBox ("Warning: You want to cut \"" + sum as string + "\" pieces. Are you sure that you want to continue?") then ( ) else ( delete obj return false ) ) --set the cut plane matrixes planeSumX = for x = 1 to planeCountX - 1 collect (matrix3 [0,0,-1] [0,1,0] [1,0,0] [(objDim.x / planeCountX * x + obj.min.x - obj.pos.x), (obj.max.y + obj.min.y) / 2, (obj.max.z + obj.min.z) / 2]) planeSumY = for y = 1 to planeCountY - 1 collect (matrix3 [1,0,0] [0,0,1] [0,-1,0] [(obj.max.x + obj.min.x) / 2, (objDim.y / planeCountY * y + obj.min.y - obj.pos.y), (obj.max.z + obj.min.z) / 2]) planeSumZ = for z = 1 to planeCountZ - 1 collect (matrix3 [0,1,0] [-1,0,0] [0,0,1] [(obj.max.x + obj.min.x) / 2, (obj.max.y + obj.min.y) / 2, (objDim.z / planeCountZ * z + obj.min.z - obj.pos.z)]) -- cut object in the x direction objArray1 = #() for a = 1 to planeSumX.count do ( ob1 = copy obj addModifier ob1 (sliceModifier name:"cutPlane1" slice_type:2) ob1.cutPlane1.slice_plane.transform = planeSumX[a] addModifier ob1 (sliceModifier name:"cutPlane2" slice_type:3) if (a-1 > 0) do (ob1.cutPlane2.slice_plane.transform = planeSumX[a-1]) addModifier ob1 (cap_holes()) convertToMesh ob1 join objArray1 #(ob1) ) addModifier obj (sliceModifier name:"cutPlane3" slice_type:3) obj.cutPlane3.slice_plane.transform = planeSumX[planeSumX.count] addModifier obj (cap_holes()) convertToMesh obj join objArray1 #(obj) -- cut objects in y direction objArray2 = #() for b = 1 to objArray1.count do ( for c = 1 to planeSumY.count do ( ob2 = copy objArray1[b] addModifier ob2 (sliceModifier name:"cutPlane1" slice_type:3) if (c+1 <= planeSumY.count) do (ob2.cutPlane1.slice_plane.transform = planeSumY[c+1]) addModifier ob2 (sliceModifier name:"cutPlane2" slice_type:2) ob2.cutPlane2.slice_plane.transform = planeSumY[c] addModifier ob2 (cap_holes()) convertToMesh ob2 join objArray2 #(ob2) ) addModifier objArray1[b] (sliceModifier name:"cutPlane3" slice_type:3) objArray1[b].cutPlane3.slice_plane.transform = planeSumY[1] addModifier objArray1[b] (cap_holes()) convertToMesh objArray1[b] join objArray2 #(objArray1[b]) ) -- cut objects in y direction --objArray3 = #() for i = 1 to objArray2.count do ( for j = 1 to planeSumZ.count do ( ob3 = copy objArray2[i] addModifier ob3 (sliceModifier name:"cutPlane1" slice_type:2) ob3.cutPlane1.slice_plane.transform = planeSumZ[j] addModifier ob3 (sliceModifier name:"cutPlane2" slice_type:3) if (j-1 > 0) do (ob3.cutPlane2.slice_plane.transform = planeSumZ[j-1]) addModifier ob3 (cap_holes()) convertToMesh ob3 ob3.pivot = ob3.center --join objArray3 #(ob3) ) addModifier objArray2[i] (sliceModifier name:"cutPlane3" slice_type:3) objArray2[i].cutPlane3.slice_plane.transform = planeSumZ[planeSumZ.count] addModifier objArray2[i] (cap_holes()) convertToMesh objArray2[i] objArray2[i].pivot = objArray2[i].center --join objArray3 #(objArray2[i]) ) -- clear variables and clean script cache objArray1 = #() objArray2 = #() --objArray3 = #() enableSceneRedraw() CompleteRedraw() gc() ) else ( messageBox "Please select one object first!" ) ) -- fn end process orgObj |
Im Script die Länge der Würfelseite angeben (PlaneDistance), Objekt auswählen und Script ausführen.