[Bf-extensions-cvs] [dac60f2] master: Update Cloud Gen: T48116 Depreciate Particles, Cycles Support
meta-androcto
noreply at git.blender.org
Tue Apr 19 04:52:52 CEST 2016
Commit: dac60f2a946e43a83e083e863617f238632abb13
Author: meta-androcto
Date: Tue Apr 19 12:52:04 2016 +1000
Branches: master
https://developer.blender.org/rBAdac60f2a946e43a83e083e863617f238632abb13
Update Cloud Gen: T48116 Depreciate Particles, Cycles Support
===================================================================
M object_cloud_gen.py
===================================================================
diff --git a/object_cloud_gen.py b/object_cloud_gen.py
index 7d56f98..84c9379 100644
--- a/object_cloud_gen.py
+++ b/object_cloud_gen.py
@@ -22,11 +22,12 @@ bl_info = {
"name": "Cloud Generator",
"author": "Nick Keeline(nrk)",
"version": (1, 0),
- "blender": (2, 75, 0),
- "location": "Blender Render: Tool Shelf > Create Tab",
+ "blender": (2, 77, 0),
+ "location": "Tool Shelf > Create Tab",
"description": "Creates Volumetric Clouds",
"wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/"
"Scripts/Object/Cloud_Gen",
+ "tracker_url" : "https://developer.blender.org/maniphest/project/3/type/Bug/",
"category": "Object",
}
@@ -34,6 +35,145 @@ import bpy
from bpy.props import BoolProperty, EnumProperty
from bpy.types import Operator, Panel
+# For Cycles Render we create node groups or if it already exists we return it.
+def CreateNodeGroup(Type):
+
+# Look for NodeTree if it already exists return it
+
+ CreateGroup = True
+ for Group in bpy.data.node_groups:
+ if Group.name == Type:
+ CreateGroup = False
+ NodeGroup = Group
+
+ if CreateGroup == True:
+ NodeGroup = bpy.data.node_groups.new(name=Type,type="ShaderNodeTree")
+ NodeGroup.name = Type
+ NodeGroup.bl_label = Type
+ NodeGroup.nodes.clear()
+
+# Create a bunch of nodes and group them based on input to the def
+# Function type
+ if Type == 'CloudGen_VolumeProperties':
+ AddAddAndEmission = NodeGroup.nodes.new('ShaderNodeAddShader')
+ AddAddAndEmission.location = [300,395]
+ AddAbsorptionAndScatter = NodeGroup.nodes.new('ShaderNodeAddShader')
+ AddAbsorptionAndScatter.location = [0,395]
+ VolumeAbsorption = NodeGroup.nodes.new('ShaderNodeVolumeAbsorption')
+ VolumeAbsorption.location = [-300,395]
+ VolumeScatter = NodeGroup.nodes.new('ShaderNodeVolumeScatter')
+ VolumeScatter.location = [-300,0]
+ VolumeEmission = NodeGroup.nodes.new('ShaderNodeEmission')
+ VolumeEmission.location = [-300,-300]
+ MathAbsorptionMultiply = NodeGroup.nodes.new('ShaderNodeMath')
+ MathAbsorptionMultiply.location = [-750,395]
+ MathAbsorptionMultiply.operation = 'MULTIPLY'
+ MathScatterMultiply = NodeGroup.nodes.new('ShaderNodeMath')
+ MathScatterMultiply.location = [-750,0]
+ MathScatterMultiply.operation = 'MULTIPLY'
+ MathEmissionMultiply = NodeGroup.nodes.new('ShaderNodeMath')
+ MathEmissionMultiply.location = [-750,-300]
+ MathEmissionMultiply.operation = 'MULTIPLY'
+ MathBrightnessMultiply = NodeGroup.nodes.new('ShaderNodeMath')
+ MathBrightnessMultiply.location = [-1200,0]
+ MathBrightnessMultiply.operation = 'MULTIPLY'
+ MathGreaterThan = NodeGroup.nodes.new('ShaderNodeMath')
+ MathGreaterThan.location = [-1200,600]
+ MathGreaterThan.operation = 'GREATER_THAN'
+ MathGreaterThan.inputs[1].default_value = 0
+
+ NodeGroup.links.new(AddAddAndEmission.inputs[0],AddAbsorptionAndScatter.outputs[0])
+ NodeGroup.links.new(AddAddAndEmission.inputs[1],VolumeEmission.outputs[0])
+ NodeGroup.links.new(AddAbsorptionAndScatter.inputs[0],VolumeAbsorption.outputs[0])
+ NodeGroup.links.new(AddAbsorptionAndScatter.inputs[1],VolumeScatter.outputs[0])
+ NodeGroup.links.new(VolumeAbsorption.inputs[1],MathAbsorptionMultiply.outputs[0])
+ NodeGroup.links.new(VolumeScatter.inputs[1],MathScatterMultiply.outputs[0])
+ NodeGroup.links.new(VolumeEmission.inputs[1],MathEmissionMultiply.outputs[0])
+ NodeGroup.links.new(MathAbsorptionMultiply.inputs[0],MathGreaterThan.outputs[0])
+ NodeGroup.links.new(MathScatterMultiply.inputs[0],MathGreaterThan.outputs[0])
+ NodeGroup.links.new(MathEmissionMultiply.inputs[0],MathGreaterThan.outputs[0])
+ NodeGroup.links.new(VolumeAbsorption.inputs[0],MathBrightnessMultiply.outputs[0])
+
+# Create and Link In/Out to Group Node
+# Outputs
+ group_outputs = NodeGroup.nodes.new('NodeGroupOutput')
+ group_outputs.location = (600,395)
+ NodeGroup.outputs.new('NodeSocketShader','shader_out')
+ NodeGroup.links.new(AddAddAndEmission.outputs[0],group_outputs.inputs['shader_out'])
+
+# Inputs
+ group_inputs = NodeGroup.nodes.new('NodeGroupInput')
+ group_inputs.location = (-1500,-300)
+ NodeGroup.inputs.new('NodeSocketFloat','Density')
+ NodeGroup.inputs.new('NodeSocketFloat','Absorption Multiply')
+ NodeGroup.inputs.new('NodeSocketColor','Absorption Color')
+ NodeGroup.inputs.new('NodeSocketFloat','Scatter Multiply')
+ NodeGroup.inputs.new('NodeSocketColor','Scatter Color')
+ NodeGroup.inputs.new('NodeSocketFloat','Emission Amount')
+ NodeGroup.inputs.new('NodeSocketFloat','Cloud Brightness')
+
+ NodeGroup.links.new(group_inputs.outputs['Density'],MathGreaterThan.inputs[0])
+ NodeGroup.links.new(group_inputs.outputs['Absorption Multiply'],MathAbsorptionMultiply.inputs[1])
+ NodeGroup.links.new(group_inputs.outputs['Absorption Color'],MathBrightnessMultiply.inputs[0])
+ NodeGroup.links.new(group_inputs.outputs['Scatter Multiply'],MathScatterMultiply.inputs[1])
+ NodeGroup.links.new(group_inputs.outputs['Scatter Color'],VolumeScatter.inputs[0])
+ NodeGroup.links.new(group_inputs.outputs['Emission Amount'],MathEmissionMultiply.inputs[1])
+ NodeGroup.links.new(group_inputs.outputs['Cloud Brightness'],MathBrightnessMultiply.inputs[1])
+
+
+ if Type == 'CloudGen_TextureProperties':
+ MathAdd = NodeGroup.nodes.new('ShaderNodeMath')
+ MathAdd.location = [-200,0]
+ MathAdd.operation = 'ADD'
+ MathDensityMultiply = NodeGroup.nodes.new('ShaderNodeMath')
+ MathDensityMultiply.location = [-390,0]
+ MathDensityMultiply.operation = 'MULTIPLY'
+ PointDensityRamp = NodeGroup.nodes.new('ShaderNodeValToRGB')
+ PointDensityRamp.location = [-675,-250]
+ PointRamp = PointDensityRamp.color_ramp
+ PElements = PointRamp.elements
+ PElements[0].position = 0.418
+ PElements[0].color = 0, 0, 0, 1
+ PElements[1].position = 0.773
+ PElements[1].color = 1, 1, 1, 1
+ CloudRamp = NodeGroup.nodes.new('ShaderNodeValToRGB')
+ CloudRamp.location = [-675,0]
+ CRamp = CloudRamp.color_ramp
+ CElements = CRamp.elements
+ CElements[0].position = 0.527
+ CElements[0].color = 0, 0, 0, 1
+ CElements[1].position = 0.759
+ CElements[1].color = 1, 1, 1, 1
+ NoiseTex = NodeGroup.nodes.new('ShaderNodeTexNoise')
+ NoiseTex.location = [-940,0]
+ NoiseTex.inputs['Detail'].default_value = 4
+ TexCoord = NodeGroup.nodes.new('ShaderNodeTexCoord')
+ TexCoord.location = [-1250,0]
+
+
+ NodeGroup.links.new(MathAdd.inputs[0],MathDensityMultiply.outputs[0])
+ NodeGroup.links.new(MathAdd.inputs[1],PointDensityRamp.outputs[0])
+ NodeGroup.links.new(MathDensityMultiply.inputs[0],CloudRamp.outputs[0])
+ NodeGroup.links.new(CloudRamp.inputs[0],NoiseTex.outputs[0])
+ NodeGroup.links.new(NoiseTex.inputs[0],TexCoord.outputs[3])
+
+# Create and Link In/Out to Group Nodes
+# Outputs
+ group_outputs = NodeGroup.nodes.new('NodeGroupOutput')
+ group_outputs.location = (0,0)
+ NodeGroup.outputs.new('NodeSocketFloat','Density W_CloudTex')
+ NodeGroup.links.new(MathAdd.outputs[0],group_outputs.inputs['Density W_CloudTex'])
+
+# Inputs
+ group_inputs = NodeGroup.nodes.new('NodeGroupInput')
+ group_inputs.location = (-1250,-300)
+ NodeGroup.inputs.new('NodeSocketFloat','Scale')
+ NodeGroup.inputs.new('NodeSocketFloat','Point Density In')
+ NodeGroup.links.new(group_inputs.outputs['Scale'],NoiseTex.inputs['Scale'])
+ NodeGroup.links.new(group_inputs.outputs['Point Density In'],MathDensityMultiply.inputs[1])
+ NodeGroup.links.new(group_inputs.outputs['Point Density In'],PointDensityRamp.inputs[0])
+
+ return NodeGroup
# This routine takes an object and deletes all of the geometry in it
# and adds a bounding box to it.
@@ -306,43 +446,38 @@ class VIEW3D_PT_tools_cloud(Panel):
bl_options = {'DEFAULT_CLOSED'}
def draw(self, context):
- if context.scene.render.engine == "BLENDER_RENDER":
- active_obj = context.active_object
- layout = self.layout
- col = layout.column(align=True)
+ active_obj = context.active_object
+ layout = self.layout
+ col = layout.column(align=True)
- WhatToDo = getActionToDo(active_obj)
+ WhatToDo = getActionToDo(active_obj)
+
+ if WhatToDo == 'DEGENERATE':
+ col.operator("cloud.generate_cloud", text="DeGenerate")
- if WhatToDo == 'DEGENERATE':
- col.operator("cloud.generate_cloud", text="DeGenerate")
+ elif WhatToDo == 'CLOUD_CONVERT_TO_MESH':
+ col.operator("cloud.generate_cloud", text="Convert to Mesh")
- elif WhatToDo == 'CLOUD_CONVERT_TO_MESH':
- col.operator("cloud.generate_cloud", text="Convert to Mesh")
+ elif WhatToDo == 'NO_SELECTION_DO_NOTHING':
+ col.label(text="Select one or more")
+ col.label(text="objects to generate")
+ col.label(text="a cloud")
- elif WhatToDo == 'NO_SELECTION_DO_NOTHING':
- col.label(text="Select one or more")
- col.label(text="
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list