Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Проекты > Проекты C++

Ответ
 
Опции темы
Старый 20.10.2009, 00:48   #16
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: BurnFX RayTracer - W.I.P

ну скрин даже для реалтайм рендера не крут
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 20.10.2009, 08:16   #17
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Ответ: BurnFX RayTracer - W.I.P

Добавлен новый скрин,глобал иллюминижон.
(Offline)
 
Ответить с цитированием
Старый 20.10.2009, 12:04   #18
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: BurnFX RayTracer - W.I.P

вот это уже симпатично, токо вокруг черной миски какой-то внизу будто вообще света нет.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Taugeshtu (20.10.2009)
Старый 21.10.2009, 14:31   #19
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Ответ: BurnFX RayTracer - W.I.P

Решил сегодня в рейтрейсере ввести шейдеры,тоесть имеем такое:

class CTestRayShader : public IRayShader
{
public:

	CTestRayShader(){
	}

	vec3 main( const RayHit& hit ){
		float3 final = float3(0,0,0);
		float3 diffuse = hit.material->getColor();
		float3 base = tex2D(hit.material , float2(hit.u,hit.v) , 0);
		final = diffuse * base;
		return final;
	}
};
Возможностей много(шейдеры пишутся на C++) название типов как в HLSL.

tex2D пердставлена в таком виде:

float4 tex2D( IMaterial* material , const float2& texcoord , int samplerIndex )

первый параметр - матереал
второй - текстурные координаты
третий - индекс семплера(текстуры) в матереале

будут и tex3D,texCUBE.

Щас после переведения трейсера на шейдеры буду доделывать мультисеймплинг(анти альясинг).
(Offline)
 
Ответить с цитированием
Старый 22.10.2009, 01:55   #20
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Ответ: BurnFX RayTracer - W.I.P

Решил отцепить рейтрейсер от двига ну чтобы там например можно было написать для макса експортёр .

Собсна на си это дело вглядит так на данный момент:

#include "..\BurnRay\sdk.h"

using namespace BurnRay;


class TestShader : public Shader
{
public:

	TestShader(){
	}

	float3 main( const RayHit& hit )
	{
		return hit.material->getColor();
	}
};


void main()
{

	FrameBuffer* framebuffer = new FrameBuffer(256,256);
    Renderer* renderer = new Renderer();
	renderer->setFrameBuffer(framebuffer);

	Material* material = new Material();
	material->setShader(new TestShader());
	material->setColor(float3(1,0,0));

	ObjectSphere* sphere = new ObjectSphere();
	sphere->setMaterial(material,0);
	sphere->setPosition(vec3(0,0,25));
	sphere->setRadius(10.4f);

	ObjectSphere* sphere2 = new ObjectSphere();
	sphere2->setMaterial(material,0);
	sphere2->setPosition(vec3(15,0,25));
	sphere2->setRadius(10.4f);

    ObjectSphere* sphere3 = new ObjectSphere();
	sphere3->setMaterial(material,0);
	sphere3->setPosition(vec3(-15,0,25));
	sphere3->setRadius(10.4f);

	ObjectSphere* sphere4 = new ObjectSphere();
	sphere4->setMaterial(material,0);
	sphere4->setPosition(vec3(0,0,45));
	sphere4->setRadius(10.4f);


	ObjectCamera* camera = new ObjectCamera();
	camera->setAspect(256.0f / 256.0f);
	camera->setPosition(vec3(0,0,0));
	camera->setFar(1024.0f);
	camera->setNear(1.0f);
	camera->setFov(89.0f);


	renderer->addObject(sphere);
	renderer->addObject(sphere2);
	renderer->addObject(sphere3);
	renderer->addObject(sphere4);

	renderer->renderFrame(camera,1);

	//float3* frame = framebuffer->getPixels();

	Image* img = new Image(framebuffer->getWidth(),framebuffer->getHeight());
	for(int y=0;y<framebuffer->getHeight();y++){
		for(int x=0;x<framebuffer->getWidth();x++){

			Image::Pixel p;
			p.r = framebuffer->getPixel(x,y).x * 255.0f;
			p.g = framebuffer->getPixel(x,y).y * 255.0f;
			p.b = framebuffer->getPixel(x,y).z * 255.0f;
            p.a = 255.0f;

			img->put(x,y,p);
		}
	}
	img->save("out.tga");
}
(Offline)
 
Ответить с цитированием
Старый 22.10.2009, 18:31   #21
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Ответ: BurnFX RayTracer - W.I.P

Сегодня тестил отрисовку в отдельном новом рей трейсере,рендерил меш 140 тысяч полигонов( тачка Lamb Diablo и плейн максовский ).

Собсно:
Разрешение: 512x512
АнтиАльясинг:1
ФПС:4-8

Вполне быстро на мой взгляд,ну естествено всё это дело рендерилось без эффектов,но 140000 поликов и 8 фпс это вполне думаю с эффектами хоть и оффлайно будет рисоватся быстро.
(Offline)
 
Ответить с цитированием
Старый 22.10.2009, 23:11   #22
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Ответ: BurnFX RayTracer - W.I.P

Первый более менее шейдер написал ,отражения,всё работает.

class Reflectionhader : public Shader
{
public:

	ReflectionShader(){
	}

	float3 shader_main( const Ray& ray , const RayHit& hit , void* data )
	{
		int bounces = 2;

		if(data){
			bounces = *static_cast<int*>(data);
		}

		float3 base = hit.material->getColor();

		if(bounces > 0 && hit.material->getReflective() > 0.0f ){
			bounces--;

			Ray r;
			r.o = hit.point + ( hit.normal * 1.01f );
			r.d = ray.d.reflect(hit.normal);

			RayHit hit2;
			hit2.empty();

			if(rayCast(r,hit2,10000.0f)){
				base = base * ( 1.0f - hit.material->getReflective() ) + hit2.material->getShader()->shader_main(r,hit2,&bounces) * hit.material->getReflective();
			}
		}

		return base;
	}
};
(Offline)
 
Ответить с цитированием
Старый 23.10.2009, 01:49   #23
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Ответ: BurnFX RayTracer - W.I.P

Первый скрин нового рей трейсера,с использованием более брутального шейдера .



Код шейдера:
class ReflectionShader : public Shader
{
public:

	ReflectionShader(){
	}

	float3 shader_main( const Ray& ray , const RayHit& hit , void* data )
	{
		int bounces = 2;

		if(data){
			bounces = *static_cast<int*>(data);
		}

		float3 base = hit.material->getColor();

		float3 accum = float3(0,0,0);
		for(int i=0;i<getRenderer()->getNumLights();i++)
		{
			ObjectLight* light = getRenderer()->getLight(i);
			float3 l = light->getPosition() - hit.point;
			float dist = length(l);
			l = normalize( l );

			Ray shadowRay;
			shadowRay.o = hit.point + ( hit.normal * 1.01f );
			shadowRay.d = l;

			RayHit hit2;
			hit2.empty();

			float shade = 1.0f;

			if(light->getCastShadows()){
				if(light->getShadowSamples() <= 0){
					if(rayCast(shadowRay,hit2,dist))
						shade = 0.0f;
				}else{

					for(int i=0;i<light->getShadowSamples();i++){
						shadowRay.d = shadowRay.d + normalize(float3(randf(),randf(),randf()));
					
						if(rayCast(shadowRay,hit2,dist))
							shade -= 0.1f;
					}

					if(shade < 0.0f)
						shade = 0.0f;
				}
			}

			float d = dot(hit.normal,l);
			if(d > 0.0f){
  
				float attenuation = 1 - sqrt(dist) / sqrt(light->getRadius());

				accum += light->getColor() * d * attenuation * shade;
			}

			if(hit.material->getSpecularPower() > 0.0f){

				float3 v = ray.d;
				float3 r = l - 2.0f * dot( l, hit.normal ) * hit.normal;
				float d = dot( v, r );
				if(d > 0.0f){
					float spec = powf( d , 2 ) * hit.material->getSpecularPower() * shade;
					accum += float3(spec) * light->getColor();
				}
			}
		}
		base *= accum;

		if(bounces > 0 && hit.material->getReflective() > 0.0f ){
			bounces--;

			Ray r;
			r.o = hit.point + ( hit.normal * 1.01f );
			r.d = ray.d.reflect(hit.normal);

			RayHit hit2;
			hit2.empty();

			if(rayCast(r,hit2,10000.0f)){
				base = base * ( 1.0f - hit.material->getReflective() ) + hit2.material->getShader()->shader_main(r,hit2,&bounces) * hit.material->getReflective();
			}
		}

		return base;
	}
};
(Offline)
 
Ответить с цитированием
Старый 23.10.2009, 16:24   #24
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Ответ: BurnFX RayTracer - W.I.P

Вот другую модельку заюзал:
(Offline)
 
Ответить с цитированием
Старый 24.10.2009, 04:25   #25
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Ответ: BurnFX RayTracer - W.I.P

Закончил шейдер Ambient Occlusion:
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
moka (24.10.2009)
Старый 24.10.2009, 04:29   #26
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Ответ: BurnFX RayTracer - W.I.P

Вот блин,надо было для показа с анти альясингом и большим числом сеймплов делать)),щас попрравлю.
(Offline)
 
Ответить с цитированием
Старый 24.10.2009, 06:14   #27
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Ответ: BurnFX RayTracer - W.I.P

Вот более в качественом виде:
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо Igor' за это полезное сообщение:
moka (24.10.2009), Mr_F_ (24.10.2009), Taugeshtu (24.10.2009)
Старый 24.10.2009, 13:12   #28
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: BurnFX RayTracer - W.I.P

гуд.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 24.10.2009, 16:01   #29
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Ответ: BurnFX RayTracer - W.I.P

Взялся всеми руками на ногами за CUDA,перевожу самы хавающие вещи на неё,вернее буду,пока полько разбераюсь архитектурой.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Mr_F_ (24.10.2009)
Старый 24.10.2009, 20:06   #30
Igor'
ПроЭктировщик
 
Аватар для Igor'
 
Регистрация: 15.10.2009
Сообщений: 190
Написано 47 полезных сообщений
(для 142 пользователей)
Ответ: BurnFX RayTracer - W.I.P

Как вам такая табличка?:
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо Igor' за это полезное сообщение:
impersonalis (27.10.2009), moka (24.10.2009), Mr_F_ (24.10.2009)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 09:41.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com