LuxCoreRender / BlendLuxCore

Blender Integration for LuxCore
GNU General Public License v3.0
735 stars 92 forks source link

Allow Blender text files as IES files #34

Closed Theverat closed 6 years ago

Theverat commented 6 years ago

This would make IES file usage more portable (e.g. you could pack them in the .blend if you want to distribute it later - good for example scenes). Maybe we would need to add support for inlined text to the IES socket of LuxCore lights for this to work. Or we always save the text to a temp file on export.

Dade916 commented 6 years ago

LuxCore already support mesh and image maps inlining. For instance, you can find the code for writing an inlined image map here: https://github.com/LuxCoreRender/LuxCore/blob/2a869ba1728a3c6b24dba7823d6a3a2512ea3e0f/src/slg/imagemap/imagemap.cpp#L1063

Properties have a full support for storing "Blobs" so you can already store any data (i.e. an IES text definition) in a property: https://github.com/LuxCoreRender/LuxCore/blob/2a869ba1728a3c6b24dba7823d6a3a2512ea3e0f/samples/pyluxcoredemo/pyluxcoredemo.py#L77

I'm going to extend the light source ".iesfile" to support a string (i.e. a file name) and a Blob too.

Dade916 commented 6 years ago

I have added the support for .iesblob to use in place of .iesfile for light sources. For instance: https://github.com/LuxCoreRender/LuxCore/blob/master/scenes/bigmonkey/bigmonkey-mappointlight-blob.scn

Theverat commented 6 years ago

Ok cool. How do I convert a text file into this SUVTTkE6TE0tNjMtMjAwMg0... stuff in python?

Dade916 commented 6 years ago

It is done by pyluxcore.Property for you (anyway it is a base64 encoded data). For instance:

david@i7-3930k:~/projects/luxcorerender/LuxCore/lib$ python3
Python 3.4.3 (default, Nov 28 2017, 16:41:13) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyluxcore
>>> pyluxcore.Init()
>>> from array import array
>>> txt = "bla bla bla"
>>> txtData = txt.encode("ascii")
>>> txtData
b'bla bla bla'
>>> prop = pyluxcore.Property("scene.l1.iesblob", [txtData])
>>> prop.ToString()
'scene.l1.iesblob = {[YmxhIGJsYSBibGE]}'
>>> 
Theverat commented 6 years ago

Hm, I'm getting RuntimeError: MapPoint light source (scene.lights.PointLAMPPOINT) is missing mapfile or iesfile property

These are the generated properties for the light:

scene.lights.PointLAMPPOINT.gain = 1 1 1
scene.lights.PointLAMPPOINT.samples = -1
scene.lights.PointLAMPPOINT.importance = 1
scene.lights.PointLAMPPOINT.type = "mappoint"
scene.lights.PointLAMPPOINT.flipz = 0
scene.lights.PointLAMPPOINT.iesblob = {[SUVTTkE6ClRJTFQ9Tk9ORQoxIDg1My4wMCAxIDkxIDEgMSAyIC0wLjA5MCAwLjAwMCAwLjAwMAoxLjAgMS4wIDc1LjAwCgowLjAwIDEuMDAgMi4wMCAzLjAwIDQuMDAgNS4wMCA2LjAwIDcuMDAgOC4wMCA5LjAwIAoxMC4wMCAxMS4wMCAxMi4wMCAxMy4wMCAxNC4wMCAxNS4wMCAxNi4wMCAxNy4wMCAxOC4wMCAxOS4wMCAKMjAuMDAgMjEuMDAgMjIuMDAgMjMuMDAgMjQuMDAgMjUuMDAgMjYuMDAgMjcuMDAgMjguMDAgMjkuMDAgCjMwLjAwIDMxLjAwIDMyLjAwIDMzLjAwIDM0LjAwIDM1LjAwIDM2LjAwIDM3LjAwIDM4LjAwIDM5LjAwIAo0MC4wMCA0MS4wMCA0Mi4wMCA0My4wMCA0NC4wMCA0NS4wMCA0Ni4wMCA0Ny4wMCA0OC4wMCA0OS4wMCAKNTAuMDAgNTEuMDAgNTIuMDAgNTMuMDAgNTQuMDAgNTUuMDAgNTYuMDAgNTcuMDAgNTguMDAgNTkuMDAgCjYwLjAwIDYxLjAwIDYyLjAwIDYzLjAwIDY0LjAwIDY1LjAwIDY2LjAwIDY3LjAwIDY4LjAwIDY5LjAwIAo3MC4wMCA3MS4wMCA3Mi4wMCA3My4wMCA3NC4wMCA3NS4wMCA3Ni4wMCA3Ny4wMCA3OC4wMCA3OS4wMCAKODAuMDAgODEuMDAgODIuMDAgODMuMDAgODQuMDAgODUuMDAgODYuMDAgODcuMDAgODguMDAgODkuMDAgCjkwLjAwIAowLjAwCiAxLjQ1NjgxNDI5MjkyNjk1RSswMDEwICA2Ljk4ODIwMTI5MDkwNjQ4RSswMDA5ICAyLjExMDA1NDY0MzUzOTUyRSswMDA5ICAzLjIwNjAzNjI2NjI3MjQ5RSswMDA4ICAxLjkwMzk3MzM2NDk3OTgwRSswMDA3IAogNC40OTQ5OTY0MjkwNDYzM0UrMDAwNSAgNy45NDYxNjkyOTEzMDY0N0UrMDAwMyAgMi42MDcwMjY3OTU5MTI0NUUrMDAwMiAgMi40NDc3MDE1ODQ0NTQzNUUrMDAwMSAgNS45NDIwMTkzMjgzMzExMkUrMDAwMCAKIDIuODI3MjY5NDM1NzUyOTZFKzAwMDAgIDIuMDM0MjAzNzI0NDgzOThFKzAwMDAgIDEuNzk0MjE0Njk2MTE3NjNFKzAwMDAgIDEuNzE5MzI5NDIyNTg3OTZFKzAwMDAgIDEuNzIyMDE2MjkxMzIzNThFKzAwMDAgCiAxLjc4NjM0MjA4NTcyODM4RSswMDAwICAxLjg4ODM2ODc2NTkxMDY2RSswMDAwICAxLjk5MjUxOTU3MzE1NzYyRSswMDAwICAyLjA4MzU4NTAxODQ2NTA5RSswMDAwICAyLjE1NjIzNDM4NTUxMTM5RSswMDAwIAogMi4xOTA0MzM2Mjg1NzM2M0UrMDAwMCAgMi4xOTA4NTg5NjM4MTczNkUrMDAwMCAgMi4yMDc1ODYxODYxODAwN0UrMDAwMCAgMi4zMDQwNzMwNzg1MDE4OUUrMDAwMCAgMi41ODI3MjIyNzE4OTkzN0UrMDAwMCAKIDMuMjMxNTcyMjA0ODg3NjdFKzAwMDAgIDQuNTY2MDM0MDY5OTQ4MTNFKzAwMDAgIDYuODc2MzUzMTg3MTEyNDNFKzAwMDAgIDkuNjcwMzkzMjI4MDAxODRFKzAwMDAgIDEuMTY2MjA3MzEwNDk3NjhFKzAwMDEgCiAxLjI2NTU4MjI1OTM4NzA1RSswMDAxICAxLjMzMTEzMzkzODEyODM3RSswMDAxICAxLjQwMjM5NDgyMjg4OTAyRSswMDAxICAxLjQ4MDI5NzI3NDg4NTU4RSswMDAxICAxLjU0NTcyODIyMzA0NjQ2RSswMDAxIAogMS41ODEwNzAwMzU0NTU2OEUrMDAwMSAgMS41ODA2MzcxNTYzNjU1MUUrMDAwMSAgMS41NDM5NDExMTM0NjkwNkUrMDAwMSAgMS40MzY4MDA1MzUwMTMwN0UrMDAwMSAgMS4xOTcwNDg4NDI0MzUzOEUrMDAwMSAKIDkuMDA4MzQ1NDEwNjU5MjNFKzAwMDAgIDYuNzQ2ODU5OTQ2NTc4NDBFKzAwMDAgIDUuNTY4ODk2NTcyMzQ3NjBFKzAwMDAgIDUuODA1NTczOTI3MTczMDBFKzAwMDAgIDkuMDEzNTU0NTQ1MTM5MDNFKzAwMDAgCiAyLjM0NzU0NDAwNjIxMTUyRSswMDAxICAxLjA1MTE0NzM5NDgwNTg5RSswMDAyICA2LjExNTY1NDg2MjQzNTcwRSswMDAyICAxLjU4Nzk4NTg5NTczMDYyRSswMDAzICA3LjgxOTc3MjM1NjAzNjU4RSswMDAyIAogMS42NDgwNzE4OTE0MDA1NUUrMDAwMiAgNC4xODEwODAyNjM4NDEwOEUrMDAwMSAgMS42NjA1NDc4NDM1OTc1M0UrMDAwMSAgMS4wMjIyMDMzMjE1ODgzNUUrMDAwMSAgOS4xODc5MDA1MDQ4NjQwOUUrMDAwMCAKIDEuMTAyOTM0MjcyMzEzODZFKzAwMDEgIDEuNTc0NTEwNjYzODEwNzVFKzAwMDEgIDIuMzA3MDUwMjI2OTg1NzlFKzAwMDEgIDMuMDAwNzU5ODcyNDc4MzVFKzAwMDEgIDMuMzI4OTE0MzQzNzEyMjJFKzAwMDEgCiAzLjM3OTU3Mjc5OTE2Mjc5RSswMDAxICAzLjIxODI5OTU5MzEwODA2RSswMDAxICAyLjc1MDQ4ODI2NzkyODU1RSswMDAxICAyLjA1MDEyMjcyNzgzMzU1RSswMDAxICAxLjM5NTc3MTc5NTY3MTI0RSswMDAxIAogMS4wNDQzNDE2Nzg2NTE3NUUrMDAwMSAgMS4wNTE2OTAwODY5MzcyNkUrMDAwMSAgMS4zMTYwMzA2NDU4NDc3MUUrMDAwMSAgMS42Mzg2NDkwNTIwNjcyNEUrMDAwMSAgMS43MzI5NDI5MTgwNjk2OEUrMDAwMSAKIDEuNDA4NzYyMzQ5Mzg3MzNFKzAwMDEgIDguOTcyOTEyNzUwMjEwMjBFKzAwMDAgIDUuOTcwNTM1MDY4ODk4NDFFKzAwMDAgIDUuMzkwNjEzMTMxMTM2NzdFKzAwMDAgIDUuNDg5MzIzNzA2Mjg4NDBFKzAwMDAgCiA1LjA2MTA5NDE4NjQ3MTA2RSswMDAwICA0LjMzMzI0OTI3Njk4NjcwRSswMDAwICAzLjc2NTMwNDM5MDIzMzUyRSswMDAwICAzLjQ2MTQzMDk2MzQ4NDA2RSswMDAwICAzLjM2MjM4ODM2NTkxNDAzRSswMDAwIAogMy40MDY3NTczOTk2MDcwM0UrMDAwMCAgMy41NDg0Njk2NjkwMDgyN0UrMDAwMCAgMy43MzU3NDIwMTU5MDE2NEUrMDAwMCAgMy45MjU3Mjc1NDI2Nzc4OEUrMDAwMCAgNC4xMDIxNzM1Mzk2MDk1NkUrMDAwMCAKIDQuMjQ4MzgyNDQ0NzMwNTNFKzAwMDAgIDQuMzIwODgzNzc3MjU0ODdFKzAwMDAgIDQuMzE4NzY2MjIwOTEwMDdFKzAwMDAgIDQuMzAzMTUxMDY0NzkxOTBFKzAwMDAgIDMuOTkwNTg0OTI5NDgyODFFKzAwMDAgCiAzLjE4OTkzNjI4MjUyNDMxRSswMDAwIAo]}
scene.lights.PointLAMPPOINT.efficency = 0
scene.lights.PointLAMPPOINT.power = 0
scene.lights.PointLAMPPOINT.position = 0 0 0
scene.lights.PointLAMPPOINT.transformation = 1 0 0 0 0 1 0 0 0 0 1 0 -1.3458638191223145 0.87127572298049927 0.21273468434810638 1

This is the IES file I tested (it works if I specify it as filepath): Test1.txt

Dade916 commented 6 years ago

Are you sure to use the latest version of LuxCore ? This would happen if you were using a version without .iesblob support.

Theverat commented 6 years ago

Damn I'm an idiot. It works now, thanks.