merge upstream
This commit is contained in:
		@ -1,26 +1,12 @@
 | 
				
			|||||||
package leenkx.logicnode;
 | 
					package leenkx.logicnode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import iron.object.Object;
 | 
					 | 
				
			||||||
import iron.math.Vec4;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class GetWorldNode extends LogicNode {
 | 
					class GetWorldNode extends LogicNode {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public var property0: String;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	public function new(tree: LogicTree) {
 | 
						public function new(tree: LogicTree) {
 | 
				
			||||||
		super(tree);
 | 
							super(tree);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	override function get(from: Int): Dynamic {
 | 
						override function get(from: Int): Dynamic {
 | 
				
			||||||
		var object: Object = inputs[0].get();
 | 
							return iron.Scene.active.raw.world_ref;
 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (object == null) return null;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return switch (property0) {
 | 
					 | 
				
			||||||
			case "Right": object.transform.world.right();
 | 
					 | 
				
			||||||
			case "Look": object.transform.world.look();
 | 
					 | 
				
			||||||
			case "Up": object.transform.world.up();
 | 
					 | 
				
			||||||
			default: null;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
							
								
								
									
										26
									
								
								leenkx/Sources/leenkx/logicnode/GetWorldOrientationNode.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								leenkx/Sources/leenkx/logicnode/GetWorldOrientationNode.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					package leenkx.logicnode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import iron.object.Object;
 | 
				
			||||||
 | 
					import iron.math.Vec4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class GetWorldNode extends LogicNode {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public var property0: String;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function new(tree: LogicTree) {
 | 
				
			||||||
 | 
							super(tree);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						override function get(from: Int): Dynamic {
 | 
				
			||||||
 | 
							var object: Object = inputs[0].get();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (object == null) return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return switch (property0) {
 | 
				
			||||||
 | 
								case "Right": object.transform.world.right();
 | 
				
			||||||
 | 
								case "Look": object.transform.world.look();
 | 
				
			||||||
 | 
								case "Up": object.transform.world.up();
 | 
				
			||||||
 | 
								default: null;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										16
									
								
								leenkx/Sources/leenkx/logicnode/ResolutionGetNode.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								leenkx/Sources/leenkx/logicnode/ResolutionGetNode.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					package leenkx.logicnode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ResolutionGetNode extends LogicNode {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function new(tree:LogicTree) {
 | 
				
			||||||
 | 
							super(tree);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						override function get(from:Int):Dynamic {
 | 
				
			||||||
 | 
							return switch (from) {
 | 
				
			||||||
 | 
								case 0: leenkx.renderpath.Postprocess.resolution_uniforms[0];
 | 
				
			||||||
 | 
								case 1: leenkx.renderpath.Postprocess.resolution_uniforms[1];
 | 
				
			||||||
 | 
								default: 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										33
									
								
								leenkx/Sources/leenkx/logicnode/ResolutionSetNode.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								leenkx/Sources/leenkx/logicnode/ResolutionSetNode.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					package leenkx.logicnode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import kha.graphics4.TextureFilter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ResolutionSetNode extends LogicNode {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function new(tree:LogicTree) {
 | 
				
			||||||
 | 
							super(tree);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						override function run(from:Int) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							var size: Int = inputs[1].get();
 | 
				
			||||||
 | 
							var filter: Int = inputs[2].get();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						#if rp_resolution_filter 
 | 
				
			||||||
 | 
							if (filter == 0)
 | 
				
			||||||
 | 
								iron.object.Uniforms.defaultFilter = TextureFilter.LinearFilter;
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								iron.object.Uniforms.defaultFilter = TextureFilter.PointFilter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							leenkx.renderpath.Postprocess.resolution_uniforms[0] = size;
 | 
				
			||||||
 | 
							leenkx.renderpath.Postprocess.resolution_uniforms[1] = filter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							var npath = leenkx.renderpath.RenderPathCreator.get();
 | 
				
			||||||
 | 
							var world = iron.Scene.active.raw.world_ref;
 | 
				
			||||||
 | 
							npath.loadShader("shader_datas/World_" + world + "/World_" + world);
 | 
				
			||||||
 | 
							iron.RenderPath.setActive(npath);
 | 
				
			||||||
 | 
					    #end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							runOutput(0);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,55 @@
 | 
				
			|||||||
 | 
					package leenkx.logicnode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import iron.object.MeshObject;
 | 
				
			||||||
 | 
					import iron.data.MaterialData;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SetMaterialTextureFilterNode extends LogicNode {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function new(tree: LogicTree) {
 | 
				
			||||||
 | 
							super(tree);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						override function run(from: Int) {
 | 
				
			||||||
 | 
							var object: MeshObject = inputs[1].get();
 | 
				
			||||||
 | 
							var mat: MaterialData = inputs[2].get();
 | 
				
			||||||
 | 
							var slot: Int = inputs[3].get();
 | 
				
			||||||
 | 
							var name: String = inputs[4].get();
 | 
				
			||||||
 | 
							var filter: Int = inputs[5].get();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (object == null) return;
 | 
				
			||||||
 | 
							if (slot >= object.materials.length) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							var mo = cast(object, iron.object.MeshObject);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for (i => node in mo.materials[slot].contexts[0].raw.bind_textures)
 | 
				
			||||||
 | 
								if (node.name == name){
 | 
				
			||||||
 | 
									var moImgt = mo.materials[slot].contexts[0].raw.bind_textures[i];
 | 
				
			||||||
 | 
									switch(filter){
 | 
				
			||||||
 | 
										case 0: //Linear
 | 
				
			||||||
 | 
											moImgt.min_filter = null;
 | 
				
			||||||
 | 
											moImgt.mag_filter = null;
 | 
				
			||||||
 | 
											moImgt.mipmap_filter = null;
 | 
				
			||||||
 | 
											moImgt.generate_mipmaps = null;
 | 
				
			||||||
 | 
										case 1: //Closest
 | 
				
			||||||
 | 
											moImgt.min_filter = 'point';
 | 
				
			||||||
 | 
											moImgt.mag_filter = 'point';
 | 
				
			||||||
 | 
											moImgt.mipmap_filter = null;
 | 
				
			||||||
 | 
											moImgt.generate_mipmaps = null;
 | 
				
			||||||
 | 
										case 2: //Cubic
 | 
				
			||||||
 | 
											moImgt.min_filter = null;
 | 
				
			||||||
 | 
											moImgt.mag_filter = null;
 | 
				
			||||||
 | 
											moImgt.mipmap_filter = 'linear';
 | 
				
			||||||
 | 
											moImgt.generate_mipmaps = true;
 | 
				
			||||||
 | 
										case 3: //Smart
 | 
				
			||||||
 | 
											moImgt.min_filter = 'anisotropic';
 | 
				
			||||||
 | 
											moImgt.mag_filter = null;
 | 
				
			||||||
 | 
											moImgt.mipmap_filter = 'linear';
 | 
				
			||||||
 | 
											moImgt.generate_mipmaps = true;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							runOutput(0);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										40
									
								
								leenkx/Sources/leenkx/logicnode/SetWorldNode.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								leenkx/Sources/leenkx/logicnode/SetWorldNode.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,40 @@
 | 
				
			|||||||
 | 
					package leenkx.logicnode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SetWorldNode extends LogicNode {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public function new(tree: LogicTree) {
 | 
				
			||||||
 | 
							super(tree);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						override function run(from: Int) {
 | 
				
			||||||
 | 
							var world: String = inputs[1].get();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (world != null){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								//check if world shader data exists
 | 
				
			||||||
 | 
								var file: String = 'World_'+world+'_data';
 | 
				
			||||||
 | 
								#if lnx_json
 | 
				
			||||||
 | 
									file += ".json";
 | 
				
			||||||
 | 
								#elseif lnx_compress
 | 
				
			||||||
 | 
									file += ".lz4";
 | 
				
			||||||
 | 
								#else
 | 
				
			||||||
 | 
									file += '.lnx';
 | 
				
			||||||
 | 
								#end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								var exists: Bool = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								iron.data.Data.getBlob(file, function(b: kha.Blob) {
 | 
				
			||||||
 | 
									if (b != null) exists = true;
 | 
				
			||||||
 | 
								});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								assert(Error, exists == true, "World must be either associated to a scene or have fake user");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								iron.Scene.active.raw.world_ref = world;
 | 
				
			||||||
 | 
								var npath = leenkx.renderpath.RenderPathCreator.get();
 | 
				
			||||||
 | 
								npath.loadShader("shader_datas/World_" + world + "/World_" + world);
 | 
				
			||||||
 | 
								iron.RenderPath.setActive(npath);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							runOutput(0);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -780,7 +780,11 @@ class Inc {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	public static inline function getDisplayp(): Null<Int> {
 | 
						public static inline function getDisplayp(): Null<Int> {
 | 
				
			||||||
		#if rp_resolution_filter // Custom resolution set
 | 
							#if rp_resolution_filter // Custom resolution set
 | 
				
			||||||
 | 
							#if rp_pp
 | 
				
			||||||
 | 
							return leenkx.renderpath.Postprocess.resolution_uniforms[0];
 | 
				
			||||||
 | 
							#else
 | 
				
			||||||
		return Main.resolutionSize;
 | 
							return Main.resolutionSize;
 | 
				
			||||||
 | 
							#end
 | 
				
			||||||
		#else
 | 
							#else
 | 
				
			||||||
		return null;
 | 
							return null;
 | 
				
			||||||
		#end
 | 
							#end
 | 
				
			||||||
 | 
				
			|||||||
@ -133,6 +133,11 @@ class Postprocess {
 | 
				
			|||||||
		[50.0]				//2: Volumetric Fog Amount B
 | 
							[50.0]				//2: Volumetric Fog Amount B
 | 
				
			||||||
	];
 | 
						];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public static var resolution_uniforms = [
 | 
				
			||||||
 | 
							720,				//0: Size
 | 
				
			||||||
 | 
							0					//1: Filter
 | 
				
			||||||
 | 
						];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public static function vec3Link(object: Object, mat: MaterialData, link: String): iron.math.Vec4 {
 | 
						public static function vec3Link(object: Object, mat: MaterialData, link: String): iron.math.Vec4 {
 | 
				
			||||||
		var v:Vec4 = null;
 | 
							var v:Vec4 = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					from lnx.logicnode.lnx_nodes import *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SetMaterialTextureFilterNode(LnxLogicTreeNode):
 | 
				
			||||||
 | 
					    """Sets texture filter interpolation."""
 | 
				
			||||||
 | 
					    bl_idname = 'LNSetMaterialTextureFilterNode'
 | 
				
			||||||
 | 
					    bl_label = 'Set Object Material Texture Filter'
 | 
				
			||||||
 | 
					    lnx_version = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def lnx_init(self, context):
 | 
				
			||||||
 | 
					        self.add_input('LnxNodeSocketAction', 'In')
 | 
				
			||||||
 | 
					        self.add_input('LnxNodeSocketObject', 'Object')
 | 
				
			||||||
 | 
					        self.add_input('LnxDynamicSocket', 'Material')
 | 
				
			||||||
 | 
					        self.add_input('LnxIntSocket', 'Slot')
 | 
				
			||||||
 | 
					        self.add_input('LnxStringSocket', 'Node')
 | 
				
			||||||
 | 
					        self.add_input('LnxIntSocket', 'Texture Filter')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.add_output('LnxNodeSocketAction', 'Out')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def draw_buttons(self, context, layout):
 | 
				
			||||||
 | 
					        layout.label(text='Tex Filter 0: Linear')
 | 
				
			||||||
 | 
					        layout.label(text='Tex Filter 1: Closest')
 | 
				
			||||||
 | 
					        layout.label(text='Tex Filter 2: Cubic')
 | 
				
			||||||
 | 
					        layout.label(text='Tex Filter 3: Smart')
 | 
				
			||||||
@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					from lnx.logicnode.lnx_nodes import *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ResolutionGetNode(LnxLogicTreeNode):
 | 
				
			||||||
 | 
					    """Returns the resolution parameters.
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    bl_idname = 'LNResolutionGetNode'
 | 
				
			||||||
 | 
					    bl_label = 'Get Resolution Settings'
 | 
				
			||||||
 | 
					    lnx_version = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def lnx_init(self, context):
 | 
				
			||||||
 | 
					        self.add_output('LnxIntSocket', 'Size')
 | 
				
			||||||
 | 
					        self.add_output('LnxIntSocket', 'Filter')
 | 
				
			||||||
@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					from lnx.logicnode.lnx_nodes import *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ResolutionSetNode(LnxLogicTreeNode):
 | 
				
			||||||
 | 
					    """Set the resolution post-processing settings.
 | 
				
			||||||
 | 
					    Filter 0: Lineal 1: Closest
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    bl_idname = 'LNResolutionSetNode'
 | 
				
			||||||
 | 
					    bl_label = 'Set Resolution Settings'
 | 
				
			||||||
 | 
					    lnx_version = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def lnx_init(self, context):
 | 
				
			||||||
 | 
					        self.add_input('LnxNodeSocketAction', 'In')
 | 
				
			||||||
 | 
					        self.add_input('LnxIntSocket', 'Size', default_value=720)
 | 
				
			||||||
 | 
					        self.add_input('LnxIntSocket', 'Filter', default_value=0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.add_output('LnxNodeSocketAction', 'Out')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def draw_buttons(self, context, layout):
 | 
				
			||||||
 | 
					        layout.label(text="Type 0: Lineal")
 | 
				
			||||||
 | 
					        layout.label(text="Type 1: Closest")
 | 
				
			||||||
@ -1,8 +1,8 @@
 | 
				
			|||||||
from lnx.logicnode.lnx_nodes import *
 | 
					from lnx.logicnode.lnx_nodes import *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class GetWorldNode(LnxLogicTreeNode):
 | 
					class GetWorldOrientationNode(LnxLogicTreeNode):
 | 
				
			||||||
    """Returns the world orientation of the given object."""
 | 
					    """Returns the world orientation of the given object."""
 | 
				
			||||||
    bl_idname = 'LNGetWorldNode'
 | 
					    bl_idname = 'LNGetWorldOrientationNode'
 | 
				
			||||||
    bl_label = 'Get World Orientation'
 | 
					    bl_label = 'Get World Orientation'
 | 
				
			||||||
    lnx_section = 'rotation'
 | 
					    lnx_section = 'rotation'
 | 
				
			||||||
    lnx_version = 1
 | 
					    lnx_version = 1
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										10
									
								
								leenkx/blender/lnx/logicnode/world/LN_get_world.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								leenkx/blender/lnx/logicnode/world/LN_get_world.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					from lnx.logicnode.lnx_nodes import *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class GetWorldNode(LnxLogicTreeNode):
 | 
				
			||||||
 | 
					    """Gets the World of the active scene."""
 | 
				
			||||||
 | 
					    bl_idname = 'LNGetWorldNode'
 | 
				
			||||||
 | 
					    bl_label = 'Get World'
 | 
				
			||||||
 | 
					    lnx_version = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def lnx_init(self, context):
 | 
				
			||||||
 | 
					        self.add_output('LnxStringSocket', 'World')
 | 
				
			||||||
							
								
								
									
										13
									
								
								leenkx/blender/lnx/logicnode/world/LN_set_world.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								leenkx/blender/lnx/logicnode/world/LN_set_world.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					from lnx.logicnode.lnx_nodes import *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SetWorldNode(LnxLogicTreeNode):
 | 
				
			||||||
 | 
					    """Sets the World of the active scene."""
 | 
				
			||||||
 | 
					    bl_idname = 'LNSetWorldNode'
 | 
				
			||||||
 | 
					    bl_label = 'Set World'
 | 
				
			||||||
 | 
					    lnx_version = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def lnx_init(self, context):
 | 
				
			||||||
 | 
					        self.add_input('LnxNodeSocketAction', 'In')
 | 
				
			||||||
 | 
					        self.add_input('LnxStringSocket', 'World')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.add_output('LnxNodeSocketAction', 'Out')
 | 
				
			||||||
@ -47,11 +47,20 @@ def build():
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    with write_probes.setup_envmap_render():
 | 
					    with write_probes.setup_envmap_render():
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for scene in bpy.data.scenes:
 | 
					        #for scene in bpy.data.scenes:
 | 
				
			||||||
            world = scene.world
 | 
					        for world in bpy.data.worlds:
 | 
				
			||||||
 | 
					            #world = scene.world
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # Only export worlds from enabled scenes and only once per world
 | 
					            assigned = False;
 | 
				
			||||||
            if scene.lnx_export and world is not None and world not in worlds:
 | 
					            for scene in bpy.data.scenes:
 | 
				
			||||||
 | 
					                if scene.lnx_export and scene.world is not None:
 | 
				
			||||||
 | 
					                    if scene.world.name == world.name:
 | 
				
			||||||
 | 
					                        assigned = True;
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            #if scene.lnx_export and world is not None and world not in worlds:
 | 
				
			||||||
 | 
					            # Only export worlds from enabled scenes and with fake users                
 | 
				
			||||||
 | 
					            if (world.use_fake_user and world.name != 'Lnx') or assigned:
 | 
				
			||||||
                worlds.append(world)
 | 
					                worlds.append(world)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                world.lnx_envtex_name = ''
 | 
					                world.lnx_envtex_name = ''
 | 
				
			||||||
 | 
				
			|||||||
@ -452,9 +452,10 @@ class LnxRPListItem(bpy.types.PropertyGroup):
 | 
				
			|||||||
    lnx_ssrs: BoolProperty(name="SSRS", description="Screen-space ray-traced shadows", default=False, update=assets.invalidate_shader_cache)
 | 
					    lnx_ssrs: BoolProperty(name="SSRS", description="Screen-space ray-traced shadows", default=False, update=assets.invalidate_shader_cache)
 | 
				
			||||||
    lnx_micro_shadowing: BoolProperty(name="Micro Shadowing", description="Use the shaders' occlusion parameter to compute micro shadowing for the scene's sun lamp. This option is not available for render paths using mobile or solid material models", default=False, update=assets.invalidate_shader_cache)
 | 
					    lnx_micro_shadowing: BoolProperty(name="Micro Shadowing", description="Use the shaders' occlusion parameter to compute micro shadowing for the scene's sun lamp. This option is not available for render paths using mobile or solid material models", default=False, update=assets.invalidate_shader_cache)
 | 
				
			||||||
    lnx_texture_filter: EnumProperty(
 | 
					    lnx_texture_filter: EnumProperty(
 | 
				
			||||||
        items=[('Anisotropic', 'Anisotropic', 'Anisotropic'),
 | 
					        items=[('Linear', 'Linear', 'Linear'),
 | 
				
			||||||
               ('Linear', 'Linear', 'Linear'),
 | 
					 | 
				
			||||||
               ('Point', 'Closest', 'Point'),
 | 
					               ('Point', 'Closest', 'Point'),
 | 
				
			||||||
 | 
					               ('Cubic', 'Cubic', 'Cubic'),
 | 
				
			||||||
 | 
					               ('Anisotropic', 'Smart', 'Anisotropic'),
 | 
				
			||||||
               ('Manual', 'Manual', 'Manual')],
 | 
					               ('Manual', 'Manual', 'Manual')],
 | 
				
			||||||
        name="Texture Filtering", description="Set Manual to honor interpolation setting on Image Texture node", default='Anisotropic')
 | 
					        name="Texture Filtering", description="Set Manual to honor interpolation setting on Image Texture node", default='Anisotropic')
 | 
				
			||||||
    lnx_material_model: EnumProperty(
 | 
					    lnx_material_model: EnumProperty(
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user