extra_objects: add rock gen: T71560
This commit is contained in:
parent
2fcb2241e9
commit
7347930a0f
|
@ -85,6 +85,9 @@ else:
|
|||
from . import Wallfactory
|
||||
from . import add_mesh_triangles
|
||||
|
||||
from .add_mesh_rocks import __init__
|
||||
from .add_mesh_rocks import rockgen
|
||||
|
||||
import bpy
|
||||
from bpy.types import Menu
|
||||
|
||||
|
@ -366,6 +369,8 @@ def register():
|
|||
for cls in classes:
|
||||
register_class(cls)
|
||||
|
||||
add_mesh_rocks.register()
|
||||
|
||||
# Add "Extras" menu to the "Add Mesh" menu and context menu.
|
||||
bpy.types.VIEW3D_MT_mesh_add.append(menu_func)
|
||||
bpy.types.VIEW3D_MT_object_context_menu.prepend(Extras_contex_menu)
|
||||
|
@ -380,5 +385,7 @@ def unregister():
|
|||
for cls in reversed(classes):
|
||||
unregister_class(cls)
|
||||
|
||||
add_mesh_rocks.unregister()
|
||||
|
||||
if __name__ == "__main__":
|
||||
register()
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
# Paul "BrikBot" Marshall
|
||||
# Created: July 1, 2011
|
||||
# Last Modified: September 26, 2013
|
||||
# Homepage (blog): http://post.darkarsenic.com/
|
||||
# //blog.darkarsenic.com/
|
||||
# Thanks to Meta-Androco, RickyBlender, Ace Dragon, and PKHG for ideas
|
||||
# and testing.
|
||||
#
|
||||
# Coded in IDLE, tested in Blender 2.68a. NumPy Recommended.
|
||||
# Search for "@todo" to quickly find sections that need work.
|
||||
#
|
||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
||||
#
|
||||
# The Blender Rock Creation tool is for rapid generation of
|
||||
# mesh rocks in Blender.
|
||||
# Copyright (C) 2011 Paul Marshall
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# ##### END GPL LICENSE BLOCK #####
|
||||
|
||||
# <pep8 compliant>
|
||||
|
||||
bl_info = {
|
||||
"name": "Rock Generator",
|
||||
"author": "Paul Marshall (brikbot)",
|
||||
"version": (1, 4),
|
||||
"blender": (2, 80, 0),
|
||||
"location": "View3D > Add > Rock Generator",
|
||||
"description": "Adds a mesh rock to the Add Mesh menu",
|
||||
"wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/"
|
||||
"Scripts/Add_Mesh/Rock_Generator",
|
||||
"tracker_url": "https://developer.blender.org/maniphest/task/edit/form/2/",
|
||||
"category": "Add Mesh"}
|
||||
|
||||
if "bpy" in locals():
|
||||
import importlib
|
||||
importlib.reload(rockgen)
|
||||
|
||||
else:
|
||||
from . import rockgen
|
||||
|
||||
import bpy
|
||||
|
||||
|
||||
# Register:
|
||||
def register():
|
||||
rockgen.register()
|
||||
|
||||
|
||||
def unregister():
|
||||
rockgen.unregister()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
register()
|
|
@ -0,0 +1,403 @@
|
|||
<?xml version="1.0" ?>
|
||||
<!DOCTYPE settings [
|
||||
<!ELEMENT settings (default,preset*)>
|
||||
<!ELEMENT default (title,size,shape,material,random)>
|
||||
<!ELEMENT preset (title,size,shape,material,random)>
|
||||
<!ELEMENT title (#PCDATA)>
|
||||
<!ELEMENT size (scale+,skew+,use_scale_dis,scale_fac)>
|
||||
<!ELEMENT scale (axis,lower,upper)>
|
||||
<!ELEMENT axis (#PCDATA)>
|
||||
<!ELEMENT lower (#PCDATA)>
|
||||
<!ELEMENT upper (#PCDATA)>
|
||||
<!ELEMENT skew (axis,value)>
|
||||
<!ELEMENT value (#PCDATA)>
|
||||
<!ELEMENT use_scale_dis (#PCDATA)>
|
||||
<!ELEMENT scale_fac (#PCDATA)>
|
||||
<!ELEMENT shape (deform,rough,detail,display_detail,smooth_fac,smooth_it)>
|
||||
<!ELEMENT deform (#PCDATA)>
|
||||
<!ELEMENT rough (#PCDATA)>
|
||||
<!ELEMENT detail (#PCDATA)>
|
||||
<!ELEMENT display_detail (#PCDATA)>
|
||||
<!ELEMENT smooth_fac (#PCDATA)>
|
||||
<!ELEMENT smooth_it (#PCDATA)>
|
||||
<!ELEMENT material (mat_enable,mat_color,mat_bright,mat_rough,mat_spec,mat_hard,mat_use_trans,mat_alpha,mat_cloudy,mat_IOR,mat_mossy)>
|
||||
<!ELEMENT mat_enable (#PCDATA)>
|
||||
<!ELEMENT mat_color (#PCDATA)>
|
||||
<!ELEMENT mat_bright (#PCDATA)>
|
||||
<!ELEMENT mat_rough (#PCDATA)>
|
||||
<!ELEMENT mat_spec (#PCDATA)>
|
||||
<!ELEMENT mat_hard (#PCDATA)>
|
||||
<!ELEMENT mat_use_trans (#PCDATA)>
|
||||
<!ELEMENT mat_alpha (#PCDATA)>
|
||||
<!ELEMENT mat_cloudy (#PCDATA)>
|
||||
<!ELEMENT mat_IOR (#PCDATA)>
|
||||
<!ELEMENT mat_mossy (#PCDATA)>
|
||||
<!ELEMENT random (use_random_seed,user_seed)>
|
||||
<!ELEMENT use_generate (#PCDATA)>
|
||||
<!ELEMENT use_random_seed (#PCDATA)>
|
||||
<!ELEMENT user_seed (#PCDATA)>
|
||||
|
||||
<!ATTLIST preset id ID #REQUIRED>
|
||||
]>
|
||||
<settings>
|
||||
<default>
|
||||
<title>Default</title>
|
||||
<size>
|
||||
<scale>
|
||||
<axis>X</axis>
|
||||
<lower>1.0</lower>
|
||||
<upper>1.0</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Y</axis>
|
||||
<lower>1.0</lower>
|
||||
<upper>1.0</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Z</axis>
|
||||
<lower>1.0</lower>
|
||||
<upper>1.0</upper>
|
||||
</scale>
|
||||
<skew>
|
||||
<axis>X</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Y</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Z</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<use_scale_dis>False</use_scale_dis>
|
||||
<scale_fac>[1.0, 1.0, 1.0]</scale_fac>
|
||||
</size>
|
||||
<shape>
|
||||
<deform>5.0</deform>
|
||||
<rough>2.5</rough>
|
||||
<detail>3</detail>
|
||||
<display_detail>2</display_detail>
|
||||
<smooth_fac>0.0</smooth_fac>
|
||||
<smooth_it>0</smooth_it>
|
||||
</shape>
|
||||
<material>
|
||||
<mat_enable>False</mat_enable>
|
||||
<mat_color>[0.5, 0.5, 0.5]</mat_color>
|
||||
<mat_bright>0.85</mat_bright>
|
||||
<mat_rough>1.0</mat_rough>
|
||||
<mat_spec>0.2</mat_spec>
|
||||
<mat_hard>50</mat_hard>
|
||||
<mat_use_trans>False</mat_use_trans>
|
||||
<mat_alpha>0.0</mat_alpha>
|
||||
<mat_cloudy>0.0</mat_cloudy>
|
||||
<mat_IOR>1.0</mat_IOR>
|
||||
<mat_mossy>0.0</mat_mossy>
|
||||
</material>
|
||||
<random>
|
||||
<use_generate>True</use_generate>
|
||||
<use_random_seed>True</use_random_seed>
|
||||
<user_seed>1</user_seed>
|
||||
</random>
|
||||
</default>
|
||||
<preset id="1">
|
||||
<title>River Rock</title>
|
||||
<size>
|
||||
<scale>
|
||||
<axis>X</axis>
|
||||
<lower>0.5</lower>
|
||||
<upper>1.25</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Y</axis>
|
||||
<lower>0.5</lower>
|
||||
<upper>1.25</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Z</axis>
|
||||
<lower>0.5</lower>
|
||||
<upper>1.25</upper>
|
||||
</scale>
|
||||
<skew>
|
||||
<axis>X</axis>
|
||||
<value>-0.5</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Y</axis>
|
||||
<value>-0.5</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Z</axis>
|
||||
<value>-0.5</value>
|
||||
</skew>
|
||||
<use_scale_dis>False</use_scale_dis>
|
||||
<scale_fac>[1.0, 1.0, 1.0]</scale_fac>
|
||||
</size>
|
||||
<shape>
|
||||
<deform>3.0</deform>
|
||||
<rough>2.0</rough>
|
||||
<detail>2</detail>
|
||||
<display_detail>2</display_detail>
|
||||
<smooth_fac>2.0</smooth_fac>
|
||||
<smooth_it>2</smooth_it>
|
||||
</shape>
|
||||
<material>
|
||||
<mat_enable>True</mat_enable>
|
||||
<mat_color>[0.5, 0.5, 0.5]</mat_color>
|
||||
<mat_bright>0.85</mat_bright>
|
||||
<mat_rough>0.125</mat_rough>
|
||||
<mat_spec>0.5</mat_spec>
|
||||
<mat_hard>50</mat_hard>
|
||||
<mat_use_trans>False</mat_use_trans>
|
||||
<mat_alpha>0.0</mat_alpha>
|
||||
<mat_cloudy>0.0</mat_cloudy>
|
||||
<mat_IOR>1.0</mat_IOR>
|
||||
<mat_mossy>0.0</mat_mossy>
|
||||
</material>
|
||||
<random>
|
||||
<use_generate>True</use_generate>
|
||||
<use_random_seed>True</use_random_seed>
|
||||
<user_seed>1</user_seed>
|
||||
</random>
|
||||
</preset>
|
||||
<preset id="2">
|
||||
<title>Asteroid</title>
|
||||
<size>
|
||||
<scale>
|
||||
<axis>X</axis>
|
||||
<lower>1.0</lower>
|
||||
<upper>5.0</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Y</axis>
|
||||
<lower>1.0</lower>
|
||||
<upper>5.0</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Z</axis>
|
||||
<lower>1.0</lower>
|
||||
<upper>5.0</upper>
|
||||
</scale>
|
||||
<skew>
|
||||
<axis>X</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Y</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Z</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<use_scale_dis>False</use_scale_dis>
|
||||
<scale_fac>[1.0, 1.0, 1.0]</scale_fac>
|
||||
</size>
|
||||
<shape>
|
||||
<deform>7.5</deform>
|
||||
<rough>3.0</rough>
|
||||
<detail>4</detail>
|
||||
<display_detail>3</display_detail>
|
||||
<smooth_fac>0.0</smooth_fac>
|
||||
<smooth_it>0</smooth_it>
|
||||
</shape>
|
||||
<material>
|
||||
<mat_enable>True</mat_enable>
|
||||
<mat_color>[0.3, 0.25, 0.2]</mat_color>
|
||||
<mat_bright>0.85</mat_bright>
|
||||
<mat_rough>1.5</mat_rough>
|
||||
<mat_spec>0.25</mat_spec>
|
||||
<mat_hard>30</mat_hard>
|
||||
<mat_use_trans>False</mat_use_trans>
|
||||
<mat_alpha>0.0</mat_alpha>
|
||||
<mat_cloudy>0.0</mat_cloudy>
|
||||
<mat_IOR>1.0</mat_IOR>
|
||||
<mat_mossy>0.0</mat_mossy>
|
||||
</material>
|
||||
<random>
|
||||
<use_generate>True</use_generate>
|
||||
<use_random_seed>True</use_random_seed>
|
||||
<user_seed>1</user_seed>
|
||||
</random>
|
||||
</preset>
|
||||
<preset id="3">
|
||||
<title>Sandstone</title>
|
||||
<size>
|
||||
<scale>
|
||||
<axis>X</axis>
|
||||
<lower>1.0</lower>
|
||||
<upper>1.0</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Y</axis>
|
||||
<lower>1.0</lower>
|
||||
<upper>1.0</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Z</axis>
|
||||
<lower>1.0</lower>
|
||||
<upper>1.0</upper>
|
||||
</scale>
|
||||
<skew>
|
||||
<axis>X</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Y</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Z</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<use_scale_dis>True</use_scale_dis>
|
||||
<scale_fac>[5.0, 5.0, 0.1]</scale_fac>
|
||||
</size>
|
||||
<shape>
|
||||
<deform>0.5</deform>
|
||||
<rough>1.0</rough>
|
||||
<detail>3</detail>
|
||||
<display_detail>3</display_detail>
|
||||
<smooth_fac>2.0</smooth_fac>
|
||||
<smooth_it>2</smooth_it>
|
||||
</shape>
|
||||
<material>
|
||||
<mat_enable>True</mat_enable>
|
||||
<mat_color>[0.5, 0.4, 0.35]</mat_color>
|
||||
<mat_bright>0.85</mat_bright>
|
||||
<mat_rough>0.1</mat_rough>
|
||||
<mat_spec>0.2</mat_spec>
|
||||
<mat_hard>50</mat_hard>
|
||||
<mat_use_trans>False</mat_use_trans>
|
||||
<mat_alpha>0.0</mat_alpha>
|
||||
<mat_cloudy>0.0</mat_cloudy>
|
||||
<mat_IOR>1.0</mat_IOR>
|
||||
<mat_mossy>0.0</mat_mossy>
|
||||
</material>
|
||||
<random>
|
||||
<use_generate>True</use_generate>
|
||||
<use_random_seed>True</use_random_seed>
|
||||
<user_seed>1</user_seed>
|
||||
</random>
|
||||
</preset>
|
||||
<preset id="4">
|
||||
<title>Ice</title>
|
||||
<size>
|
||||
<scale>
|
||||
<axis>X</axis>
|
||||
<lower>0.0</lower>
|
||||
<upper>2.0</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Y</axis>
|
||||
<lower>0.0</lower>
|
||||
<upper>2.0</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Z</axis>
|
||||
<lower>0.0</lower>
|
||||
<upper>2.0</upper>
|
||||
</scale>
|
||||
<skew>
|
||||
<axis>X</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Y</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Z</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<use_scale_dis>False</use_scale_dis>
|
||||
<scale_fac>[1.0, 1.0, 1.0]</scale_fac>
|
||||
</size>
|
||||
<shape>
|
||||
<deform>5.0</deform>
|
||||
<rough>1.0</rough>
|
||||
<detail>3</detail>
|
||||
<display_detail>2</display_detail>
|
||||
<smooth_fac>2.0</smooth_fac>
|
||||
<smooth_it>1</smooth_it>
|
||||
</shape>
|
||||
<material>
|
||||
<mat_enable>True</mat_enable>
|
||||
<mat_color>[0.9, 0.95, 1.0]</mat_color>
|
||||
<mat_bright>0.85</mat_bright>
|
||||
<mat_rough>0.25</mat_rough>
|
||||
<mat_spec>0.2</mat_spec>
|
||||
<mat_hard>50</mat_hard>
|
||||
<mat_use_trans>True</mat_use_trans>
|
||||
<mat_alpha>0.9</mat_alpha>
|
||||
<mat_cloudy>0.1</mat_cloudy>
|
||||
<mat_IOR>1.31</mat_IOR>
|
||||
<mat_mossy>0.0</mat_mossy>
|
||||
</material>
|
||||
<random>
|
||||
<use_generate>True</use_generate>
|
||||
<use_random_seed>True</use_random_seed>
|
||||
<user_seed>1</user_seed>
|
||||
</random>
|
||||
</preset>
|
||||
<preset id="5">
|
||||
<title>Fake Ocean</title>
|
||||
<size>
|
||||
<scale>
|
||||
<axis>X</axis>
|
||||
<lower>10.0</lower>
|
||||
<upper>10.0</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Y</axis>
|
||||
<lower>10.0</lower>
|
||||
<upper>10.0</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Z</axis>
|
||||
<lower>0.0</lower>
|
||||
<upper>0.0</upper>
|
||||
</scale>
|
||||
<skew>
|
||||
<axis>X</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Y</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Z</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<use_scale_dis>False</use_scale_dis>
|
||||
<scale_fac>[1.0, 1.0, 1.0]</scale_fac>
|
||||
</size>
|
||||
<shape>
|
||||
<deform>7.5</deform>
|
||||
<rough>3.0</rough>
|
||||
<detail>4</detail>
|
||||
<display_detail>3</display_detail>
|
||||
<smooth_fac>0.0</smooth_fac>
|
||||
<smooth_it>0</smooth_it>
|
||||
</shape>
|
||||
<material>
|
||||
<mat_enable>True</mat_enable>
|
||||
<mat_color>[0.1, 0.12, 0.125]</mat_color>
|
||||
<mat_bright>0.85</mat_bright>
|
||||
<mat_rough>1.5</mat_rough>
|
||||
<mat_spec>0.25</mat_spec>
|
||||
<mat_hard>30</mat_hard>
|
||||
<mat_use_trans>True</mat_use_trans>
|
||||
<mat_alpha>0.5</mat_alpha>
|
||||
<mat_cloudy>0.5</mat_cloudy>
|
||||
<mat_IOR>1.333</mat_IOR>
|
||||
<mat_mossy>0.0</mat_mossy>
|
||||
</material>
|
||||
<random>
|
||||
<use_generate>True</use_generate>
|
||||
<use_random_seed>True</use_random_seed>
|
||||
<user_seed>1</user_seed>
|
||||
</random>
|
||||
</preset>
|
||||
</settings>
|
|
@ -0,0 +1,403 @@
|
|||
<?xml version="1.0" ?>
|
||||
<!DOCTYPE settings [
|
||||
<!ELEMENT settings (default,preset*)>
|
||||
<!ELEMENT default (title,size,shape,material,random)>
|
||||
<!ELEMENT preset (title,size,shape,material,random)>
|
||||
<!ELEMENT title (#PCDATA)>
|
||||
<!ELEMENT size (scale+,skew+,use_scale_dis,scale_fac)>
|
||||
<!ELEMENT scale (axis,lower,upper)>
|
||||
<!ELEMENT axis (#PCDATA)>
|
||||
<!ELEMENT lower (#PCDATA)>
|
||||
<!ELEMENT upper (#PCDATA)>
|
||||
<!ELEMENT skew (axis,value)>
|
||||
<!ELEMENT value (#PCDATA)>
|
||||
<!ELEMENT use_scale_dis (#PCDATA)>
|
||||
<!ELEMENT scale_fac (#PCDATA)>
|
||||
<!ELEMENT shape (deform,rough,detail,display_detail,smooth_fac,smooth_it)>
|
||||
<!ELEMENT deform (#PCDATA)>
|
||||
<!ELEMENT rough (#PCDATA)>
|
||||
<!ELEMENT detail (#PCDATA)>
|
||||
<!ELEMENT display_detail (#PCDATA)>
|
||||
<!ELEMENT smooth_fac (#PCDATA)>
|
||||
<!ELEMENT smooth_it (#PCDATA)>
|
||||
<!ELEMENT material (mat_enable,mat_color,mat_bright,mat_rough,mat_spec,mat_hard,mat_use_trans,mat_alpha,mat_cloudy,mat_IOR,mat_mossy)>
|
||||
<!ELEMENT mat_enable (#PCDATA)>
|
||||
<!ELEMENT mat_color (#PCDATA)>
|
||||
<!ELEMENT mat_bright (#PCDATA)>
|
||||
<!ELEMENT mat_rough (#PCDATA)>
|
||||
<!ELEMENT mat_spec (#PCDATA)>
|
||||
<!ELEMENT mat_hard (#PCDATA)>
|
||||
<!ELEMENT mat_use_trans (#PCDATA)>
|
||||
<!ELEMENT mat_alpha (#PCDATA)>
|
||||
<!ELEMENT mat_cloudy (#PCDATA)>
|
||||
<!ELEMENT mat_IOR (#PCDATA)>
|
||||
<!ELEMENT mat_mossy (#PCDATA)>
|
||||
<!ELEMENT random (use_random_seed,user_seed)>
|
||||
<!ELEMENT use_generate (#PCDATA)>
|
||||
<!ELEMENT use_random_seed (#PCDATA)>
|
||||
<!ELEMENT user_seed (#PCDATA)>
|
||||
|
||||
<!ATTLIST preset id ID #REQUIRED>
|
||||
]>
|
||||
<settings>
|
||||
<default>
|
||||
<title>Default</title>
|
||||
<size>
|
||||
<scale>
|
||||
<axis>X</axis>
|
||||
<lower>1.0</lower>
|
||||
<upper>1.0</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Y</axis>
|
||||
<lower>1.0</lower>
|
||||
<upper>1.0</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Z</axis>
|
||||
<lower>1.0</lower>
|
||||
<upper>1.0</upper>
|
||||
</scale>
|
||||
<skew>
|
||||
<axis>X</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Y</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Z</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<use_scale_dis>False</use_scale_dis>
|
||||
<scale_fac>[1.0, 1.0, 1.0]</scale_fac>
|
||||
</size>
|
||||
<shape>
|
||||
<deform>5.0</deform>
|
||||
<rough>2.5</rough>
|
||||
<detail>3</detail>
|
||||
<display_detail>2</display_detail>
|
||||
<smooth_fac>0.0</smooth_fac>
|
||||
<smooth_it>0</smooth_it>
|
||||
</shape>
|
||||
<material>
|
||||
<mat_enable>False</mat_enable>
|
||||
<mat_color>[0.5, 0.5, 0.5]</mat_color>
|
||||
<mat_bright>0.85</mat_bright>
|
||||
<mat_rough>1.0</mat_rough>
|
||||
<mat_spec>0.2</mat_spec>
|
||||
<mat_hard>50</mat_hard>
|
||||
<mat_use_trans>False</mat_use_trans>
|
||||
<mat_alpha>0.0</mat_alpha>
|
||||
<mat_cloudy>0.0</mat_cloudy>
|
||||
<mat_IOR>1.0</mat_IOR>
|
||||
<mat_mossy>0.0</mat_mossy>
|
||||
</material>
|
||||
<random>
|
||||
<use_generate>True</use_generate>
|
||||
<use_random_seed>True</use_random_seed>
|
||||
<user_seed>1</user_seed>
|
||||
</random>
|
||||
</default>
|
||||
<preset id="1">
|
||||
<title>River Rock</title>
|
||||
<size>
|
||||
<scale>
|
||||
<axis>X</axis>
|
||||
<lower>0.5</lower>
|
||||
<upper>1.25</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Y</axis>
|
||||
<lower>0.5</lower>
|
||||
<upper>1.25</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Z</axis>
|
||||
<lower>0.5</lower>
|
||||
<upper>1.25</upper>
|
||||
</scale>
|
||||
<skew>
|
||||
<axis>X</axis>
|
||||
<value>-0.5</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Y</axis>
|
||||
<value>-0.5</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Z</axis>
|
||||
<value>-0.5</value>
|
||||
</skew>
|
||||
<use_scale_dis>False</use_scale_dis>
|
||||
<scale_fac>[1.0, 1.0, 1.0]</scale_fac>
|
||||
</size>
|
||||
<shape>
|
||||
<deform>3.0</deform>
|
||||
<rough>2.0</rough>
|
||||
<detail>2</detail>
|
||||
<display_detail>2</display_detail>
|
||||
<smooth_fac>2.0</smooth_fac>
|
||||
<smooth_it>2</smooth_it>
|
||||
</shape>
|
||||
<material>
|
||||
<mat_enable>True</mat_enable>
|
||||
<mat_color>[0.5, 0.5, 0.5]</mat_color>
|
||||
<mat_bright>0.85</mat_bright>
|
||||
<mat_rough>0.125</mat_rough>
|
||||
<mat_spec>0.5</mat_spec>
|
||||
<mat_hard>50</mat_hard>
|
||||
<mat_use_trans>False</mat_use_trans>
|
||||
<mat_alpha>0.0</mat_alpha>
|
||||
<mat_cloudy>0.0</mat_cloudy>
|
||||
<mat_IOR>1.0</mat_IOR>
|
||||
<mat_mossy>0.0</mat_mossy>
|
||||
</material>
|
||||
<random>
|
||||
<use_generate>True</use_generate>
|
||||
<use_random_seed>True</use_random_seed>
|
||||
<user_seed>1</user_seed>
|
||||
</random>
|
||||
</preset>
|
||||
<preset id="2">
|
||||
<title>Asteroid</title>
|
||||
<size>
|
||||
<scale>
|
||||
<axis>X</axis>
|
||||
<lower>1.0</lower>
|
||||
<upper>5.0</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Y</axis>
|
||||
<lower>1.0</lower>
|
||||
<upper>5.0</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Z</axis>
|
||||
<lower>1.0</lower>
|
||||
<upper>5.0</upper>
|
||||
</scale>
|
||||
<skew>
|
||||
<axis>X</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Y</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Z</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<use_scale_dis>False</use_scale_dis>
|
||||
<scale_fac>[1.0, 1.0, 1.0]</scale_fac>
|
||||
</size>
|
||||
<shape>
|
||||
<deform>7.5</deform>
|
||||
<rough>3.0</rough>
|
||||
<detail>4</detail>
|
||||
<display_detail>3</display_detail>
|
||||
<smooth_fac>0.0</smooth_fac>
|
||||
<smooth_it>0</smooth_it>
|
||||
</shape>
|
||||
<material>
|
||||
<mat_enable>True</mat_enable>
|
||||
<mat_color>[0.3, 0.25, 0.2]</mat_color>
|
||||
<mat_bright>0.85</mat_bright>
|
||||
<mat_rough>1.5</mat_rough>
|
||||
<mat_spec>0.25</mat_spec>
|
||||
<mat_hard>30</mat_hard>
|
||||
<mat_use_trans>False</mat_use_trans>
|
||||
<mat_alpha>0.0</mat_alpha>
|
||||
<mat_cloudy>0.0</mat_cloudy>
|
||||
<mat_IOR>1.0</mat_IOR>
|
||||
<mat_mossy>0.0</mat_mossy>
|
||||
</material>
|
||||
<random>
|
||||
<use_generate>True</use_generate>
|
||||
<use_random_seed>True</use_random_seed>
|
||||
<user_seed>1</user_seed>
|
||||
</random>
|
||||
</preset>
|
||||
<preset id="3">
|
||||
<title>Sandstone</title>
|
||||
<size>
|
||||
<scale>
|
||||
<axis>X</axis>
|
||||
<lower>1.0</lower>
|
||||
<upper>1.0</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Y</axis>
|
||||
<lower>1.0</lower>
|
||||
<upper>1.0</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Z</axis>
|
||||
<lower>1.0</lower>
|
||||
<upper>1.0</upper>
|
||||
</scale>
|
||||
<skew>
|
||||
<axis>X</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Y</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Z</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<use_scale_dis>True</use_scale_dis>
|
||||
<scale_fac>[5.0, 5.0, 0.1]</scale_fac>
|
||||
</size>
|
||||
<shape>
|
||||
<deform>0.5</deform>
|
||||
<rough>1.0</rough>
|
||||
<detail>3</detail>
|
||||
<display_detail>3</display_detail>
|
||||
<smooth_fac>2.0</smooth_fac>
|
||||
<smooth_it>2</smooth_it>
|
||||
</shape>
|
||||
<material>
|
||||
<mat_enable>True</mat_enable>
|
||||
<mat_color>[0.5, 0.4, 0.35]</mat_color>
|
||||
<mat_bright>0.85</mat_bright>
|
||||
<mat_rough>0.1</mat_rough>
|
||||
<mat_spec>0.2</mat_spec>
|
||||
<mat_hard>50</mat_hard>
|
||||
<mat_use_trans>False</mat_use_trans>
|
||||
<mat_alpha>0.0</mat_alpha>
|
||||
<mat_cloudy>0.0</mat_cloudy>
|
||||
<mat_IOR>1.0</mat_IOR>
|
||||
<mat_mossy>0.0</mat_mossy>
|
||||
</material>
|
||||
<random>
|
||||
<use_generate>True</use_generate>
|
||||
<use_random_seed>True</use_random_seed>
|
||||
<user_seed>1</user_seed>
|
||||
</random>
|
||||
</preset>
|
||||
<preset id="4">
|
||||
<title>Ice</title>
|
||||
<size>
|
||||
<scale>
|
||||
<axis>X</axis>
|
||||
<lower>0.0</lower>
|
||||
<upper>2.0</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Y</axis>
|
||||
<lower>0.0</lower>
|
||||
<upper>2.0</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Z</axis>
|
||||
<lower>0.0</lower>
|
||||
<upper>2.0</upper>
|
||||
</scale>
|
||||
<skew>
|
||||
<axis>X</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Y</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Z</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<use_scale_dis>False</use_scale_dis>
|
||||
<scale_fac>[1.0, 1.0, 1.0]</scale_fac>
|
||||
</size>
|
||||
<shape>
|
||||
<deform>5.0</deform>
|
||||
<rough>1.0</rough>
|
||||
<detail>3</detail>
|
||||
<display_detail>2</display_detail>
|
||||
<smooth_fac>2.0</smooth_fac>
|
||||
<smooth_it>1</smooth_it>
|
||||
</shape>
|
||||
<material>
|
||||
<mat_enable>True</mat_enable>
|
||||
<mat_color>[0.9, 0.95, 1.0]</mat_color>
|
||||
<mat_bright>0.85</mat_bright>
|
||||
<mat_rough>0.25</mat_rough>
|
||||
<mat_spec>0.2</mat_spec>
|
||||
<mat_hard>50</mat_hard>
|
||||
<mat_use_trans>True</mat_use_trans>
|
||||
<mat_alpha>0.9</mat_alpha>
|
||||
<mat_cloudy>0.1</mat_cloudy>
|
||||
<mat_IOR>1.31</mat_IOR>
|
||||
<mat_mossy>0.0</mat_mossy>
|
||||
</material>
|
||||
<random>
|
||||
<use_generate>True</use_generate>
|
||||
<use_random_seed>True</use_random_seed>
|
||||
<user_seed>1</user_seed>
|
||||
</random>
|
||||
</preset>
|
||||
<preset id="5">
|
||||
<title>Fake Ocean</title>
|
||||
<size>
|
||||
<scale>
|
||||
<axis>X</axis>
|
||||
<lower>10.0</lower>
|
||||
<upper>10.0</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Y</axis>
|
||||
<lower>10.0</lower>
|
||||
<upper>10.0</upper>
|
||||
</scale>
|
||||
<scale>
|
||||
<axis>Z</axis>
|
||||
<lower>0.0</lower>
|
||||
<upper>0.0</upper>
|
||||
</scale>
|
||||
<skew>
|
||||
<axis>X</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Y</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<skew>
|
||||
<axis>Z</axis>
|
||||
<value>0.0</value>
|
||||
</skew>
|
||||
<use_scale_dis>False</use_scale_dis>
|
||||
<scale_fac>[1.0, 1.0, 1.0]</scale_fac>
|
||||
</size>
|
||||
<shape>
|
||||
<deform>7.5</deform>
|
||||
<rough>3.0</rough>
|
||||
<detail>4</detail>
|
||||
<display_detail>3</display_detail>
|
||||
<smooth_fac>0.0</smooth_fac>
|
||||
<smooth_it>0</smooth_it>
|
||||
</shape>
|
||||
<material>
|
||||
<mat_enable>True</mat_enable>
|
||||
<mat_color>[0.1, 0.12, 0.125]</mat_color>
|
||||
<mat_bright>0.85</mat_bright>
|
||||
<mat_rough>1.5</mat_rough>
|
||||
<mat_spec>0.25</mat_spec>
|
||||
<mat_hard>30</mat_hard>
|
||||
<mat_use_trans>True</mat_use_trans>
|
||||
<mat_alpha>0.5</mat_alpha>
|
||||
<mat_cloudy>0.5</mat_cloudy>
|
||||
<mat_IOR>1.333</mat_IOR>
|
||||
<mat_mossy>0.0</mat_mossy>
|
||||
</material>
|
||||
<random>
|
||||
<use_generate>True</use_generate>
|
||||
<use_random_seed>True</use_random_seed>
|
||||
<user_seed>1</user_seed>
|
||||
</random>
|
||||
</preset>
|
||||
</settings>
|
|
@ -0,0 +1,157 @@
|
|||
# This try block allows for the script to psudo-intelligently select the
|
||||
# appropriate random to use. If Numpy's random is present it will use that.
|
||||
# If Numpy's random is not present, it will through a "module not found"
|
||||
# exception and instead use the slower built-in random that Python has.
|
||||
try:
|
||||
from numpy.random import random_integers as randint
|
||||
from numpy.random import normal as gauss
|
||||
from numpy.random import (
|
||||
beta,
|
||||
uniform,
|
||||
)
|
||||
except:
|
||||
from random import (
|
||||
randint,
|
||||
gauss,
|
||||
uniform,
|
||||
)
|
||||
from random import betavariate as beta
|
||||
|
||||
from .utils import skewedGauss
|
||||
|
||||
|
||||
def randomizeTexture(texture, level=1):
|
||||
'''
|
||||
Set the values for a texture from parameters.
|
||||
|
||||
param: texture - bpy.data.texture to modify.
|
||||
level - designated tweaked settings to use
|
||||
-> Below 10 is a displacment texture
|
||||
-> Between 10 and 20 is a base material texture
|
||||
'''
|
||||
noises = ['BLENDER_ORIGINAL', 'ORIGINAL_PERLIN', 'IMPROVED_PERLIN',
|
||||
'VORONOI_F1', 'VORONOI_F2', 'VORONOI_F3', 'VORONOI_F4',
|
||||
'VORONOI_F2_F1', 'VORONOI_CRACKLE']
|
||||
if texture.type == 'CLOUDS':
|
||||
if randint(0, 1) == 0:
|
||||
texture.noise_type = 'SOFT_NOISE'
|
||||
else:
|
||||
texture.noise_type = 'HARD_NOISE'
|
||||
if level != 11:
|
||||
tempInt = randint(0, 6)
|
||||
else:
|
||||
tempInt = randint(0, 8)
|
||||
texture.noise_basis = noises[tempInt]
|
||||
texture.noise_depth = 8
|
||||
|
||||
if level == 0:
|
||||
texture.noise_scale = gauss(0.625, 1 / 24)
|
||||
elif level == 2:
|
||||
texture.noise_scale = 0.15
|
||||
elif level == 11:
|
||||
texture.noise_scale = gauss(0.5, 1 / 24)
|
||||
|
||||
if texture.noise_basis in ['BLENDER_ORIGINAL', 'ORIGINAL_PERLIN',
|
||||
'IMPROVED_PERLIN', 'VORONOI_F1']:
|
||||
texture.intensity = gauss(1, 1 / 6)
|
||||
texture.contrast = gauss(4, 1 / 3)
|
||||
elif texture.noise_basis in ['VORONOI_F2', 'VORONOI_F3', 'VORONOI_F4']:
|
||||
texture.intensity = gauss(0.25, 1 / 12)
|
||||
texture.contrast = gauss(2, 1 / 6)
|
||||
elif texture.noise_basis == 'VORONOI_F2_F1':
|
||||
texture.intensity = gauss(0.5, 1 / 6)
|
||||
texture.contrast = gauss(2, 1 / 6)
|
||||
elif texture.noise_basis == 'VORONOI_CRACKLE':
|
||||
texture.intensity = gauss(0.5, 1 / 6)
|
||||
texture.contrast = gauss(2, 1 / 6)
|
||||
elif texture.type == 'MUSGRAVE':
|
||||
# musgraveType = ['MULTIFRACTAL', 'RIDGED_MULTIFRACTAL',
|
||||
# 'HYBRID_MULTIFRACTAL', 'FBM', 'HETERO_TERRAIN']
|
||||
texture.musgrave_type = 'MULTIFRACTAL'
|
||||
texture.dimension_max = abs(gauss(0, 0.6)) + 0.2
|
||||
texture.lacunarity = beta(3, 8) * 8.2 + 1.8
|
||||
|
||||
if level == 0:
|
||||
texture.noise_scale = gauss(0.625, 1 / 24)
|
||||
texture.noise_intensity = 0.2
|
||||
texture.octaves = 1.0
|
||||
elif level == 2:
|
||||
texture.intensity = gauss(1, 1 / 6)
|
||||
texture.contrast = 0.2
|
||||
texture.noise_scale = 0.15
|
||||
texture.octaves = 8.0
|
||||
elif level == 10:
|
||||
texture.intensity = gauss(0.25, 1 / 12)
|
||||
texture.contrast = gauss(1.5, 1 / 6)
|
||||
texture.noise_scale = 0.5
|
||||
texture.octaves = 8.0
|
||||
elif level == 12:
|
||||
texture.octaves = uniform(1, 3)
|
||||
elif level > 12:
|
||||
texture.octaves = uniform(2, 8)
|
||||
else:
|
||||
texture.intensity = gauss(1, 1 / 6)
|
||||
texture.contrast = 0.2
|
||||
texture.octaves = 8.0
|
||||
elif texture.type == 'DISTORTED_NOISE':
|
||||
tempInt = randint(0, 8)
|
||||
texture.noise_distortion = noises[tempInt]
|
||||
tempInt = randint(0, 8)
|
||||
texture.noise_basis = noises[tempInt]
|
||||
texture.distortion = skewedGauss(2.0, 2.6666, (0.0, 10.0), False)
|
||||
|
||||
if level == 0:
|
||||
texture.noise_scale = gauss(0.625, 1 / 24)
|
||||
elif level == 2:
|
||||
texture.noise_scale = 0.15
|
||||
elif level >= 12:
|
||||
texture.noise_scale = gauss(0.2, 1 / 48)
|
||||
elif texture.type == 'STUCCI':
|
||||
stucciTypes = ['PLASTIC', 'WALL_IN', 'WALL_OUT']
|
||||
if randint(0, 1) == 0:
|
||||
texture.noise_type = 'SOFT_NOISE'
|
||||
else:
|
||||
texture.noise_type = 'HARD_NOISE'
|
||||
tempInt = randint(0, 2)
|
||||
texture.stucci_type = stucciTypes[tempInt]
|
||||
|
||||
if level == 0:
|
||||
tempInt = randint(0, 6)
|
||||
texture.noise_basis = noises[tempInt]
|
||||
texture.noise_scale = gauss(0.625, 1 / 24)
|
||||
elif level == 2:
|
||||
tempInt = randint(0, 6)
|
||||
texture.noise_basis = noises[tempInt]
|
||||
texture.noise_scale = 0.15
|
||||
elif level >= 12:
|
||||
tempInt = randint(0, 6)
|
||||
texture.noise_basis = noises[tempInt]
|
||||
texture.noise_scale = gauss(0.2, 1 / 30)
|
||||
else:
|
||||
tempInt = randint(0, 6)
|
||||
texture.noise_basis = noises[tempInt]
|
||||
elif texture.type == 'VORONOI':
|
||||
metrics = ['DISTANCE', 'DISTANCE_SQUARED', 'MANHATTAN', 'CHEBYCHEV',
|
||||
'MINKOVSKY_HALF', 'MINKOVSKY_FOUR', 'MINKOVSKY']
|
||||
# Settings for first dispalcement level:
|
||||
if level == 0:
|
||||
tempInt = randint(0, 1)
|
||||
texture.distance_metric = metrics[tempInt]
|
||||
texture.noise_scale = gauss(0.625, 1 / 24)
|
||||
texture.contrast = 0.5
|
||||
texture.intensity = 0.7
|
||||
elif level == 2:
|
||||
texture.noise_scale = 0.15
|
||||
tempInt = randint(0, 6)
|
||||
texture.distance_metric = metrics[tempInt]
|
||||
elif level >= 12:
|
||||
tempInt = randint(0, 1)
|
||||
texture.distance_metric = metrics[tempInt]
|
||||
texture.noise_scale = gauss(0.125, 1 / 48)
|
||||
texture.contrast = 0.5
|
||||
texture.intensity = 0.7
|
||||
else:
|
||||
tempInt = randint(0, 6)
|
||||
texture.distance_metric = metrics[tempInt]
|
||||
|
||||
return
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,163 @@
|
|||
# Paul "BrikBot" Marshall
|
||||
# Created: July 1, 2011
|
||||
# Last Modified: November 17, 2011
|
||||
# Homepage (blog): http://post.darkarsenic.com/
|
||||
# //blog.darkarsenic.com/
|
||||
# Thanks to Meta-Androco, RickyBlender, Ace Dragon, and PKHG for ideas
|
||||
# and testing.
|
||||
#
|
||||
# Coded in IDLE, tested in Blender 2.59. NumPy Recommended.
|
||||
# Search for "@todo" to quickly find sections that need work.
|
||||
#
|
||||
# ##### BEGIN GPL LICENSE BLOCK #####
|
||||
#
|
||||
# The Blender Rock Creation tool is for rapid generation of
|
||||
# mesh rocks in Blender.
|
||||
# Copyright (C) 2011 Paul Marshall
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# ##### END GPL LICENSE BLOCK #####
|
||||
|
||||
# <pep8 compliant>
|
||||
|
||||
import inspect
|
||||
import shutil
|
||||
from . import utils
|
||||
from xml.dom import minidom
|
||||
|
||||
basePath = inspect.getfile(inspect.currentframe())[0:-len("settings.py")]
|
||||
path = basePath + "add_mesh_rocks.xml"
|
||||
|
||||
try:
|
||||
source = minidom.parse(path)
|
||||
print("Rock generator settings file found:\n" + path)
|
||||
except:
|
||||
print("Rock generator settings file not found. Creating settings file.")
|
||||
shutil.copy(basePath + "factory.xml", path)
|
||||
source = minidom.parse(path)
|
||||
|
||||
xmlDefault = source.getElementsByTagName('default')[0]
|
||||
xmlPresets = source.getElementsByTagName('preset')
|
||||
default = []
|
||||
presets = []
|
||||
|
||||
# ----- Gets and Sets -----#
|
||||
|
||||
|
||||
def getDefault():
|
||||
global default
|
||||
return default
|
||||
|
||||
|
||||
def getPresetLists():
|
||||
global presets
|
||||
return presets
|
||||
|
||||
|
||||
def getPreset(ID=0):
|
||||
global presets
|
||||
return presets[ID]
|
||||
|
||||
# ---------- Core ----------#
|
||||
|
||||
|
||||
def parse():
|
||||
global xmlDefault
|
||||
global xmlPresets
|
||||
global default
|
||||
global presets
|
||||
|
||||
# Parse default values
|
||||
default = parseNode(xmlDefault)
|
||||
|
||||
# Parse preset values
|
||||
for setting in xmlPresets:
|
||||
presets.append(parseNode(setting))
|
||||
|
||||
return '{FINISHED}'
|
||||
|
||||
|
||||
# Takes a node and parses it for data. Relies on that setting.xml has
|
||||
# a valid format as specified by the DTD.
|
||||
# For some reason minidom places an empty child node for every other node.
|
||||
def parseNode(setting, title=True):
|
||||
loc = 1
|
||||
|
||||
if title:
|
||||
# Preset name (xmlPreset.childNodes[1]):
|
||||
title = setting.childNodes[loc].childNodes[0].data
|
||||
loc += 2
|
||||
|
||||
# Preset size values (xmlPreset.childNodes[3]):
|
||||
scaleX = [float(setting.childNodes[loc].childNodes[1].childNodes[3].childNodes[0].data),
|
||||
float(setting.childNodes[loc].childNodes[1].childNodes[5].childNodes[0].data)]
|
||||
scaleY = [float(setting.childNodes[loc].childNodes[3].childNodes[3].childNodes[0].data),
|
||||
float(setting.childNodes[loc].childNodes[3].childNodes[5].childNodes[0].data)]
|
||||
scaleZ = [float(setting.childNodes[loc].childNodes[5].childNodes[3].childNodes[0].data),
|
||||
float(setting.childNodes[loc].childNodes[5].childNodes[5].childNodes[0].data)]
|
||||
skewX = float(setting.childNodes[loc].childNodes[7].childNodes[3].childNodes[0].data)
|
||||
skewY = float(setting.childNodes[loc].childNodes[9].childNodes[3].childNodes[0].data)
|
||||
skewZ = float(setting.childNodes[loc].childNodes[11].childNodes[3].childNodes[0].data)
|
||||
if setting.childNodes[loc].childNodes[13].childNodes[0].data == 'False':
|
||||
use_scale_dis = False
|
||||
else:
|
||||
use_scale_dis = True
|
||||
scale_fac = utils.toList(setting.childNodes[loc].childNodes[15].childNodes[0].data)
|
||||
loc += 2
|
||||
|
||||
# Presst shape values (xmlPreset.childNodes[5]):
|
||||
deform = float(setting.childNodes[loc].childNodes[1].childNodes[0].data)
|
||||
rough = float(setting.childNodes[loc].childNodes[3].childNodes[0].data)
|
||||
detail = int(setting.childNodes[loc].childNodes[5].childNodes[0].data)
|
||||
display_detail = int(setting.childNodes[loc].childNodes[7].childNodes[0].data)
|
||||
smooth_fac = float(setting.childNodes[loc].childNodes[9].childNodes[0].data)
|
||||
smooth_it = int(setting.childNodes[loc].childNodes[11].childNodes[0].data)
|
||||
loc += 2
|
||||
|
||||
# Preset material values (xmlPreset.childNodes[7]):
|
||||
loc += 2
|
||||
|
||||
# Preset random values (xmlPreset.childNodes[9]):
|
||||
if setting.childNodes[loc].childNodes[1].childNodes[0].data == 'True':
|
||||
use_generate = True
|
||||
else:
|
||||
use_generate = False
|
||||
if setting.childNodes[loc].childNodes[3].childNodes[0].data == 'False':
|
||||
use_random_seed = False
|
||||
else:
|
||||
use_random_seed = True
|
||||
user_seed = int(setting.childNodes[loc].childNodes[5].childNodes[0].data)
|
||||
|
||||
if title:
|
||||
parsed = [title, scaleX, scaleY, scaleZ, skewX, skewY, skewZ,
|
||||
use_scale_dis, scale_fac, deform, rough, detail,
|
||||
display_detail, smooth_fac, smooth_it,
|
||||
use_generate, use_random_seed, user_seed]
|
||||
else:
|
||||
parsed = [scaleX, scaleY, scaleZ, skewX, skewY, skewZ, use_scale_dis,
|
||||
scale_fac, deform, rough, detail, display_detail, smooth_fac,
|
||||
smooth_it, use_generate, use_random_seed, user_seed]
|
||||
|
||||
return parsed
|
||||
|
||||
|
||||
def save():
|
||||
return '{FINISHED}'
|
||||
|
||||
|
||||
def _print():
|
||||
for i in presets:
|
||||
print(i)
|
||||
return '{FINISHED}'
|
|
@ -0,0 +1,160 @@
|
|||
# ##### BEGIN GPL LICENSE BLOCK #####
|
||||
#
|
||||
# The Blender Rock Creation tool is for rapid generation of mesh rocks.
|
||||
# Copyright (C) 2011 Paul Marshall
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# ##### END GPL LICENSE BLOCK #####
|
||||
|
||||
# <pep8 compliant>
|
||||
|
||||
|
||||
# Converts a formated string to a float tuple:
|
||||
# IN - '(0.5, 0.2)' -> CONVERT -> OUT - (0.5, 0.2)
|
||||
def toTuple(stringIn):
|
||||
sTemp = str(stringIn)[1:len(str(stringIn)) - 1].split(', ')
|
||||
fTemp = []
|
||||
for i in sTemp:
|
||||
fTemp.append(float(i))
|
||||
return tuple(fTemp)
|
||||
|
||||
|
||||
# Converts a formated string to a float tuple:
|
||||
# IN - '[0.5, 0.2]' -> CONVERT -> OUT - [0.5, 0.2]
|
||||
def toList(stringIn):
|
||||
sTemp = str(stringIn)[1:len(str(stringIn)) - 1].split(', ')
|
||||
fTemp = []
|
||||
for i in sTemp:
|
||||
fTemp.append(float(i))
|
||||
return fTemp
|
||||
|
||||
|
||||
# Converts each item of a list into a float:
|
||||
def toFloats(inList):
|
||||
outList = []
|
||||
for i in inList:
|
||||
outList.append(float(i))
|
||||
return outList
|
||||
|
||||
|
||||
# Converts each item of a list into an integer:
|
||||
def toInts(inList):
|
||||
outList = []
|
||||
for i in inList:
|
||||
outList.append(int(i))
|
||||
return outList
|
||||
|
||||
|
||||
# Sets all faces smooth. Done this way since I can't
|
||||
# find a simple way without using bpy.ops:
|
||||
def smooth(mesh):
|
||||
import bmesh
|
||||
bm = bmesh.new()
|
||||
bm.from_mesh(mesh)
|
||||
for f in bm.faces:
|
||||
f.smooth = True
|
||||
bm.to_mesh(mesh)
|
||||
return mesh
|
||||
|
||||
|
||||
# This try block allows for the script to psudo-intelligently select the
|
||||
# appropriate random to use. If Numpy's random is present it will use that.
|
||||
# If Numpy's random is not present, it will through a "module not found"
|
||||
# exception and instead use the slower built-in random that Python has.
|
||||
try:
|
||||
# from numpy.random import random_integers as randint
|
||||
from numpy.random import normal as gauss
|
||||
# from numpy.random import (beta,
|
||||
# uniform,
|
||||
# seed,
|
||||
# weibull)
|
||||
# print("Rock Generator: Numpy found.")
|
||||
numpy = True
|
||||
except:
|
||||
from random import (
|
||||
# randint,
|
||||
gauss,
|
||||
# uniform,
|
||||
# seed
|
||||
)
|
||||
# from random import betavariate as beta
|
||||
# from random import weibullvariate as weibull
|
||||
print("Rock Generator: Numpy not found. Using Python's random.")
|
||||
numpy = False
|
||||
# Artifically skews a normal (gaussian) distribution. This will not create
|
||||
# a continuous distribution curve but instead acts as a piecewise finction.
|
||||
# This linearly scales the output on one side to fit the bounds.
|
||||
#
|
||||
# Example output historgrams:
|
||||
#
|
||||
# Upper skewed: Lower skewed:
|
||||
# | ▄ | _
|
||||
# | █ | █
|
||||
# | █_ | █
|
||||
# | ██ | _█
|
||||
# | _██ | ██
|
||||
# | _▄███_ | ██ _
|
||||
# | ▄██████ | ▄██▄█▄_
|
||||
# | _█▄███████ | ███████
|
||||
# | _██████████_ | ████████▄▄█_ _
|
||||
# | _▄▄████████████ | ████████████▄█_
|
||||
# | _▄_ ▄███████████████▄_ | _▄███████████████▄▄_
|
||||
# ------------------------- -----------------------
|
||||
# |mu |mu
|
||||
# Historgrams were generated in R (http://www.r-project.org/) based on the
|
||||
# calculations below and manually duplicated here.
|
||||
#
|
||||
# param: mu - mu is the mean of the distribution.
|
||||
# sigma - sigma is the standard deviation of the distribution.
|
||||
# bounds - bounds[0] is the lower bound and bounds[1]
|
||||
# is the upper bound.
|
||||
# upperSkewed - if the distribution is upper skewed.
|
||||
# return: out - Rondomly generated value from the skewed distribution.
|
||||
#
|
||||
# @todo: Because NumPy's random value generators are faster when called
|
||||
# a bunch of times at once, maybe allow this to generate and return
|
||||
# multiple values at once?
|
||||
|
||||
|
||||
def skewedGauss(mu, sigma, bounds, upperSkewed=True):
|
||||
raw = gauss(mu, sigma)
|
||||
|
||||
# Quicker to check an extra condition than do unnecessary math. . . .
|
||||
if raw < mu and not upperSkewed:
|
||||
out = ((mu - bounds[0]) / (3 * sigma)) * raw + ((mu * (bounds[0] - (mu - 3 * sigma))) / (3 * sigma))
|
||||
elif raw > mu and upperSkewed:
|
||||
out = ((mu - bounds[1]) / (3 * -sigma)) * raw + ((mu * (bounds[1] - (mu + 3 * sigma))) / (3 * -sigma))
|
||||
else:
|
||||
out = raw
|
||||
|
||||
return out
|
||||
|
||||
|
||||
# @todo create a def for generating an alpha and beta for a beta distribution
|
||||
# given a mu, sigma, and an upper and lower bound. This proved faster in
|
||||
# profiling in addition to providing a much better distribution curve
|
||||
# provided multiple iterations happen within this function; otherwise it was
|
||||
# slower.
|
||||
# This might be a scratch because of the bounds placed on mu and sigma:
|
||||
#
|
||||
# For alpha > 1 and beta > 1:
|
||||
# mu^2 - mu^3 mu^3 - mu^2 + mu
|
||||
# ----------- < sigma < ----------------
|
||||
# 1 + mu 2 - mu
|
||||
#
|
||||
# def generateBeta(mu, sigma, scale, repitions=1):
|
||||
# results = []
|
||||
#
|
||||
# return results
|
Loading…
Reference in New Issue