Я работаю над рельефом для простой игры SceneKit и пытаюсь применить различные материалы к одной и той же сетке для эффекта карты splat. Рельеф обработан процедурой, поэтому я не могу смоделировать его в Collada и загрузить его с использованием текстур.Splatmap для местности SceneKit
Похоже, что среди других игровых движков применять материалы/текстуры к местности - это использовать карту splat. У SceneKit нет такой конструкции или простого способа сделать ландшафт.
То, что я попытался было процедурно генерировать карту прозрачности для различных текстур/цвета, а затем добавить эти материалы в геометрии что-то вроде ...
var alphaMaps = [NSBitmapImageRep]()
for x in 0..<4{
alphaMaps.append(createBitmapImage()!)
}
var x = 0
var y = 0
let waterLevel = 0
let snowLevel = 241
let mountainLevel = 200
for tile in self.map.sortedTiles{
let height = Int(tile.height)
println("Height\(height)")
var onLevel = -1
if height < waterLevel{
onLevel = 0
}
...
for i in 0..<4{
var color = NSColor(deviceRed: 0, green: 0, blue: 0, alpha: i == onLevel ? 0 : 1)
alphaMaps[i].setColor(color, atX: x, y: y)
}
... generate the geometry
}
var materials = [SCNMaterial]()
for h in 0..<4{
let mat = SCNMaterial()
switch(h){
case 0:
mat.diffuse.contents = NSColor.blueColor()
case 1:
mat.diffuse.contents = NSColor.greenColor()
case 2:
mat.diffuse.contents = NSColor.brownColor()
case 3:
mat.diffuse.contents = NSColor.whiteColor()
default:
println("FAIL")
}
mat.transparent.contents = alphaMaps[h].CGImage
materials.append(mat)
}
geometry.materials = materials
Я проверил, что альфа-карты являются правильными, но они, похоже, не соблюдаются. Используется только первый материал, и он не использует прозрачное изображение.
Вот пример альфа-карты, не черная часть прозрачна:
Есть ли способ, чтобы сделать карту пейнтбольной в SceneKit? Или указатели на то, как исправить происходящее? Нужно ли мне вникать в пользовательский шейдер?
Возможно, вам необходимо изучить пользовательские шейдеры или, скорее всего, только модификаторы шейдеров. Трудно назначить совершенно новый материал, но довольно легко изменить материальное свойство или два (например, диффузный, зеркальный или нормальный). –
Однако я не уверен, что именно вы пытаетесь изменить между различными материалами, или сколько разных конфигураций вы пытаетесь использовать на одном элементе. –