понедельник, 29 февраля 2016 г.

Сделал десяток блоков.

    Нужно еще:
1) Настроить нормально материалы, добавить большую черно-белую маску, что бы не так заметна была плитка текстур.
2) Переделать текстуры на размер кратным 2. У меня их там всего пяток, так что недолго.
3) Переименовать блоки и как объекты, и как меши.
5) Сделать еще кучу блоков поворота и блоки плавного спуска. Дофига еще.
6) Создать таблицу высот для каждого блока.

Пока выглядит так:



Blog by Flogger-K. 3D и не только: "Случай в квадрате 36-80" или "Операция Святой Яну...

Blog by Flogger-K. 3D и не только: "Случай в квадрате 36-80" или "Операция Святой Яну...: Когда-то достаточно давно я видел оба фильма. И их названия очень даже соответствовали моим извращениям по поиску алгоритма генерации блоков...

воскресенье, 28 февраля 2016 г.

четверг, 25 февраля 2016 г.

Создание блока.


Опишу, как я создаю блок. Мало ли, вдруг прогрессирующий склероз совсем заест. Или вдруг кто совет полезный даст.


воскресенье, 21 февраля 2016 г.

Медленно.

    Скачал и поставил плагин к GIMP'у, экспортирующий изображение в формате .dds. Ну как скачал/поставил - в Центре приложений ввел в поисковую строку "dds", оно и вылезло, осталось только кнопку "Установить" нажать, да подтвердить паролем. Линукс развращает... Немного потестировал, но что-то особой разницы в производительности для BGE я не заметил. Надо еще поэкспериментировать.
    Возвращаясь к блочному ландшафту, не прошло и недели, как я немного переделал высокополигональный меш, запек с него новую карту нормалей и запек AO. Швов не видать, правда когда буду делать меши других типов, придется слегка помучатся. Ну да когда это будет ))). Надо бы еще разобраться с бликами - очень уж сильно бликует, словно маслом намазано.
Ниже результат в виде картинок:


четверг, 18 февраля 2016 г.

Хорошая мысля всегда приходит опосля.

    Внезапно сообразил как сделать более-менее вменяемую развертку для блока. Ниже картинки с перерисованной текстурой. Карта нормалей запекалась с корявого блока, я его не менял.


среда, 17 февраля 2016 г.

Война с разверткой окончилась ничем.

   Для начала конечно надо написать, почему я её затеял - всё дело в том, что текстуры не желали накладываться так, что бы между соседними блоками ландшафта не было швов.  Ниже на второй картинке заметно влияние карты нормалей, запеченной с криво сделанного высокополигонального меша. А тут еще и просто текстуры криво склеиваются - даже разница в яркости имеется. Вот и затеял я сделать развертку такую, чтобы текстуры на неё накладывались ровно-ровно, да вот только для такого типа геометрии блока это мне непосильно.Для предыдущих блоков еще куда не шло или для ровной стеночки без проблем, а тут ширина отвесной стенки получается в два раза больше ширины нижней или верхней поверхности. Собственно оно и видно. В общем мучал я развертку, резал её по всякому, а вот сейчас вдруг вспомнил, что в режиме Texture Paint можно включить симметрию и просто намалевать как надо. Развертку теперь можно сделать как удобно и не париться. Есть только одно замечание для Texture Paint - размер текстуры, используемой в качестве кисти, все же должен быть сообразен с размером модели.

Модели в этот раз не будет, геометрия не изменилась. Ниже картинки, что я сделал по-быстрому:


пятница, 12 февраля 2016 г.

Потихоньку вожусь с геометрией блоков ландшафта.

    Всё никак не выберу подходящую форму. И карты нормалей использовать охота, и карты затенения и АО. Да еще хочется, что бы текстуры накладывались без "растяжек", поэтому надо еще вменяемую развертку сделать. Губа не дура, однако. Заодно решил попробовать blend4Web в качестве вьювера для моделек. Вот ссылка, аж 2,2 МБ:

TEST_SLOPE.html

Кому неохота грузить модельку, ниже пара скриншотов. Текстурку рисовал прямо по модели в режиме Texture Paint. Освещение - один Sun и пара Hemi. 226 полигонов.



воскресенье, 7 февраля 2016 г.

Скрипт поиска файла в директории и вложенных директориях # 2

Как выяснилось, предыдущая версия наотрез оказалась работать в винде. Слеши там, видите ли, "не той системы". А эта, по идее, должна работать везде.


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import bge
import os

def searchFile(startPath, nameFile):
    # результат поиска, по умолчанию "ничего не нашли", он же флаг
    result = False
    # список всех путей к папкам, в которых будем искать
    listPaths = [startPath]
    # просматриваем доступные пути к директориям
    for path in listPaths:
        #print('dir -- ', path) # debug
        # просматриваем содержимое текущей папки
        for ob in os.listdir(path):
            #print('ob -- ', ob, os.path.isfile(os.path.join(path, ob)), os.path.isdir(os.path.join(path, ob))) # debug
            # если файл, тот что нам нужен          
            if ob == nameFile:
                # то изменяем значение флага на путь к файлу
                result = os.path.join(path, ob)
                # и выходим из этого цикла
                break
            # если же файл не тот, что нужен, но является папкой
            elif os.path.isdir(os.path.join(path, ob)):
                # добавляем путь к новой папке в список всех путей для
                # последующего поиска там
                newPath = os.path.join(path, ob)
                listPaths.append(newPath)          
        # если в предыдущем цикле что-то нашли, то выходим и из этого цикла.
        if result != False:
            break
     
    # красиво оформляем фейл поиска      
    if result == False:
        result = 'Извините, по вашему запросу ничего не найдено'
       
    return result


def main():
   
    # путь к папке, с которой мы начнем поиск
    cernelPath = bge.logic.expandPath('//')
   
    # имя искомого файла, понятно, что должно быть своё
    nameFile = 'robot.blend1'

    # осуществляем поиск и сохраняем результат
    search = searchFile(cernelPath, nameFile)
    # выводим результат поиска на экран
    print(search)
    return 0

# бгешный запуск, вместо if __name__ == '__main__'
cont = bge.logic.getCurrentController()
sens = cont.sensors[0]
if sens.positive:
    main()


суббота, 6 февраля 2016 г.

Поиск файла в указанной директории и вложенных директориях.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  searchFile.py
#  
#  Copyright 2016 denis8424
#  
#  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 2 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, write to the Free Software
#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#  MA 02110-1301, USA.
#  
#
import os

def main():
    # путь к папке, с которой мы начнем поиск
    cernelPath = '/home/denis8424/bge/land_disain/'
    # имя искомого файла
    nameFile = 'soil.jpg'
    # осуществляем поиск и сохраняем результат
    search = searchFile(cernelPath, nameFile)
    # выводим результат поиска на экран
    print(search)
    return 0

def searchFile(startPath, nameFile):
    # результат поиска, по умолчанию "ничего не нашли", он же флаг
    result = False
    # список всех путей к папкам, в которых будем искать
    listPaths = [startPath]
    # просматриваем доступные пути к директориям
    for path in listPaths:
        # просматриваем содержимое текущей папки
        for ob in os.listdir(path):
            # если файл, тот что нам нужен        
            if ob == nameFile:
                # то изменяем значение флага на путь к файлу
                result = path + ob
                # и выходим из этого цикла
                break
            # если же файл не тот, что нужен, но является папкой
            elif os.path.isdir(ob):
                # добавляем путь к новой папке в список всех путей для
                # последующего поиска там
                newPath = path + ob + '/'
                listPaths.append(newPath)
        # если в предыдущем цикле что-то нашли, то выходим и из этого цикла.
        if result != False:
            break
         
    # красиво оформляем фейл поиска    
    if result == False:
        result = 'Извините, по вашему запросу ничего не найдено'
     
    return result


if __name__ == '__main__':
main()


Красивого кода не получилось...

среда, 3 февраля 2016 г.

Пока ничего нового.

    Разве что набросал скриптец, расставляющий объекты в случайной позиции, но в определенном интервале, и задающем цвет и размер объекта в зависимости от случайного параметра. Цвет - градиент от синего к красному. Всё на bpy. А сподвиг меня на сей подвиг Flogger-K aka +Alexandr Kir, со своими вопросами, спасибо ему за это большое (это не шутка). Просто был недавно на форуме b3d.org.ua поднят вопрос визуализации астрономического феномена, в общем надо было визуализировать over 9000 объектов, каждый со своим цветом и размером, зависящим от некоторых параметров.  Я, редиска, когда нужно было, не сделал, другой человек постарался, честь ему и хвала. Теперь подспудно грызёт интерес - а как это можно было сделать?

import bpy
import random

scene = bpy.context.scene
sceneObj = scene.objects
ob = sceneObj['Sphere']

for ob in sceneObj:

    if ob.name != 'Camera' and ob.name != 'Hemi':

        e = random.random()
        if e != 0.0:
            r = 1.0 - 1.0 * e
            g = 0.0
            b = 0.0 +  1.0 * e
        else:
            r = 0.0
            g = 1.0
            b = 0.0
        a = 1.0

        ob.color = (r, g, b, a)
        ob.scale = (e, e, e)

        ob.location[0] = random.randrange(-100.0, 100.0, 1.0)
        ob.location[1] = random.randrange(-100.0, 100.0, 1.0)
        ob.location[2] = random.randrange(-100.0, 100.0, 1.0)

Ниже результат для немногим более двух тысяч объектов в области +/- 100 метров по всем трем осям, ничего особо интересного: