Custom material shaders

This commit is contained in:
Lubos Lenco 2015-12-07 21:05:27 +01:00
parent 658469fdf6
commit 67f4cae2b7
9 changed files with 78 additions and 23 deletions

Binary file not shown.

Binary file not shown.

View file

@ -8,6 +8,7 @@ from bpy.props import *
import subprocess
import atexit
import webbrowser
import write_data
def defaultSettings():
wrd = bpy.data.worlds[0]
@ -134,23 +135,10 @@ def exportGameData():
a.armature.location.z = a.z
# Write khafile.js
with open('khafile.js', 'w') as f:
f.write(
"""// Auto-generated
var project = new Project('""" + bpy.data.worlds[0]['CGProjectName'] + """');
project.addSources('Sources');
project.addShaders('Sources/Shaders/**');
project.addAssets('Assets/**');
project.addLibrary('lue');
project.addLibrary('cyclesgame');
project.addLibrary('haxebullet');
return project;
""")
write_data.write_khafilejs()
# Write Main.hx
#write_main()
write_data.write_main()
def buildProject(self, build_type=0):
# Save scripts

View file

@ -15,9 +15,9 @@ def initObjectProperties():
bpy.types.Object.instanced_children = bpy.props.BoolProperty(name="Instanced children", default=False)
bpy.types.Material.receive_shadow = bpy.props.BoolProperty(name="Receive shadow", default=True)
bpy.types.Material.alpha_test = bpy.props.BoolProperty(name="Alpha test", default=False)
bpy.types.Material.custom_shader = bpy.props.BoolProperty(name="Custom shader", default=False)
bpy.types.Material.custom_shader_name = bpy.props.StringProperty(name="Name", default="")
bpy.types.Material.export_tangents = bpy.props.BoolProperty(name="Export tangents", default=False)
bpy.app.handlers.scene_update_post.append(cb_scene_update)
#bpy.app.handlers.scene_update_post.remove(cb_scene_update)
# Menu in object region
class ToolsPropsPanel(bpy.types.Panel):
@ -46,11 +46,16 @@ class MatsPropsPanel(bpy.types.Panel):
layout.prop(mat, 'receive_shadow')
layout.prop(mat, 'alpha_test')
layout.prop(mat, 'custom_shader')
if mat.custom_shader:
layout.prop(mat, 'custom_shader_name')
# Registration
def register():
bpy.utils.register_module(__name__)
initObjectProperties()
bpy.app.handlers.scene_update_post.append(cb_scene_update)
def unregister():
bpy.app.handlers.scene_update_post.remove(cb_scene_update)
bpy.utils.unregister_module(__name__)

View file

@ -2043,12 +2043,15 @@ class LueExporter(bpy.types.Operator, ExportHelper):
ob.geometry_cached = False
break
# Merge duplicates and sort
defs = sorted(list(set(defs)))
# Select correct shader variant
o.shader = "blender_resource/blender"
for d in defs:
o.shader += d
if material.custom_shader == False:
# Merge duplicates and sort
defs = sorted(list(set(defs)))
# Select correct shader variant
o.shader = "blender_resource/blender"
for d in defs:
o.shader += d
else:
o.shader = material.custom_shader_name
#intensity = material.specular_intensity
#specular = [material.specular_color[0] * intensity, material.specular_color[1] * intensity, material.specular_color[2] * intensity]

59
blender/write_data.py Normal file
View file

@ -0,0 +1,59 @@
import bpy
import os
# Write khafile.js
def write_khafilejs():
with open('khafile.js', 'w') as f:
f.write(
"""// Auto-generated
var project = new Project('""" + bpy.data.worlds[0]['CGProjectName'] + """');
project.addSources('Sources');
project.addShaders('Sources/Shaders/**');
project.addAssets('Assets/**');
project.addLibrary('lue');
project.addLibrary('cyclesgame');
project.addLibrary('haxebullet');
return project;
""")
# Write Main.hx
def write_main():
#if not os.path.isfile('Sources/Main.hx'):
with open('Sources/Main.hx', 'w') as f:
f.write(
"""// Auto-generated
package ;
class Main {
static inline var projectName = '""" + bpy.data.worlds[0]['CGProjectPackage'] + """';
static inline var projectWidth = """ + str(bpy.data.worlds[0]['CGProjectWidth']) + """;
static inline var projectHeight = """ + str(bpy.data.worlds[0]['CGProjectHeight']) + """;
public static function main() {
lue.sys.CompileTime.importPackage('lue.trait');
lue.sys.CompileTime.importPackage('cycles.trait');
lue.sys.CompileTime.importPackage('""" + bpy.data.worlds[0]['CGProjectName'] + """');
#if js
untyped __js__("
function loadScript(url, callback) {
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
script.onreadystatechange = callback;
script.onload = callback;
head.appendChild(script);
}
");
untyped loadScript('ammo.js', start);
#else
start();
#end
}
static function start() {
kha.System.init(projectName, projectWidth, projectHeight, function() {
new lue.App(cycles.Root);
});
}
}
""")